lino 25.3.3__py3-none-any.whl → 25.4.0__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.
Files changed (38) hide show
  1. lino/__init__.py +7 -1
  2. lino/api/dd.py +1 -1
  3. lino/config/admin_main_base.html +4 -3
  4. lino/help_texts.py +12 -14
  5. lino/locale/bn/LC_MESSAGES/django.po +1112 -907
  6. lino/locale/de/LC_MESSAGES/django.mo +0 -0
  7. lino/locale/de/LC_MESSAGES/django.po +1066 -918
  8. lino/locale/django.pot +1041 -900
  9. lino/locale/es/LC_MESSAGES/django.po +1103 -902
  10. lino/locale/et/LC_MESSAGES/django.po +1103 -915
  11. lino/locale/fr/LC_MESSAGES/django.po +1105 -916
  12. lino/locale/nl/LC_MESSAGES/django.po +1102 -917
  13. lino/locale/pt_BR/LC_MESSAGES/django.po +1099 -900
  14. lino/locale/zh_Hant/LC_MESSAGES/django.po +1099 -900
  15. lino/management/commands/buildcache.py +48 -3
  16. lino/management/commands/prep.py +1 -1
  17. lino/mixins/duplicable.py +1 -1
  18. lino/modlib/__init__.py +0 -1
  19. lino/modlib/checkdata/models.py +33 -15
  20. lino/modlib/comments/fixtures/demo2.py +1 -9
  21. lino/modlib/extjs/views.py +2 -3
  22. lino/modlib/linod/mixins.py +94 -41
  23. lino/modlib/linod/models.py +1 -1
  24. lino/modlib/memo/__init__.py +4 -0
  25. lino/modlib/memo/models.py +47 -1
  26. lino/modlib/users/ui.py +4 -2
  27. lino/modlib/weasyprint/__init__.py +12 -20
  28. lino/modlib/weasyprint/config/weasyprint/base.weasy.html +13 -2
  29. lino/sphinxcontrib/logo/__init__.py +2 -1
  30. lino/utils/__init__.py +1 -0
  31. lino/utils/dbhash.py +5 -3
  32. lino/utils/format_date.py +9 -4
  33. {lino-25.3.3.dist-info → lino-25.4.0.dist-info}/METADATA +1 -1
  34. {lino-25.3.3.dist-info → lino-25.4.0.dist-info}/RECORD +37 -38
  35. lino/management/commands/buildsite.py +0 -67
  36. {lino-25.3.3.dist-info → lino-25.4.0.dist-info}/WHEEL +0 -0
  37. {lino-25.3.3.dist-info → lino-25.4.0.dist-info}/licenses/AUTHORS.rst +0 -0
  38. {lino-25.3.3.dist-info → lino-25.4.0.dist-info}/licenses/COPYING +0 -0
lino/__init__.py CHANGED
@@ -31,7 +31,7 @@ from django import VERSION
31
31
  from django.apps import AppConfig
32
32
  from django.conf import settings
33
33
  import warnings
34
- __version__ = '25.3.3'
34
+ __version__ = '25.4.0'
35
35
 
36
36
  # import setuptools # avoid UserWarning "Distutils was imported before Setuptools"?
37
37
 
@@ -96,6 +96,12 @@ warnings.filterwarnings(
96
96
  # TODO: get everything to work even when ResourceWarning gives an error
97
97
  # warnings.filterwarnings("error", category=ResourceWarning)
98
98
 
99
+ warnings.filterwarnings("error", category=SyntaxWarning)
100
+
101
+ # 20250401 Activating the following line caused `doctest docs/plugins/linod.rst`
102
+ # to fail with "Fatal Python error: Segmentation fault":
103
+ # warnings.filterwarnings("error", category=DeprecationWarning)
104
+
99
105
 
100
106
  # def setup_project(settings_module):
101
107
  # os.environ['DJANGO_SETTINGS_MODULE'] = settings_module
lino/api/dd.py CHANGED
@@ -155,7 +155,7 @@ from lino.utils import IncompleteDate, read_exception
155
155
 
156
156
  from lino.utils.format_date import fdm, fdl, fdf, fdmy
157
157
  from lino.utils.format_date import fds as fds_
158
- from lino.utils.format_date import ftl
158
+ from lino.utils.format_date import ftl, ftf
159
159
 
160
160
 
161
161
  def fds(d):
@@ -77,20 +77,21 @@
77
77
  {{_("Or sign in using ")}}
78
78
  {% for e in site.get_social_auth_links() %}
79
79
  {{tostring(e)}}
80
- {% endfor %}
80
+ {% endfor %}.
81
81
  {% endif %}
82
82
  </p>
83
83
  {% if site.is_demo_site %}
84
84
  <p>
85
85
  {{_("This demo site has %d users:") %
86
- site.models.users.UsersOverview.request().get_total_count()}}
86
+ site.models.users.UsersOverview.create_request().get_total_count()}}
87
87
  </p>
