lino 25.1.4__py3-none-any.whl → 25.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
lino/__init__.py CHANGED
@@ -26,7 +26,7 @@ defines no models, some template files, a series of :term:`django-admin commands
26
26
 
27
27
  """
28
28
 
29
- __version__ = '25.1.4'
29
+ __version__ = '25.1.6'
30
30
 
31
31
  # import setuptools # avoid UserWarning "Distutils was imported before Setuptools"?
32
32
 
lino/core/actions.py CHANGED
@@ -1088,6 +1088,7 @@ class CreateRow(Action):
1088
1088
  # if ar.actor.stay_in_grid and ar.requesting_panel:
1089
1089
  if ar.actor.stay_in_grid:
1090
1090
  # do not open a detail window on the new instance
1091
+ ar.set_response(refresh_all=True)
1091
1092
  return
1092
1093
 
1093
1094
  ar.goto_instance(elem)
@@ -1122,7 +1123,7 @@ class CreateRow(Action):
1122
1123
 
1123
1124
  ar.goto_instance(elems[0])
1124
1125
 
1125
- # No need to ask refresh_all since closing the window will
1126
+ # No need to ask refresh_all since closing the detail window will
1126
1127
  # automatically refresh the underlying window.
1127
1128
 
1128
1129
 
@@ -1155,11 +1156,11 @@ class SubmitInsert(CreateRow):
1155
1156
  # Multiple uploads possible, note plural method names.
1156
1157
  elems = ar.create_instances_from_request(**kwargs)
1157
1158
  self.save_new_instances(ar, elems)
1158
- ar.set_response(close_window=True)
1159
1159
  else:
1160
1160
  elem = ar.create_instance_from_request(**kwargs)
1161
1161
  self.save_new_instance(ar, elem)
1162
- ar.set_response(close_window=True)
1162
+
1163
+ ar.set_response(close_window=True)
1163
1164
  # if settings.SITE.is_installed("react"):
1164
1165
  # ar.goto_instance(elem)
1165
1166
 
lino/core/requests.py CHANGED
@@ -495,7 +495,7 @@ class BaseRequest:
495
495
  if self.actor is not None:
496
496
  if master is None:
497
497
  master = self.actor.master
498
- if master_type is not None and ContentType is not None:
498
+ if master_type and ContentType is not None:
499
499
  try:
500
500
  master = ContentType.objects.get(pk=master_type).model_class()
501
501
  except ContentType.DoesNotExist:
lino/help_texts.py CHANGED
@@ -174,6 +174,7 @@ help_texts = {
174
174
  'lino.modlib.uploads.Plugin' : _("""See /dev/plugins."""),
175
175
  'lino.modlib.uploads.Plugin.remove_orphaned_files' : _("""Whether checkdata –fix should automatically delete orphaned files in the uploads folder."""),
176
176
  'lino.modlib.uploads.Plugin.with_thumbnails' : _("""Whether to use PIL, the Python Imaging Library."""),
177
+ 'lino.modlib.uploads.Plugin.with_volumes' : _("""Whether to use library files (volumes)."""),
177
178
  'lino.modlib.weasyprint.Plugin' : _("""See /dev/plugins."""),
178
179
  'lino.modlib.weasyprint.Plugin.header_height' : _("""Height of header in mm. Set to None if you want no header."""),
179
180
  'lino.modlib.weasyprint.Plugin.footer_height' : _("""Height of footer in mm. Set to None if you want no header."""),
@@ -1,5 +1,5 @@
1
1
  # -*- coding: UTF-8 -*-
2
- # Copyright 2021 Rumma & Ko Ltd
2
+ # Copyright 2021-2025 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
4
 
5
5
  from lino import logger
@@ -18,7 +18,7 @@ from lino.utils.test import DemoTestCase
18
18
 
19
19
 
20
20
  class TestCase(DemoTestCase):
21
- tested_urls = ("/", "/?su=3", "/?su=1234")
21
+ tested_urls = ("/", "/?su=3", "/?su=123")
22
22
 
23
23
  def test_get(self):
24
24
  if False:
@@ -43,7 +43,7 @@ class TestCase(DemoTestCase):
43
43
  if settings.SITE.user_model:
44
44
  for user in settings.SITE.user_model.objects.all():
45
45
  if user.user_type:
46
- d = self.login(user.username, "1234")
46
+ d = self.login(user.username, dd.plugins.users.demo_password)
47
47
  # self.client.force_login(user)
48
48
  for url in self.tested_urls:
49
49
  # logger.debug("%s gets %s", user.username, url)
@@ -59,6 +59,7 @@ class TestCase(DemoTestCase):
59
59
 
60
60
  def test_ipdict(self):
61
61
  if not settings.SITE.use_ipdict:
62
+ # print("20250126 no test because use_ipdict is False")
62
63
  return
63
64
  ipdict = dd.plugins.ipdict
64
65
 
@@ -93,14 +94,14 @@ class TestCase(DemoTestCase):
93
94
 
94
95
  # Even with the right password you cannot unlock a blacklisted ip
95
96
  self.assertEqual(
96
- login("1234"), "Too many authentication failures from 127.0.0.1"
97
+ login(dd.plugins.users.demo_password), "Too many authentication failures from 127.0.0.1"
97
98
  )
98
99
 
99
100
  # After max_blacklist_time, the IP gets removed from the blacklist, but
100
101
  # every new failure will now blacklist it again, the
101
102
  # max_failed_auth_per_ip no longer counts.
102
103
 
103
- time.sleep(1)
104
+ time.sleep(1.5)
104
105
  self.assertEqual(login("bad"), "Failed to sign in as robin.")
105
106
  self.assertEqual(rec.login_failures, 5)
106
107
  self.assertEqual(
@@ -108,8 +109,10 @@ class TestCase(DemoTestCase):
108
109
  )
109
110
  self.assertEqual(rec.login_failures, 5)
110
111
 
111
- time.sleep(1)
112
- self.assertEqual(login("1234"), "Now signed in as Robin Rood")
112
+ time.sleep(1.5)
113
+ self.assertEqual(
114
+ login(dd.plugins.users.demo_password),
115
+ "Now signed in as Robin Rood")
113
116
 
114
117
  # Once you manage to authenticate, your ip address gets removed from the
115
118
  # blacklist, i.e. when you log out and in for some reason, you get again
@@ -1,5 +1,5 @@
1
1
  # -*- coding: UTF-8 -*-
2
- # Copyright 2012-2013 Luc Saffre
2
+ # Copyright 2012-2025 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
4
  """
5
5
  Writes screenshots to <project_dir>/media/cache/screenshots
@@ -36,6 +36,7 @@ from django.test.testcases import StoppableWSGIServer
36
36
 
37
37
  from lino.core.utils import obj2str, full_model_name, sorted_models_list
38
38
  from lino.utils import screenshots
39
+ from lino.api import dd
39
40
  from rstgen.utils import SubProcessParent
40
41
 
41
42
  PHANTOMJS = "/home/luc/snapshots/phantomjs-1.9.0-linux-i686/bin/phantomjs"
@@ -223,7 +224,7 @@ class Command(BaseCommand):
223
224
  ctx = dict(
224
225
  url=url, target=target, username=ss.ar.get_user().username
225
226
  )
226
- ctx.update(password="1234")
227
+ ctx.update(password=dd.plugins.users.demo_password)
227
228
  ctx.update(remote_user_header=settings.SITE.remote_user_header)
228
229
  f = file("tmp.js", "wt")
229
230
  f.write(JS_SRC % ctx)
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2023 Rumma & Ko Ltd
1
+ # Copyright 2016-2025 Rumma & Ko Ltd
2
2
  # License: GNU Affero General Public License v3 (see file COPYING for details)
3
3
  """
4
4
  Adds some demo comments.
@@ -44,11 +44,28 @@ def objects():
44
44
  # use_linod = settings.SITE.use_linod
45
45
  # settings.SITE.use_linod = False
46
46
 
47
- if dd.is_installed("contacts"):
48
- BODIES.items.append("")
49
- MENTIONED = Cycler()
50
- MENTIONED.items += list(rt.models.contacts.Person.objects.all())
51
- MENTIONED.items += list(rt.models.contacts.Company.objects.all())
47
+ # Add two empty bodies that will be filled later:
48
+ BODIES.items.insert(0, "")
49
+ BODIES.items.insert(0, "")
50
+ MENTIONED = Cycler()
51
+ for model in rt.models_by_base(Commentable):
52
+ if model.memo_command is not None:
53
+ MENTIONED.items += list(model.objects.all())
54
+
55
+ # if dd.is_installed("contacts"):
56
+ # BODIES.items.append("")
57
+ # MENTIONED = Cycler()
58
+ # MENTIONED.items += list(rt.models.contacts.Person.objects.all())
59
+ # MENTIONED.items += list(rt.models.contacts.Company.objects.all())
60
+
61
+ if dd.get_plugin_setting("uploads", "with_volumes", False):
62
+ Upload = rt.models.uploads.Upload
63
+ SCREENSHOTS = Cycler(Upload.objects.filter(volume__ref="screenshots"))
64
+ if len(SCREENSHOTS) == 0:
65
+ # e.g. when lino_book is not installed
66
+ SCREENSHOTS = None
67
+ else:
68
+ SCREENSHOTS = None
52
69
 
53
70
  for model in rt.models_by_base(Commentable):
54
71
  OWNERS = Cycler(model.objects.order_by("-id"))
@@ -73,9 +90,14 @@ def objects():
73
90
  # txt = TXT.pop() # txt = "Hackerish comment"
74
91
  body = BODIES.pop()
75
92
  if not body:
76
- cmd1 = MENTIONED.pop().obj2memo()
77
- cmd2 = MENTIONED.pop().obj2memo()
78
- body = f"This is a comment about {cmd1} and {cmd2}."
93
+ if SCREENSHOTS is None or i % 2:
94
+ cmd1 = MENTIONED.pop().obj2memo()
95
+ cmd2 = MENTIONED.pop().obj2memo()
96
+ body = f"This is a comment about {cmd1} and {cmd2}."
97
+ else:
98
+ upload = SCREENSHOTS.pop()
99
+ body = f"Here is a screenshot:\n\n [file {upload.pk}]"
100
+
79
101
  obj = Comment(user=u, owner=owner, body=body, reply_to=reply_to)
80
102
  obj.on_create(ses)
81
103
  obj.after_ui_create(ses)
@@ -29,13 +29,11 @@ class Plugin(ad.Plugin):
29
29
  """Whether to use PIL, the Python Imaging Library.
30
30
  """
31
31
 
32
- # def on_ui_init(self, kernel):
33
- # super().on_ui_init(kernel)
34
- # self.site.makedirs_if_missing(self.get_uploads_root())
35
- # self.site.makedirs_if_missing(self.get_volumes_root())
36
- #
37
- # print("20240907 created", self.get_uploads_root())
38
- # print("20240907 created", self.get_volumes_root())
32
+ with_volumes = True
33
+ """Whether to use library files (volumes).
34
+ """
35
+ # TODO: Also remove the Volume model and its actors when with_volumes is set
36
+ # to False.
39
37
 
40
38
  def get_uploads_root(self):
41
39
  # return join(self.site.django_settings["MEDIA_ROOT"], "uploads")
@@ -0,0 +1,53 @@
1
+ # -*- coding: UTF-8 -*-
2
+ # Copyright 2015-2025 Rumma & Ko Ltd
3
+ # License: GNU Affero General Public License v3 (see file COPYING for details)
4
+
5
+ import os
6
+ from lino.api import dd, rt
7
+ from lino.modlib.uploads.mixins import make_uploaded_file
8
+
9
+ try:
10
+ from lino_book import DEMO_DATA
11
+ except ImportError:
12
+ DEMO_DATA = None
13
+
14
+ def walk(p):
15
+ # print("20230331", p)
16
+ for c in sorted(p.iterdir()):
17
+ if c.is_dir():
18
+ for cc in walk(c):
19
+ yield cc
20
+ else:
21
+ yield c
22
+
23
+ def objects():
24
+
25
+ if DEMO_DATA is None:
26
+ # logger.info("No demo data because lino_book is not installed")
27
+ return
28
+ if not dd.plugins.uploads.with_volumes:
29
+ return
30
+
31
+ Upload = rt.models.uploads.Upload
32
+ Volume = rt.models.uploads.Volume
33
+
34
+ def load_vol(root_dir, ref, desc, **kwargs):
35
+ vol = Volume(ref=ref, description=desc, root_dir=root_dir)
36
+ yield vol
37
+ kwargs.update(volume=vol)
38
+ chop = len(str(root_dir)) + 1
39
+ for fn in walk(root_dir):
40
+ fns = str(fn)[chop:]
41
+ # print("20230325 {}".format(fn))
42
+ yield Upload(
43
+ library_file=fns,
44
+ description=fns.replace('_', ' ').replace('/', ' '),
45
+ **kwargs)
46
+
47
+ if dd.is_installed('sources'):
48
+ yield (luc := rt.models.sources.Author(first_name="Luc", last_name="Saffre"))
49
+ yield (source := rt.models.sources.Source(
50
+ author=luc, year_published="2022", title="Private collection"))
51
+ yield load_vol(DEMO_DATA / 'photos', "photos", "Photo album", source=source)
52
+
53
+ yield load_vol(DEMO_DATA / 'screenshots', "screenshots", "Screenshots")
lino/modlib/uploads/ui.py CHANGED
@@ -81,7 +81,7 @@ class Uploads(dd.Table):
81
81
  model = "uploads.Upload"
82
82
  # required_roles = dd.login_required((OfficeUser, OfficeOperator))
83
83
  required_roles = dd.login_required(UploadsReader)
84
- column_names = "file type user owner description id *"
84
+ column_names = "id description file type user owner *"
85
85
  order_by = ["-id"]
86
86
  default_display_modes = {
87
87
  70: constants.DISPLAY_MODE_LIST,
@@ -21,6 +21,7 @@ class Plugin(ad.Plugin):
21
21
  with_nickname = False
22
22
  # partner_model = 'contacts.Person'
23
23
  partner_model = "contacts.Partner"
24
+ demo_password = "1234"
24
25
 
25
26
  def pre_site_startup(self, site):
26
27
  super().pre_site_startup(site)
@@ -1,17 +1,18 @@
1
1
  # -*- coding: UTF-8 -*-
2
- # Copyright 2012-2014 Rumma & Ko Ltd
2
+ # Copyright 2012-2025 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
4
  """
5
- Set password "1234" for all users.
5
+ Set password to :setting:`users.demo_password` for all users.
6
6
 
7
7
  This is an additive fixture designed to work also on existing data.
8
8
 
9
9
  """
10
10
 
11
11
  from django.conf import settings
12
+ from lino.api import dd
12
13
 
13
14
 
14
15
  def objects():
15
16
  for u in settings.SITE.user_model.objects.exclude(user_type=""):
16
- u.set_password("1234")
17
+ u.set_password(dd.plugins.users.demo_password)
17
18
  yield u
lino/modlib/users/ui.py CHANGED
@@ -1,11 +1,7 @@
1
1
  # -*- coding: UTF-8 -*-
2
- # Copyright 2011-2023 Rumma & Ko Ltd
2
+ # Copyright 2011-2025 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
- """Desktop UI for this plugin.
5
-
6
- Documentation is in :doc:`/specs/users` and :doc:`/dev/users`
7
-
8
- """
4
+ # Documentation: :doc:`/specs/users` and :doc:`/dev/users`
9
5
 
10
6
  from datetime import datetime
11
7
  from textwrap import wrap
@@ -135,7 +131,7 @@ class UsersOverview(Users):
135
131
  def row_as_paragraph(cls, ar, self):
136
132
  pv = dict(username=self.username)
137
133
  if settings.SITE.is_demo_site:
138
- pv.update(password="1234")
134
+ pv.update(password=dd.plugins.users.demo_password)
139
135
  btn = rt.models.about.About.get_action_by_name("sign_in")
140
136
  # print btn.get_row_permission(ar, None, None)
141
137
  btn = btn.request(
lino/utils/dbfreader.py CHANGED
@@ -1,20 +1,26 @@
1
- # Copyright 2003-2009-2016 Luc Saffre
1
+ # Copyright 2003-2025 Rumma & Ko Ltd
2
2
  # License: GNU Affero General Public License v3 (see file COPYING for details)
3
3
 
4
- # Based on original work by Lars Garshol
5
- # http://www.garshol.priv.no/download/software/python/dbfreader.py
6
-
7
- # modified by Luc Saffre who is interested in support for Clipper
8
- # rather than FoxPro support.
9
4
  """
10
- What's the format of a Clipper .dbf file?
11
- http://www.the-oasis.net/clipper-12.html#ss12.4
12
5
 
13
- http://www.clicketyclick.dk/databases/xbase/format/
6
+ Defines the :class:`DBFFile` class, used by :doc:`lino_xl.lib.tim2lino` to read
7
+ DBF and DBT files when both settings :attr:`use_dbfread
8
+ <lino_xl.lib.tim2lino.Plugin.use_dbfread>` and :attr:`use_dbf_py
9
+ <lino_xl.lib.tim2lino.Plugin.use_dbf_py>` are `False` (which is default).
10
+
11
+ Based on original work by Lars Garshol
12
+ http://www.garshol.priv.no/download/software/python/dbfreader.py
13
+
14
+ Modified by Luc Saffre to add support for Clipper dialect.
15
+
16
+ Sources of information:
17
+
18
+ - `What's the format of a Clipper .dbf file?
19
+ <https://www.the-oasis.net/clipper-12.html#ss12.4>`__ (broken link)
20
+
21
+ `Xbase & dBASE File Format Description by Erik Bachmann
22
+ <https://www.clicketyclick.dk/databases/xbase/format/>`__
14
23
  """
15
- # from builtins import hex
16
- # from builtins import str
17
- # from builtins import object
18
24
 
19
25
  import datetime
20
26
  from dateutil import parser as dateparser
@@ -56,20 +62,8 @@ def hex_analyze(number):
56
62
  print("%s\t%s\t%d" % (hex(ch), ch, ch))
57
63
 
58
64
 
59
- # def sort_by_key(list,key_func):
60
- # for ix in range(len(list)):
61
- # list[ix]=(key_func(list[ix]),list[ix])
62
-
63
- # list.sort()
64
-
65
- # for ix in range(len(list)):
66
- # list[ix]=list[ix][1]
67
-
68
- # return list
69
-
70
65
  # --- A class for the entire file
71
66
 
72
-
73
67
  class DBFFile(object):
74
68
  "Represents a single DBF file."
75
69
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lino
3
- Version: 25.1.4
3
+ Version: 25.1.6
4
4
  Summary: A framework for writing desktop-like web applications using Django and ExtJS or React
5
5
  Project-URL: Homepage, https://www.lino-framework.org
6
6
  Project-URL: Repository, https://gitlab.com/lino-framework/lino
@@ -1,10 +1,10 @@
1
1
  lino/.cvsignore,sha256=1vrrWoP-WD8hPfCszHHIiJEi8KUMRCt5WvoKB9TSB1k,28
2
2
  lino/SciTEDirectory.properties,sha256=rCYi_e-6h8Yx5DwXhAa6MBPlVINcl6Vv9BQDYZV2_go,28
3
- lino/__init__.py,sha256=5iUFhz4TNfwjFGIjiyQTXaMFRg1C8lAmxgHDQV6XFEU,5584
3
+ lino/__init__.py,sha256=0yrHbVQ2XWyabku43gsxie9HdEs3B8JvaUfMah_yJXM,5584
4
4
  lino/ad.py,sha256=AQ-vJ4scac1mx3xegXezxnxyOQpV-a0q3VFMJSDbj2s,142
5
5
  lino/apps.py,sha256=ECq-dPARDkuhngwNrcipse3b4Irj70HxJs44uWEZFc4,27
6
6
  lino/hello.py,sha256=7-PJg7PnEiznyETqGjOwXcKh8rda0qLetpbS2gvRYy0,532
7
- lino/help_texts.py,sha256=N78O2lzBeNWW_eKh6PSyTLR9ye7-MA4xf0ZLPG1i6vc,90797
7
+ lino/help_texts.py,sha256=xLCUrDYM6fiYJSevxi6iq8xAO7XyKikm29HEJMv8HLo,90895
8
8
  lino/api/__init__.py,sha256=WmzHU-rHdZ68se_nI0SmepQTGE8-cd9tPpovHRH9aag,512
9
9
  lino/api/ad.py,sha256=F6SrcKPRRalHKOZ7QLwsRWGq9hhykQIeo0b85cEk9NQ,314
10
10
  lino/api/dd.py,sha256=-mjuoflZilnFM97we-N1H_sEf1TQiNs62JwZ5m4XV1s,7813
@@ -28,7 +28,7 @@ lino/config/unused/403.html,sha256=ePwDIUXhz1iD8xXWWyt5xEvpcGIHU4LMnXma8x0ik1c,2
28
28
  lino/config/unused/404.html,sha256=GOJrAyF6NcM69ETdSHgjff_-lvYs_-bOYhyZBem7x3I,220
29
29
  lino/config/unused/500.html,sha256=aWmP37uPoMS-PJgPuBloxdx0nEreU7AvkXxsex3yVYs,544
30
30
  lino/core/__init__.py,sha256=T7106QxQpa3jXAouGTIer6AXEwpkJ0NAQ9B7Q3-K6qE,686
31
- lino/core/actions.py,sha256=RiyuaK5F-VE6S7FVgSivOBx74F9H4uwGFOMEhXt66Rg,46395
31
+ lino/core/actions.py,sha256=B8jCkE__GNIL820LCc10yOzJ7inCUyxn9u1KupS9y84,46398
32
32
  lino/core/actors.py,sha256=lsp-w2kC_t_-iqeHtIYIkIPoS_jbHgZ3MZlGJWH2dyc,73663
33
33
  lino/core/boundaction.py,sha256=tb0C4WwbJpAP3yKbR6OaibzcAkwVs3nfeuD0RjXTjIg,6665
34
34
  lino/core/callbacks.py,sha256=xkosb1l48o6WeSdj82k5udK9OmjI7-p6x4AJFjXiOf8,7518
@@ -56,7 +56,7 @@ lino/core/model.py,sha256=MNTlg53WbKXPIne5wOHtO5V3nLdxoYTBMosz9JdFQJU,36386
56
56
  lino/core/permissions.py,sha256=Fnemz3NwWz21X0YATI9Q7ba2FcAdg-EMLHjIcbt_AVU,6840
57
57
  lino/core/plugin.py,sha256=oVvTsGoBBYmjvRgtyiFPIiHZQErH0ZlNjiUFtOk2dOM,6834
58
58
  lino/core/renderer.py,sha256=jIXxNSpljZhb9tBMhUfDNbZD3XmxYzaS6SlipHx29L4,47291
59
- lino/core/requests.py,sha256=DijyPSRmwVbuco-JAHy7gZZMyOxA-cXPnVQ3rbpw9Fs,92834
59
+ lino/core/requests.py,sha256=DAen9Jys3RfDMRQNbQFAo_h7iUipe7khhXTVT4RvcNY,92822
60
60
  lino/core/roles.py,sha256=PXwk436xUupxdbJcygRSYFu7ixfKjAJPQRUQ8sy0lB0,4425
61
61
  lino/core/signals.py,sha256=0JT89mkjSbRm57QZcSI9DoThoKUGkyi-egNhuLUKEds,948
62
62
  lino/core/site.py,sha256=lEPAEF4OyBsF8NLy3y9O0GOcC5C1REc9ug9mIZR-mIs,83150
@@ -97,14 +97,14 @@ lino/locale/zh_Hant/LC_MESSAGES/django.po,sha256=KWejkd_imTiK-SX6BG_bfEGtGIWEQ-b
97
97
  lino/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
98
  lino/management/commands/__init__.py,sha256=raVDRiXns3SegyXEhaLZMcxfEDs7ggy2nFUN5D0f5F0,47
99
99
  lino/management/commands/buildcache.py,sha256=QjhvKKdp1mX6rl8Y5rcS6kUK2LVOBVAd6wrUKLYSGF8,448
100
- lino/management/commands/demotest.py,sha256=xnqRRFvKZ94pcWSlepFFAR7ycC4c2ppWqSRsSGj__Ac,4844
100
+ lino/management/commands/demotest.py,sha256=zb9gSrgqOH2S-OJSKUNezprUEbJLBQf8tVGSVdSENik,5017
101
101
  lino/management/commands/diag.py,sha256=vt-NlZUx5gf7T4EpbM-gle3tAwMuwfPQY8lUgxjFaUw,478
102
102
  lino/management/commands/dump2py.py,sha256=DyvhXYPJY7-Tt_xyw4_U5WjVeobcOU5AhWRZB6l4esI,20329
103
103
  lino/management/commands/dump_settings.py,sha256=tGOR4h_ueVe2DOk84ILFvzvndt0doshvaxRkybB-rnY,2009
104
104
  lino/management/commands/initdb.py,sha256=U1yu7JoPG3sDVYmn985Z73oux1zPHl7Ur_U5UJbMBb4,11467
105
105
  lino/management/commands/install.py,sha256=PljQJecr9s8rk5caR4rW0Fg1mL3S9JJHp6NqgB8bWTs,1888
106
106
  lino/management/commands/makemigdump.py,sha256=TvNnFFjD6XRMFLbX8IEMSNDKTMPLTBCi8i5SRNcpYD8,1279
107
- lino/management/commands/makescreenshots.py,sha256=VkTMmlRzG8JyxQne3bDm4ONXY5-dW0RmiJZvbbOGEDo,8615
107
+ lino/management/commands/makescreenshots.py,sha256=fJF7ATZz7_s1IWkkYMEHVTLB5r5C1ny-kJp253BeoKM,8667
108
108
  lino/management/commands/makeui.py,sha256=qYz68fnUKNXicZfGy3GXdjIZubhg1KyQnqjMblFN_LY,4813
109
109
  lino/management/commands/mergedata.py,sha256=-dPvBtyc-AqKpQeL4TUd2IKHGe8EaaW8Citcsp_hwEU,2527
110
110
  lino/management/commands/monitor.py,sha256=-axtsW-uzk87ESR6-GSfUL0Y2ylB5BwHC6Xlx3fPxo4,5113
@@ -180,7 +180,7 @@ lino/modlib/comments/roles.py,sha256=z3gctvlTa_5PAs-D4pounyzNyuEc31jTFq9g33r6Z1w
180
180
  lino/modlib/comments/ui.py,sha256=w72vOmK8fn6H13t2aPS7ydYU1fCsbbMH2-TSNWt3pwA,9799
181
181
  lino/modlib/comments/config/comments/comments.js,sha256=7oAnNyx_MKM1iWPu-QSp6iKfnOVdgq7EciQPpxTvYU8,242
182
182
  lino/modlib/comments/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
- lino/modlib/comments/fixtures/demo2.py,sha256=YxzgXaQeH3bum5_7473ie4hJtHfKSChuR19sTBSd4fo,24466
183
+ lino/modlib/comments/fixtures/demo2.py,sha256=FGsX1_r9h2Zz11wbemkqx_AcFIRmYKMx9TineWs_ic0,25328
184
184
  lino/modlib/dashboard/__init__.py,sha256=_PFbmakUn8DShXyJY3EfAcuZtX5ofWnS-8dk7s1CrLw,1420
185
185
  lino/modlib/dashboard/models.py,sha256=EgRNg88dmz-OlIdi1SyEuerWMsRqKIfqE2MgKL7kApw,3510
186
186
  lino/modlib/dupable/__init__.py,sha256=fIQ8wj-T8ZbkjwQgW_-ankJsHLjPMepOTo32mJXNCvI,532
@@ -4388,7 +4388,7 @@ lino/modlib/tinymce/static/tinymce-4.1.10/skins/lightgray/img/loader.gif,sha256=
4388
4388
  lino/modlib/tinymce/static/tinymce-4.1.10/skins/lightgray/img/object.gif,sha256=5qFeUrxKF7CFBzuo3r1HCOrWrj1MvrOIDGXLevxIl3c,152
4389
4389
  lino/modlib/tinymce/static/tinymce-4.1.10/skins/lightgray/img/trans.gif,sha256=nPAg18O7p_WrEM2lSqvvk0-QbU-aOs-Z6efcbJhXljU,43
4390
4390
  lino/modlib/tinymce/static/tinymce-4.1.10/themes/modern/theme.min.js,sha256=w41NrMzqdGEDk6OhjeuElBHlIr5Ntt_QpdoxNRFXa3Q,6431
4391
- lino/modlib/uploads/__init__.py,sha256=vM3gC8xZ-JdOf1EuNipJyHIhg5V8rLLWCPWTCKLp5aU,2830
4391
+ lino/modlib/uploads/__init__.py,sha256=S6RNBs5vwCTnoAkPGRGWBQdKp1uOzWngc_B19iAmGsg,2675
4392
4392
  lino/modlib/uploads/actions.py,sha256=lSdMmMmFaJRkJ2JkMX0aOVFNiisGVcI3PP3WqSQmK1E,1402
4393
4393
  lino/modlib/uploads/choicelists.py,sha256=RVKLCEDly9VUa183ul5U9DRla8yOkMxrP4qMjTC5410,1327
4394
4394
  lino/modlib/uploads/dummy_upload.odt,sha256=VHG2YkykCg8VqoXx8Hm37QYunvdbmg_jCyygiZseKF8,10447
@@ -4396,24 +4396,25 @@ lino/modlib/uploads/dummy_upload.pdf,sha256=hdAx7s3V10lqVekSGugzkn_Hqxx3V4OkCNVN
4396
4396
  lino/modlib/uploads/mixins.py,sha256=4CSTEDU0ZBfdCV5RqV9SGc3r0rH7TlaGdB7tGGlVN-o,8000
4397
4397
  lino/modlib/uploads/models.py,sha256=ATLVrV1cbmUj7Kv_pLOmBz3IkKpvYBjGriv74AkjD0M,16528
4398
4398
  lino/modlib/uploads/roles.py,sha256=ae0wf_vC4O6MffDx8abpjW1M2oWOp5VzOvt_ckk72Cc,191
4399
- lino/modlib/uploads/ui.py,sha256=Iu06xyKaTKbw2YfTgDJYWQVXuUuVAqENgnfnscViL_c,8456
4399
+ lino/modlib/uploads/ui.py,sha256=dc17OUf8R6jqFFt6qzfCkBHIiMKEhoOBGFw0esWfA2g,8456
4400
4400
  lino/modlib/uploads/utils.py,sha256=MQAJbI5sUe0RCXCrkxpNKUJFxHpz1bOMqKQy3QsA76o,3343
4401
4401
  lino/modlib/uploads/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4402
+ lino/modlib/uploads/fixtures/demo.py,sha256=XY5oNgPvlPcL3B3nBMkqpAkfRZ0WGsr_2edOlpWTcF8,1661
4402
4403
  lino/modlib/uploads/fixtures/demo3.py,sha256=q0bwZrx5XtRsRlFpsa33fL0sCl7IdCYaP9E1rhCnJt4,547
4403
- lino/modlib/users/__init__.py,sha256=QHLCNKiRMyL14Iy2eiz7_y9fAwugnDCt4N0aKtIhFA8,3188
4404
+ lino/modlib/users/__init__.py,sha256=40f-PheIyHqAzGXQbkvEKAnZ9_bb8RkaLAKIqNE96qg,3215
4404
4405
  lino/modlib/users/actions.py,sha256=Nik2CoxKZWoGIsPT50mWESzHSTQx9WiBXWG64CUFyS8,18074
4405
4406
  lino/modlib/users/choicelists.py,sha256=-X76C1NxIs5e7rFHp5Z0kjJkA1NlOP2vdLKGkI2wZRU,3876
4406
4407
  lino/modlib/users/mixins.py,sha256=cMmTtR1-w9iWgdPlNF5kMybDR41D5kd1waGxEROSvSE,14150
4407
4408
  lino/modlib/users/models.py,sha256=tdROzvtd3cMxsXKtYZjcUv2XJU7hQLbyBCiE0zVvaOo,16470
4408
4409
  lino/modlib/users/roles.py,sha256=yi29ELbWU1VtteGARaxetxmsCkZQHA2oJiD0dXujMiE,320
4409
- lino/modlib/users/ui.py,sha256=kRuCCEK77ZhHj3kawio6NTcAvEixwupKkVnQ5LByCEc,13143
4410
+ lino/modlib/users/ui.py,sha256=WA1bqVx1Z4yQzydHhvw_d5yE-teKdkHqd36ynz9ivPk,13127
4410
4411
  lino/modlib/users/utils.py,sha256=bD0DJZsUy59xw9N-tx3W_h30_R10GT2qXZVzYtGWMa8,1963
4411
4412
  lino/modlib/users/config/users/verification_response.html,sha256=8X1sEn53ploQgB6ds0UfmmkZpcvP9KSwWiQjRE_q970,772
4412
4413
  lino/modlib/users/config/users/welcome_email.eml,sha256=bPSPbJKIPFRVWPDCuhNquQYwQtXzYGZgs7wICoiutS8,1078
4413
4414
  lino/modlib/users/config/users/User/welcome.body.html,sha256=5k1cVYdYUd0vDLUzyRBtGy52A027wpRiGYLbdgaOKs0,141
4414
4415
  lino/modlib/users/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4415
4416
  lino/modlib/users/fixtures/demo.py,sha256=YHPhvjqAh-V9WHgFct2GQlQATZmS-W3Nry-X6mI05z8,199
4416
- lino/modlib/users/fixtures/demo2.py,sha256=4-toQfGIkJF8eROS1FgBxP6w-EiKOI7QBoHcIO2T0dw,420
4417
+ lino/modlib/users/fixtures/demo2.py,sha256=j2ke91wvpHs3kHpeztzV3nOG4rJvavkHv2YJo0dISdI,495
4417
4418
  lino/modlib/users/fixtures/demo_users.py,sha256=FJz5gW95PbgxrPD8BMSVnpA8SJJSPWtjyi3LMdytd5o,1805
4418
4419
  lino/modlib/users/fixtures/std.py,sha256=Eo_TdqFC7NPryLeGRfp-nbOXw3hDqxTUpddFTxUuZ74,712
4419
4420
  lino/modlib/weasyprint/__init__.py,sha256=_kLw0xg5_ByLv4l5VvQbZjTtloTM4c9WrpfFgOGMPVc,2344
@@ -4604,7 +4605,7 @@ lino/utils/cycler.py,sha256=2LGMhMJX5At5ln4yZvmNleWROs-CA_YE_UCzxzvxK4U,1548
4604
4605
  lino/utils/daemoncommand.py,sha256=NjGShiz09fddIV0WU0jK2nzO_CwPj1MfdmgwAOYZi4M,11525
4605
4606
  lino/utils/dataserializer.py,sha256=-_xHXaGwDSO6-sYEHEa2BtEmKS8bW6gsYx4dV-GbvDs,3779
4606
4607
  lino/utils/dates.py,sha256=eWF5WxA5uJf51Y9PKvDVBWD8yIf6yBF6oO6TeU3ujzw,1030
4607
- lino/utils/dbfreader.py,sha256=lTIHkqmWJnKTdMwtF7amlSVBZZe2bW81fWF22Y4f5nM,12131
4608
+ lino/utils/dbfreader.py,sha256=4sXOGBKX6DFQCEPkCMfnJAVneHMyDzJQB5tsYAq90vQ,12205
4608
4609
  lino/utils/dblogger.py,sha256=kr0YxQY6veymvNg5A4tsvkqW8haRWdwqL0C-_9_QTg0,721
4609
4610
  lino/utils/diag.py,sha256=evkU818hZSGpWdL0Du11QakT5_frvc5z4C93IEBlECg,18307
4610
4611
  lino/utils/djangotest.py,sha256=Phz1qNp0wDonZRja5dxbCk0Xl3a73gZNiKK8v9tAgZg,8334
@@ -4648,8 +4649,8 @@ lino/utils/xml.py,sha256=4Z44W1e5HvTVrU8erkohgnwqY-5Cr2NHywaAJ5OgRvw,989
4648
4649
  lino/utils/mldbc/__init__.py,sha256=QqWRlzeXaOmFfbCk-vTY3SZMn1-FCf67XnpZdd_Nim0,1134
4649
4650
  lino/utils/mldbc/fields.py,sha256=tAX8G5UKigr9c6g0F3ARIjZZtg406mdaZ--PWSbiH9E,2873
4650
4651
  lino/utils/mldbc/mixins.py,sha256=CkYe5jDa7xp9fJq_V8zcZf8ocxgIjUgHc9KZccvA_Yw,1945
4651
- lino-25.1.4.dist-info/METADATA,sha256=k3hFLehospJnAypZq6TLEZbj_UZ5sh2UwBbKAWImOFo,42534
4652
- lino-25.1.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
4653
- lino-25.1.4.dist-info/licenses/AUTHORS.rst,sha256=8VEm_G4HOmYEa4oi1nVoKKsdo4JanekEJCefWd2E8vk,981
4654
- lino-25.1.4.dist-info/licenses/COPYING,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
4655
- lino-25.1.4.dist-info/RECORD,,
4652
+ lino-25.1.6.dist-info/METADATA,sha256=WqVqvSO_n0TLfSy-ydW7pz01iQW5IDz8nz90x5fge4I,42534
4653
+ lino-25.1.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
4654
+ lino-25.1.6.dist-info/licenses/AUTHORS.rst,sha256=8VEm_G4HOmYEa4oi1nVoKKsdo4JanekEJCefWd2E8vk,981
4655
+ lino-25.1.6.dist-info/licenses/COPYING,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
4656
+ lino-25.1.6.dist-info/RECORD,,
File without changes