88
88
  {% if False %}
89
89
  <p>{{ar.show(site.models.users.UsersOverview, display_mode="ul")}}</p>
90
90
  {% else %}
91
91
  {{as_ul('users.UsersOverview')}}
92
92
  {% endif %}
93
- <p>{{_("The password is the same for all of them: \"1234\".")}}</p>
93
+ <p>{{_("The password is the same for all of them:")}}
94
+ "{{site.plugins.users.demo_password}}".</p>
94
95
  {% endif %}
95
96
  {% endif %}
96
97
  {% endblock %}
lino/help_texts.py CHANGED
@@ -139,7 +139,7 @@ help_texts = {
139
139
  'lino.modlib.extjs.ext_renderer.ExtRenderer.goto_instance' : _("""See JsRenderer.goto_instance(), but when this is called while the detail window is already open (only on another record), then we don’t want to redirect to another page because that would take more time."""),
140
140
  'lino.modlib.extjs.views.AdminIndex' : _("""Similar to PlainIndex"""),
141
141
  'lino.modlib.extjs.views.Restful' : _("""Used to collaborate with a restful Ext.data.Store."""),
142
- 'lino.modlib.extjs.views.ApiElement' : _("""The view that responds to r'api/(?P<app_label>\w+)/(?P<actor>\w+)/(?P<pk>[^/]+)$'."""),
142
+ 'lino.modlib.extjs.views.ApiElement' : _("""The view that responds to api/app_label/actor/pk."""),
143
143
  'lino.modlib.gfks.Plugin' : _("""Base class for this plugin."""),
144
144
  'lino.modlib.importfilters.Plugin' : _("""See /dev/plugins."""),
145
145
  'lino.modlib.jinja.Plugin' : _("""See /dev/plugins."""),
@@ -153,13 +153,13 @@ help_texts = {
153
153
  'lino.modlib.memo.Plugin' : _("""Base class for this plugin."""),
154
154
  'lino.modlib.memo.Plugin.parser' : _("""An instance of lino.modlib.memo.parser.Parser."""),
155
155
  'lino.modlib.memo.Plugin.front_end' : _("""The front end to use when writing previews."""),
156
- 'lino.modlib.memo.parser.Suggester' : _("""Holds the configuration for the behaviour of a given “trigger”."""),
157
156
  'lino.modlib.memo.parser.Parser' : _("""The memo parser."""),
158
157
  'lino.modlib.memo.parser.Parser.add_suggester' : _("""Add a Suggester (see there for args and kwargs)."""),
159
- 'lino.modlib.memo.parser.Parser.register_command' : _("""Register a memo command identified by the given text cmd."""),
160
- 'lino.modlib.memo.parser.Parser.register_django_model' : _("""Register the given string name as command for referring to database rows of the given Django database model model."""),
161
158
  'lino.modlib.memo.parser.Parser.get_referred_objects' : _("""Yield all database objects referred in the given text using a suggester."""),
162
159
  'lino.modlib.memo.parser.Parser.parse' : _("""Parse the given string src, replacing memo commands by their result."""),
160
+ 'lino.modlib.memo.parser.Parser.register_command' : _("""Register a memo command identified by the given text cmd."""),
161
+ 'lino.modlib.memo.parser.Parser.register_django_model' : _("""Register the given string name as command for referring to database rows of the given Django database model model."""),
162
+ 'lino.modlib.memo.parser.Suggester' : _("""Holds the configuration for the behaviour of a given “trigger”."""),
163
163
  'lino.modlib.restful.Plugin' : _("""See /dev/plugins."""),
164
164
  'lino.modlib.smtpd.Plugin' : _("""See /dev/plugins."""),
165
165
  'lino.modlib.system.Plugin' : _("""See /dev/plugins."""),
@@ -172,13 +172,6 @@ help_texts = {
172
172
  'lino.modlib.tinymce.Plugin.window_buttons2' : _("""The second row of toolbar buttons when editing in own window."""),
173
173
  'lino.modlib.tinymce.Plugin.window_buttons3' : _("""The third row of toolbar buttons when editing in own window."""),
174
174
  'lino.modlib.tinymce.Plugin.media_name' : _("""Lino currently includes three versions of TinyMCE, but for production sites we still use the eldest version 3.4.8."""),
175
- 'lino.modlib.weasyprint.Plugin' : _("""See /dev/plugins."""),
176
- 'lino.modlib.weasyprint.Plugin.header_height' : _("""Height of header in mm. Set to None if you want no header."""),
177
- 'lino.modlib.weasyprint.Plugin.footer_height' : _("""Height of footer in mm. Set to None if you want no header."""),
178
- 'lino.modlib.weasyprint.Plugin.top_right_width' : _("""Width of top-right.jpg in mm. If not given, Lino computes it based on height."""),
179
- 'lino.modlib.weasyprint.Plugin.top_right_image' : _("""The first image file found in config named either top-right.jpg or top-right.png."""),
180
- 'lino.modlib.weasyprint.Plugin.header_image' : _("""The first image file found in config named either header.jpg or header.png."""),
181
- 'lino.modlib.weasyprint.Plugin.margin' : _("""Top and bottom page margin in mm."""),
182
175
  'lino.modlib.wkhtmltopdf.Plugin' : _("""See /dev/plugins."""),
183
176
  'lino.sphinxcontrib.actordoc.CurrentLanguage' : _("""Tell Sphinx to switch to the specified language until the end of this document."""),
184
177
  'lino.sphinxcontrib.actordoc.CurrentProject' : _("""Tell Sphinx to switch to the specified project until the end of this document."""),
@@ -371,13 +364,18 @@ help_texts = {
371
364
  'lino.modlib.linod.LogLevels' : _("""A choicelist of logging levels available in this application."""),
372
365
  'lino.modlib.linod.SystemTask' : _("""Django model used to represent a background task."""),
373
366
  'lino.modlib.linod.SystemTask.start_datetime' : _("""Tells at what time exactly this job started."""),
374
- 'lino.modlib.linod.SystemTask.message' : _("""Stores information about the job, mostly logs."""),
375
- 'lino.modlib.linod.SystemTask.disabled' : _("""Tells whether the task should be ignored."""),
376
- 'lino.modlib.linod.SystemTask.log_level' : _("""The logging level to apply when running this task."""),
377
367
  'lino.modlib.linod.SystemTask.run' : _("""Performs a routine job."""),
378
368
  'lino.modlib.linod.SystemTasks' : _("""The default table for the SystemTask model."""),
379
369
  'lino.modlib.linod.Runnable' : _("""Model mixin used by SystemTask and other models."""),
370
+ 'lino.modlib.linod.Runnable.run_now' : _("""Explicitly request to tun this task as soon as possible."""),
371
+ 'lino.modlib.linod.Runnable.cancel_run' : _("""Cancel the explicit request to tun this task as soon as possible."""),
380
372
  'lino.modlib.linod.Runnable.procedure' : _("""The background procedure to run in this task."""),
373
+ 'lino.modlib.linod.Runnable.requested_at' : _("""The timestamp when a user has explicitly requested to run this task."""),
374
+ 'lino.modlib.linod.Runnable.last_start_time' : _("""The timestamp when this task has started running in the task runner."""),
375
+ 'lino.modlib.linod.Runnable.last_end_time' : _("""The timestamp when this task has finished running in the task runner."""),
376
+ 'lino.modlib.linod.Runnable.message' : _("""Stores information about the job, mostly logs."""),
377
+ 'lino.modlib.linod.Runnable.disabled' : _("""Tells whether the task should be ignored."""),
378
+ 'lino.modlib.linod.Runnable.log_level' : _("""The logging level to apply when running this task."""),
381
379
  'lino.modlib.periods.StoredYear' : _("""The Django model used to store a fiscal year."""),
382
380
  'lino.modlib.periods.StoredPeriod' : _("""The Django model used to store an accounting period."""),
383
381
  'lino.modlib.periods.StoredYears' : _("""The fiscal years defined in this database."""),