lino 25.7.1__py3-none-any.whl → 25.7.2__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.
@@ -33,9 +33,9 @@ except ImportError:
33
33
 
34
34
 
35
35
  class BuildMethod(Choice):
36
- target_ext = None
37
- cache_name = "cache"
38
- use_webdav = False
36
+ target_ext: str = None
37
+ cache_name: str = "cache"
38
+ use_webdav: bool = False
39
39
 
40
40
  def __init__(self, names=None, **kwargs):
41
41
  # For build methods, `Choice.names` and `Choice.value` are the
@@ -65,9 +65,9 @@ class BuildMethod(Choice):
65
65
 
66
66
 
67
67
  class TemplatedBuildMethod(BuildMethod):
68
- template_ext = None
69
- templates_name = None
70
- default_template = "" # overridden by lino_xl.lib.appypod
68
+ template_ext: str = None
69
+ templates_name: str = None
70
+ default_template: str = "" # overridden by lino_xl.lib.appypod
71
71
 
72
72
  def __init__(self, *args, **kwargs):
73
73
  super().__init__(*args, **kwargs)
@@ -22,7 +22,7 @@ from .choicelists import BuildMethods
22
22
  from .actions import (
23
23
  DirectPrintAction,
24
24
  CachedPrintAction,
25
- ClearCacheAction,
25
+ ClearCache,
26
26
  EditTemplate,
27
27
  )
28
28
 
@@ -153,7 +153,7 @@ class CachedPrintable(Duplicable, Printable):
153
153
  abstract = True
154
154
 
155
155
  do_print = CachedPrintAction()
156
- do_clear_cache = ClearCacheAction()
156
+ do_clear_cache = ClearCache()
157
157
  edit_template = EditTemplate()
158
158
 
159
159
  build_time = models.DateTimeField(
@@ -1,5 +1,5 @@
1
1
  # -*- coding: UTF-8 -*-
2
- # Copyright 2020-2024 Rumma & Ko Ltd
2
+ # Copyright 2020-2025 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
4
 
5
5
  from lino.api.ad import Plugin
@@ -12,17 +12,7 @@ class Plugin(Plugin):
12
12
  "lino.modlib.jinja",
13
13
  "lino.modlib.bootstrap3",
14
14
  ]
15
- locations = []
16
-
17
- def setup_main_menu(self, site, user_type, m, ar=None):
18
- mg = self.get_menu_group()
19
- m = m.add_menu(mg.app_label, mg.verbose_name)
20
- m.add_action("publisher.Pages")
21
-
22
- def setup_config_menu(self, site, user_type, m, ar=None):
23
- mg = self.get_menu_group()
24
- m = m.add_menu(mg.app_label, mg.verbose_name)
25
- m.add_action("publisher.SpecialPages")
15
+ locations: list[tuple[str, str]] = []
26
16
 
27
17
  def get_requirements(self, site):
28
18
  yield "python-lorem"
@@ -41,34 +31,35 @@ class Plugin(Plugin):
41
31
  app = site.models.get(app_label)
42
32
  cls = getattr(app, model_name, None)
43
33
  if not isinstance(cls, type) or not issubclass(cls, Actor):
44
- raise Exception("location {}: {} is not an Actor".format(view, cls))
34
+ raise Exception(f"location {loc}: {cls} is not an Actor")
45
35
  if not issubclass(cls.model, Publishable):
46
36
  raise Exception(
47
- "location {}: model is a {}, which is not Publishable".format(
48
- view, type(cls.model)
49
- )
50
- )
51
-
37
+ f"location {loc},{view}: "
38
+ f"model {type(cls.model)} is not Publishable")
52
39
  cls.model._lino_publisher_location = loc
53
40
  locations.append((loc, cls))
54
41
  self.locations = tuple(locations)
55
42
 
56
43
  def get_patterns(self):
57
44
  from django.urls import re_path as url
58
- from lino.core.utils import models_by_base
59
45
  from . import views
60
- # from .choicelists import PublisherViews
61
- # raise Exception("20220927")
62
- # print("20220927", list(PublisherViews.get_list_items()))
63
46
 
64
- # for pv in PublisherViews.get_list_items():
65
- for publisher_location, table_class in self.locations:
66
- # print("20220927", pv.publisher_location)
67
- # if publisher_location is not None:
47
+ for location, table_class in self.locations:
68
48
  yield url(
69
- "^{}/(?P<pk>.+)$".format(publisher_location),
70
- views.Element.as_view(table_class=table_class),
71
- )
49
+ f"^{location}/(?P<pk>.+)$",
50
+ views.Element.as_view(table_class=table_class))
72
51
 
73
- yield url("^$", views.Index.as_view())
52
+ # Only if this is the primary front end:
53
+ if self.site.kernel.web_front_ends[0] is self:
54
+ yield url("^$", views.Index.as_view())
74
55
  # yield url('^login$',views.Login.as_view())
56
+
57
+ def setup_main_menu(self, site, user_type, m, ar=None):
58
+ mg = self.get_menu_group()
59
+ m = m.add_menu(mg.app_label, mg.verbose_name)
60
+ m.add_action("publisher.Pages")
61
+
62
+ def setup_config_menu(self, site, user_type, m, ar=None):
63
+ mg = self.get_menu_group()
64
+ m = m.add_menu(mg.app_label, mg.verbose_name)
65
+ m.add_action("publisher.SpecialPages")
@@ -47,6 +47,8 @@ from .ui import *
47
47
 
48
48
  # class Node(Referrable, Hierarchical, Sequenced, Previewable, Publishable, Commentable):
49
49
  # Polymorphic,
50
+
51
+
50
52
  class Page(
51
53
  Hierarchical, Sequenced, Previewable, Commentable, PublishableContent, Taggable
52
54
  ):
@@ -205,7 +207,7 @@ class Page(
205
207
  if not self.children.exists():
206
208
  return
207
209
 
208
- yield "<p><b>{}</b></p>".format(_("Children:"))
210
+ # yield "<p><b>{}</b></p>".format(_("Children:"))
209
211
 
210
212
  if hlevel > home.child_node_depth:
211
213
  yield " (...)"
@@ -1,19 +1,12 @@
1
1
  # -*- coding: UTF-8 -*-
2
- # Copyright 2020-2024 Rumma & Ko Ltd
2
+ # Copyright 2020-2025 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
4
 
5
- from django.conf import settings
6
5
  from django import http
7
- from django.views.generic import View
8
- from django.utils import translation
9
-
10
- from lino.api import dd
11
- from lino.core import auth
12
- from lino.core.requests import BaseRequest, ActionRequest
6
+ from django.conf import settings
13
7
  from django.core.exceptions import ObjectDoesNotExist
14
-
15
- from django.shortcuts import redirect
16
- from django.views.decorators.csrf import ensure_csrf_cookie
8
+ from django.utils import translation
9
+ from django.views.generic import View
17
10
 
18
11
 
19
12
  class Element(View):
@@ -39,9 +39,18 @@ class Plugin(ad.Plugin):
39
39
  margin_left = 17
40
40
  margin_right = 10
41
41
  space_before_recipient = 15
42
+ with_bulma = False
43
+
44
+ def get_needed_plugins(self):
45
+ for p in super().get_needed_plugins():
46
+ yield p
47
+ if self.with_bulma:
48
+ yield 'bulma'
42
49
 
43
50
  def get_requirements(self, site):
44
51
  yield "imagesize"
52
+ if self.with_bulma:
53
+ yield 'django-bulma'
45
54
 
46
55
  def pre_site_startup(self, site):
47
56
  for ext in ("jpg", "png"):
@@ -2,22 +2,26 @@
2
2
  # Copyright 2016-2024 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
4
 
5
- from pathlib import Path
6
5
  from lino.modlib.jinja.choicelists import JinjaBuildMethod
7
6
  from lino.modlib.printing.choicelists import BuildMethods
7
+ from lino.api import dd
8
8
 
9
9
  try:
10
10
  from weasyprint import HTML
11
11
  except ImportError:
12
12
  HTML = None
13
13
 
14
- try:
15
- import bulma
16
- from weasyprint import CSS
17
- BULMA_CSS = Path(bulma.__file__).parent / "static/bulma/css/style.min.css"
18
- assert BULMA_CSS.exists()
19
- except ImportError:
20
- BULMA_CSS = None
14
+ BULMA_CSS = None
15
+
16
+ if dd.plugins.weasyprint.with_bulma:
17
+ try:
18
+ from pathlib import Path
19
+ import bulma
20
+ from weasyprint import CSS
21
+ BULMA_CSS = Path(bulma.__file__).parent / "static/bulma/css/style.min.css"
22
+ assert BULMA_CSS.exists()
23
+ except ImportError:
24
+ pass
21
25
 
22
26
 
23
27
  class WeasyBuildMethod(JinjaBuildMethod):
@@ -38,7 +42,8 @@ class WeasyPdfBuildMethod(WeasyBuildMethod):
38
42
  def html2file(self, html, filename, context):
39
43
  pdf = HTML(string=html)
40
44
  if BULMA_CSS and context.get('use_bulma_css', False):
41
- pdf.write_pdf(filename, stylesheets=[CSS(filename=BULMA_CSS)])
45
+ pdf.write_pdf(
46
+ filename, stylesheets=[CSS(filename=BULMA_CSS)])
42
47
  else:
43
48
  pdf.write_pdf(filename)
44
49
 
@@ -31,13 +31,18 @@ table.footer td {
31
31
  border: none;
32
32
  padding: 6pt;
33
33
  }
34
- span.page_num_of::after {
35
- content: '{{_("Page")}} ' counter(page) ' {{_("of {0}").format("")}}' counter(pages);
36
- }
34
+ {#
35
+ Removed after #6179 (The footer of a multipage invoice shows the same
36
+ pagenumber on each page)
37
37
 
38
- span.printed_time::after {
39
- content: '{{_("Printed")}} {{fdm(dd.today())}} {{_("at")}} {{now.time().strftime("%H:%M")}}';
40
- }
38
+ span.page_num_of::after {
39
+ content: '{{_("Page")}} ' counter(page) ' {{_("of {0}").format("")}}' counter(pages);
40
+ }
41
+
42
+ span.printed_time::after {
43
+ content: '{{_("Printed")}} {{fdm(dd.today())}} {{_("at")}} {{now.time().strftime("%H:%M")}}';
44
+ }
45
+ #}
41
46
 
42
47
  body {
43
48
  font-family: "Liberation sans", "Arial", "Helvetica";
@@ -83,13 +88,10 @@ div.recipient {
83
88
  margin-left: {{dd.plugins.weasyprint.margin_left}}mm;
84
89
  margin-right: {{dd.plugins.weasyprint.margin_right}}mm;
85
90
  {%- if dd.plugins.weasyprint.page_background_image -%}
86
- {#
87
- background: url(file://{{dd.plugins.weasyprint.page_background_image}}) no-repeat center center fixed;
88
- #}
89
- background-image: url(file://{{dd.plugins.weasyprint.page_background_image}});
90
- background-repeat: no-repeat;
91
- background-attachment: fixed;
92
- background-size: contain;
91
+ background-image: url(file://{{dd.plugins.weasyprint.page_background_image}});
92
+ background-repeat: no-repeat;
93
+ background-attachment: fixed;
94
+ background-size: contain;
93
95
  {%- endif -%}
94
96
  font-family: "Liberation sans", "arial";
95
97
  font-size: 10pt;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lino
3
- Version: 25.7.1
3
+ Version: 25.7.2
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,14 +1,14 @@
1
1
  lino/.cvsignore,sha256=1vrrWoP-WD8hPfCszHHIiJEi8KUMRCt5WvoKB9TSB1k,28
2
2
  lino/SciTEDirectory.properties,sha256=rCYi_e-6h8Yx5DwXhAa6MBPlVINcl6Vv9BQDYZV2_go,28
3
- lino/__init__.py,sha256=4GRhJ-tINrEyoiodjk4mtp_0OCEWUq5l7p-5_kDYIrI,6176
3
+ lino/__init__.py,sha256=odCk-YexuT5Jr0q8uV4WtTzrvQX1tAWdIVO-yZuaEYo,6176
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=TxOF546t_KpaAJEkbhfcTjGvS4eM7KDxwZ9iyay6_lM,91937
7
+ lino/help_texts.py,sha256=i-Dm3syEE7R8AZy50L5oIyG2VKXoifvLHeCwMTNJceI,92136
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=w-5qIpWdXu5yXyCC4Qh4ApB3yZTn0AwdxAjEhH8PyVE,7510
11
- lino/api/doctest.py,sha256=03DJb2p2XU3c6jsU7-yDSZl8GG9Qqs8zLLoVgfMuq2c,25176
11
+ lino/api/doctest.py,sha256=xyVvEuW8udXaCa699rgD_25kLWKlFejxlbuwwqzM1mQ,25244
12
12
  lino/api/rt.py,sha256=OCYWhrWnMcL988MdvBLBEP8qKQJEGXQhVoam_X0sotU,1376
13
13
  lino/api/selenium.py,sha256=bOu8UaNz3Q7lGVvxjmvrtYtSWn1xfI1f5MN5sVcdYr8,9383
14
14
  lino/api/shell.py,sha256=epyjwEZ396TiJ0AHqhVIvzX8TBIXU8xR4UHJlYOrRhc,536
@@ -27,9 +27,9 @@ lino/config/plugins/eid_jslib.js,sha256=PsJdUICoGK2nR9EbRg-7drI1AoasLWT_d3RInUWH
27
27
  lino/config/unused/403.html,sha256=ePwDIUXhz1iD8xXWWyt5xEvpcGIHU4LMnXma8x0ik1c,232
28
28
  lino/config/unused/404.html,sha256=GOJrAyF6NcM69ETdSHgjff_-lvYs_-bOYhyZBem7x3I,220
29
29
  lino/config/unused/500.html,sha256=aWmP37uPoMS-PJgPuBloxdx0nEreU7AvkXxsex3yVYs,544
30
- lino/core/__init__.py,sha256=9nP7MydRX_PBbQuGbF4_wIZ98CkClMP5HKXeRB0CnoY,747
31
- lino/core/actions.py,sha256=VgSPlXxkimk9IHFm8g0aOfyn--ig9C7sM4yHuaTTup0,32337
32
- lino/core/actors.py,sha256=sYV0C90l4FPoiNIZwVyE0YNXCEF09IK27EDB_36gvWc,77906
30
+ lino/core/__init__.py,sha256=I4X69XK6Y1MZ8X6tC13Wmg13C3r5iTfYcFDiPJKpUdw,726
31
+ lino/core/actions.py,sha256=3lJTiTQKEArzPr-MhuPF70IlpZgPmOZBBNQncLwfOZQ,32370
32
+ lino/core/actors.py,sha256=hbbzTpP7iBjQ2Eup4JhV5zx8w64arqPpkv4RnCptyKY,72585
33
33
  lino/core/atomizer.py,sha256=T2hrXJoGRy_mYfYT4fILcicpNZ1v-wMw8iF7Zqq-tNQ,13401
34
34
  lino/core/boundaction.py,sha256=06NNPjCesEr-R1YQKkiuy8JKzDrMJJ948x9jczOkZqY,7850
35
35
  lino/core/callbacks.py,sha256=uu1-znzxVDD-JETUebw-hYsNg_9ExQb1vfwbc7Psjro,7549
@@ -41,32 +41,32 @@ lino/core/dbtables.py,sha256=AqH7OGnXiup7avmFU-GQubXqVYW338tu43D5X9BCyFE,29127
41
41
  lino/core/dbutils.py,sha256=_QHcWd-ajLUwt5G8uOp8d47lZQKD3VseHnqKJke18rA,263
42
42
  lino/core/ddh.py,sha256=dYScxWKTOCDEgow7wJNJe812ESasmmITPK2ovraBQno,3172
43
43
  lino/core/diff.py,sha256=XQ-oQQDS_v3kXd4eRP9Hwr5UCgp-TPZIPVav9ZblUno,5882
44
- lino/core/elems.py,sha256=LAiJK41-OCB0LIS7FAphD1HYCQGW9KlgDvMJFQdAi-o,110631
44
+ lino/core/elems.py,sha256=vGAqGwWkNUG9mtQkeu-EOlqPpOHyvnI6uhHn9ivsNdw,110631
45
45
  lino/core/exceptions.py,sha256=QDxDo5cllSyXQ8VWet9hGXzNadxCOmwMVrFXc6V-vpE,665
46
- lino/core/fields.py,sha256=VQK7g4cWKUroHDEh_Cnk0ru3y_rzt-KiLcC-uj-XqRE,54809
46
+ lino/core/fields.py,sha256=kM6HL3e8S3tdIljXbJd1us4hjR_ZdjxbKu76Jdgd6bU,54866
47
47
  lino/core/frames.py,sha256=ISxgq9zyZfqW3tDZMWdKi9Ij455lT_81qBH0xex0bfE,1161
48
48
  lino/core/gfks.py,sha256=6VXn2FSIXOrwVq0stfbPevT37EWg1tg4Fn-HMNVnbmk,1970
49
49
  lino/core/help.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  lino/core/inject.py,sha256=Qd_PGEn0yMXNYVPI0wCv1vvo2CNdlPkyoBmKZELOtGM,13422
51
- lino/core/kernel.py,sha256=KrP976zSkPPT5jAObHIxUDpXwPdyMzIyHbmRHmn2-b0,48570
51
+ lino/core/kernel.py,sha256=YWsw9_6RmJtJT1dlg9zaAzBbnjFRjJKHL7qGyM-lyNc,48831
52
52
  lino/core/keyboard.py,sha256=W3jA6qtB5HMppoNnd_6PgIM7ZlyHilJEhBvdeZTY7Xk,1283
53
- lino/core/layouts.py,sha256=dmjpZWaqthgOJbC9NlZTB1ya_MLAZM2BzVtMQvEqQOs,28206
53
+ lino/core/layouts.py,sha256=CWhKgCEBnjn39RMFRYUklPEvvCnZrDXhtigZpGuiR8o,28176
54
54
  lino/core/menus.py,sha256=oZN93iwQU4vfUCuxQzaVz2xcccN5AG6NG2wGruL74sU,10713
55
55
  lino/core/merge.py,sha256=sKtTeZtHdoDKerdHj4NXuXXNzpKDsfdPaiq-CY0NqQc,9094
56
- lino/core/model.py,sha256=deKe_o_JEuwO1AyJhVqnr4iS25OKX3YExdAygfHwZB4,37015
56
+ lino/core/model.py,sha256=LZE1De2sboRMqlmLycu4utuIsACSeBtG9COaj9CSeXE,37041
57
57
  lino/core/permissions.py,sha256=sNReMhnjIpOZcJ79Z4k-Emp55evblExJZwH-PM-efcA,7579
58
- lino/core/plugin.py,sha256=n_f5dSy4vqamnyzpNnaNcTlUp2EAgaAVxIJ5EHG7aHc,6837
59
- lino/core/renderer.py,sha256=WFRcyfeZjNucyHOc-B5agQirb4YhTOCZgQu25vlFOaQ,48252
60
- lino/core/requests.py,sha256=g_TH_Zs3sXKHQtSSKuOhMR2gOjHlEh4kNXML41BrpDs,96356
58
+ lino/core/plugin.py,sha256=ZuA2d1oa3Mqx_jyPIwIV68cyzawLw_grthliIo83nuM,6835
59
+ lino/core/renderer.py,sha256=HhRC_gtrapNLw2Xl-cs67YdI_NdEdJ2ULsbvs5gb2wA,48252
60
+ lino/core/requests.py,sha256=_kwmx8VAwdaPssIdsZt_GzCst67BTR7WwVv4z_KCsNo,96389
61
61
  lino/core/roles.py,sha256=PXwk436xUupxdbJcygRSYFu7ixfKjAJPQRUQ8sy0lB0,4425
62
62
  lino/core/signals.py,sha256=ORY2s3Krlh9n24XyHetfwbeUhCqzib6YSqWeFTTY7ps,979
63
- lino/core/site.py,sha256=07wtz6RMVdRd8fFH1KHHpaHSNU7WysLTuuNWbS9VKfI,83585
63
+ lino/core/site.py,sha256=HidiqVqXkTi-OKvNg8tvlR_FEKYEaowZ9h3ly0Zx-Fk,83583
64
64
  lino/core/store.py,sha256=lv5fNf8LPzYcO1rpS-5T-Dcw6haQrLc9aaIFO7m1ukI,46055
65
65
  lino/core/tables.py,sha256=sjmVu3A8gnamxwy16n76UJy2BXgiqeNeCEbI4oGd93Q,25431
66
66
  lino/core/urls.py,sha256=06QlmN1vpxjmb5snO3SPpP6lX1pMdE60bTiBiC77_vQ,2677
67
67
  lino/core/user_types.py,sha256=0iSYmzr2M9v2Mn2y6hzAZeqareUT-gD7l3MfIPyG9ZI,867
68
68
  lino/core/userprefs.py,sha256=cmufIS9xJErKDrw05uoWtQTUR6WRWIGkU1KdAqzNr5M,2850
69
- lino/core/utils.py,sha256=2QXFTsYYD-2QNga7a47R73e_s1-l7zgR0SCbhWXCves,40387
69
+ lino/core/utils.py,sha256=FAIJPRYFIVoyOrpc9AWwNaM4f5Z8OEgbYwGu6v4RQPA,40462
70
70
  lino/core/views.py,sha256=qLjEN6GSXScbmAnKN7yDHySmsjL0h4sMKRIQCpOEdPU,7026
71
71
  lino/core/widgets.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
72
  lino/core/workflows.py,sha256=6DJ-sCcZ7kwUWYvArD2_j4NZBia0S3OgHySifC-NSuQ,10584
@@ -124,7 +124,7 @@ lino/mixins/periods.py,sha256=b2vucnjFXYalxiDlH_LsSfPwJU5tcluKfFAaLS3vTck,11519
124
124
  lino/mixins/polymorphic.py,sha256=MLbfOeIYRoDZO4048X2oWhG5cxds2pLkwciXcw1xjVQ,9393
125
125
  lino/mixins/printable.py,sha256=4U8M1lrTjUeuaPwrcWoanCBo53iAxiNpSTsVctI-gI0,199
126
126
  lino/mixins/ref.py,sha256=qV8CprGCvwzzWTl6LQc9I1RwD8pziD0F7Ykoaznm8wM,5550
127
- lino/mixins/registrable.py,sha256=BXl5GZtXKDP5fyg8FHoJFzo-0zkboWCuGkMxcDMphp0,7197
127
+ lino/mixins/registrable.py,sha256=RXNaQS76X8_vLs2c57hxQ9BcCuPWF1CBH2T3hjnB61o,7258
128
128
  lino/mixins/sequenced.py,sha256=6j3slKU_nX2O0gymicNsWAcx93DfpNgg-Pe7Tzp6q24,16630
129
129
  lino/modlib/__init__.py,sha256=cO31gNu2oRkp7o2v3D9gK2H7j4jF9rbVyPxPZhZQwrQ,940
130
130
  lino/modlib/about/__init__.py,sha256=jhqGQIXU1o7KkmmQjfwPKJc3buibB09Fy55carAmi7U,342
@@ -189,7 +189,7 @@ lino/modlib/export_excel/__init__.py,sha256=HrsrhXjIMvMHRGu8whH3A_WijZWrH35p2cQs
189
189
  lino/modlib/export_excel/models.py,sha256=u9COKVdVsPwGk5WjgVarjLSkxmS-KOdohXfH4CruF_c,5353
190
190
  lino/modlib/extjs/__init__.py,sha256=6UBWAWSROwy3DfTXQmVUVJTF6eZ_e2k3BEfE4wtqVhU,10172
191
191
  lino/modlib/extjs/ext_renderer.py,sha256=zjyZ8POSCoQMCzeaisIYJwk_OM6v0GimuRKddvyQAEM,60659
192
- lino/modlib/extjs/views.py,sha256=OI_j2Yc1rd0LTEQH_HObz1472hYh1_GrcKThgIx01Qg,26725
192
+ lino/modlib/extjs/views.py,sha256=krcr8oCmQUXX7wK7eP-LxTCDUL8AtqMFqbNPXY0LA5c,26964
193
193
  lino/modlib/extjs/config/extjs/index.html,sha256=jO5hdNpFSkm9t0xhHD5hc8Hw1fSr6xb3zYq9aMyOI7Q,8603
194
194
  lino/modlib/extjs/config/extjs/linoweb.js,sha256=I4VYGmkK4htqZvHM9g-6psJF3pp7SvgHEI0I02Sxpvo,175127
195
195
  lino/modlib/extjs/config/extjs/service-worker.js,sha256=KEKWeehTlfBHk3r8NbsP9C5av_DukHORybxFOwbjYaQ,1767
@@ -3486,10 +3486,6 @@ lino/modlib/extjs/static/filterRow/images/grid3-hrow-over.gif,sha256=rB1ZXIZpXr2
3486
3486
  lino/modlib/extjs/static/filterRow/images/grid3-hrow.gif,sha256=nVjC7LBaJ2voOKV0eBJxBsltnSJ3xujk_NvnRd2ObK4,853
3487
3487
  lino/modlib/extjs/static/filterRow/images/grid3-hrow2-over.gif,sha256=aDLPaz9PDKsTCUntlEJaJFqL2yK6mW41CpbcStUq91g,826
3488
3488
  lino/modlib/extjs/static/filterRow/images/moreOptions.png,sha256=xNWuPzMGJqzfFsY6joMNCL3OhgDA7lQumFS7Rg94Mck,6446
3489
- lino/modlib/forms/__init__.py,sha256=mnqO1aui7njM7XjlC5Fil_1Fmiqz0szvdTer86AZeWE,1183
3490
- lino/modlib/forms/models.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3491
- lino/modlib/forms/renderer.py,sha256=KLMAyDPLpWlRCzzQ4F4aS2bs5birR_JaFQu6lQX-ZNk,2406
3492
- lino/modlib/forms/views.py,sha256=L8U8LKFB1bP1q2NiAcRkZvynT_uw7yb93HIwA3TaXTs,10313
3493
3489
  lino/modlib/gfks/__init__.py,sha256=2f34DqbWXWUxE_y_0LqLfkpoyZ-cqQucg4xZkI2H3VY,1247
3494
3490
  lino/modlib/gfks/fields.py,sha256=qVQhkSlj1pxhFEOw5QjEHty9dAtSmXakNU98vztREj8,3251
3495
3491
  lino/modlib/gfks/mixins.py,sha256=BcITVETBR7zVj684diZGCii3rzm7lgrgzr2euy-D-iw,2626
@@ -3532,7 +3528,7 @@ lino/modlib/languages/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
3532
3528
  lino/modlib/languages/fixtures/all_languages.py,sha256=311mA7tFvB33eVAZYk2B-rP0Hgf3qf01m3nGD_9nuyw,20905
3533
3529
  lino/modlib/languages/fixtures/few_languages.py,sha256=nhhfS4bV9x2yvtGlWFX5j7pC40-c31bFInGvlHxmT4Y,846
3534
3530
  lino/modlib/languages/fixtures/iso-639-3_20100707.tab,sha256=u8PwI2s8shy0_Val5-sa76Nll5FEtGi6_lAZevC-syY,180479
3535
- lino/modlib/linod/__init__.py,sha256=efmj_Kz3OO2zF1lvs7P459iufYGimH1-6Ge6Cbq85tQ,2665
3531
+ lino/modlib/linod/__init__.py,sha256=zn0MW5jo1QSUoZYDxqqyAY4Ra5fMRW9NWAzdXtTyWXg,2663
3536
3532
  lino/modlib/linod/choicelists.py,sha256=UqRCmjcWkj5iYj6wudEV9Be5_cpy833TC6euo8tMNfY,4826
3537
3533
  lino/modlib/linod/consumers.py,sha256=XBjA1fflJ-e9yWRMKXyQAhrOklYzs5JRhEeGMOKWFqM,6730
3538
3534
  lino/modlib/linod/mixins.py,sha256=PNw-YCcDtT4xQEEAU9v4nvacDp_2S_BWip2Cu3dzOnw,12027
@@ -3544,7 +3540,7 @@ lino/modlib/linod/fixtures/checkdata.py,sha256=JBh_r-OCd0VXSgyxegBq8fmf5T2CyeKjX
3544
3540
  lino/modlib/linod/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3545
3541
  lino/modlib/linod/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3546
3542
  lino/modlib/linod/management/commands/linod.py,sha256=SzJ6-yRpI1QFrXqiS8AO7_c2NmkMdV4JpFhfyGzs5eI,2587
3547
- lino/modlib/memo/__init__.py,sha256=RojyLzLNvL7JEcp65lTTg16ENPQcIYXxcelf3nKprds,5410
3543
+ lino/modlib/memo/__init__.py,sha256=mM4xIODNczmmn43ympj_Un7sPyc9RuIr6zmGKYB5vkk,5381
3548
3544
  lino/modlib/memo/mixins.py,sha256=gtWbmpjLEEBSB11zp30t1Kf3ukUsGXntaIjymj3Kq6k,10915
3549
3545
  lino/modlib/memo/models.py,sha256=zUEvWu0dK5QhkU3DeMqNqsrzSUzOl6DLZaJBNytfgrs,4388
3550
3546
  lino/modlib/memo/parser.py,sha256=h21I0EjXfV2oHvekp5LxqtfEGlHREa1eOFHU3yC3sOw,13029
@@ -3577,27 +3573,27 @@ lino/modlib/odata/__init__.py,sha256=k26EMnYYOaS4FoIlsOqlbhRZvBPuTjYyGPyTRfP9YaY
3577
3573
  lino/modlib/odata/views.py,sha256=ssyYYIyGoxXtR3hKnIa-ZBPLb6vxEU5C6XUUQ1L6Z70,7205
3578
3574
  lino/modlib/odata/config/odata/csdl.xml,sha256=KFDImzUA4YI6PL-i5AHnm22eBMLTw-K2iljslDJFQH8,296
3579
3575
  lino/modlib/office/__init__.py,sha256=rOKD9zKt-VBvFFqoHBioNp299Igb1Sk2n466iCt6ASQ,287
3580
- lino/modlib/office/roles.py,sha256=oQWTZ-_9_vssc9QW5A0YspMjG_V5gCiHSU0eE0AIH30,356
3576
+ lino/modlib/office/roles.py,sha256=ZDerYusqGLP_YPFJAGNjEIHjNIvAFZ_2zfLaCuHg_7o,319
3581
3577
  lino/modlib/periods/__init__.py,sha256=Y1Ug7B1LZ3GN-HyT5kiN_40dvaZHlovn5gt-qPmTHLQ,1142
3582
3578
  lino/modlib/periods/choicelists.py,sha256=1DiNk8ufjLufPmX0MTi767bPngPvzh10u5EDp0lMd9I,1454
3583
3579
  lino/modlib/periods/mixins.py,sha256=QQXtu1Z6HjqDlL_xMM98FR7PQGKhYgjslhusOiWwPDA,4271
3584
3580
  lino/modlib/periods/models.py,sha256=VPLed_glyek0atkpVcbWKn-YWLIDI4dhJ-guBkKvdYo,9255
3585
3581
  lino/modlib/periods/fixtures/std.py,sha256=aWzt-frGjzPDwQ2pCKU1nT3oE4xzm7AQ8uLTJqSnS54,741
3586
3582
  lino/modlib/printing/__init__.py,sha256=u1fq44d073-IDH_t8hWs1sQdlAHdsCP85sfEOMSW5L4,689
3587
- lino/modlib/printing/actions.py,sha256=2-JORKcjJYuzK2kYmhqZl0gRR-4CrG7ul8mcFNfYYAI,11766
3588
- lino/modlib/printing/choicelists.py,sha256=DM929pej7NUi1gm38nUr0t3-VANV95eqCLeW5ubh8y8,9712
3589
- lino/modlib/printing/mixins.py,sha256=4MLDD-A0zzuJNVcWJzbhyPfC9l6UUgKhm-m8DokN0aM,8353
3583
+ lino/modlib/printing/actions.py,sha256=gn4XqIvToXUumymDA20sl7RRsPOejCMu8dKZ3NJJKcE,11669
3584
+ lino/modlib/printing/choicelists.py,sha256=UeOVlkYsLV7gxmVWuKqgqrU5zRlYyUck_3ebKDYnqDA,9743
3585
+ lino/modlib/printing/mixins.py,sha256=1ETtco9A0Err6Vw46LnQOGEd7bSB5AzC7KCa-O7uXfE,8341
3590
3586
  lino/modlib/printing/models.py,sha256=fd-BEKSLpgxPnkh9U7fg2tjNy39exBi3xJC9VzJuXdU,185
3591
3587
  lino/modlib/printing/utils.py,sha256=LUO9769wJvHCPZIqeVQ9XAS6UKJ6BfJbiwO8Dt1kHc4,737
3592
3588
  lino/modlib/printing/config/report/Default.odt,sha256=4X8UD9H_5Th2CELP0C6DTe4g0ZNUPXAg1C00xP3Qluc,10930
3593
3589
  lino/modlib/printing/config/report/Default.wk.html,sha256=4Ssx2LWm1gVpXf0Q4XoSY15WkhqRvx51Upab-IS1nm0,96
3594
- lino/modlib/publisher/__init__.py,sha256=bGQduKmgzr_lU2N6H4q4I5ZmW-3iwdPuT2D8dpiVOiI,2644
3590
+ lino/modlib/publisher/__init__.py,sha256=9w4cclyodBB3PO5rFzheIkzJs-tfA62PSGx2WI0NL5Q,2303
3595
3591
  lino/modlib/publisher/choicelists.py,sha256=gVzjyp1sJ-XewAW-I_bCrKdTLgygLzh1ZwFI1rKyPdo,9070
3596
3592
  lino/modlib/publisher/mixins.py,sha256=yRxAtFSNe9aVvdY-th_a5wmQ76jBfKYWzeNUn-efJMA,6651
3597
- lino/modlib/publisher/models.py,sha256=Yn6MRp2_iHIXw-kwlfaQP4mfSkVPJdjEBJ8pqgltcPQ,17260
3593
+ lino/modlib/publisher/models.py,sha256=GKM31oWJ6etzughvpQKuGN1rvHSiKneB4t6dWRBvsrA,17264
3598
3594
  lino/modlib/publisher/renderer.py,sha256=Rl6fX8PzfX6crmnUh8mdU5Mpe44mSN5lTu_Pv8aVSCk,1845
3599
3595
  lino/modlib/publisher/ui.py,sha256=qWp3JWhO6zN_HSZvSlolmNTgiZgoJeY2_TIDh9nYf3Q,4491
3600
- lino/modlib/publisher/views.py,sha256=_0ktDagke4TOWVekJOnaRJBrbKqn27Yfz3SC2UnHKTM,2423
3596
+ lino/modlib/publisher/views.py,sha256=l_GomdliB1qCylg7jKKkay3ZgAaOPfWNQQ6ZPDjAUl0,2214
3601
3597
  lino/modlib/publisher/config/publisher/base.html,sha256=nrWuN4lhP1O4ORdYTaY3fS2pc90yfUnfDYfm2Jtr7hQ,198
3602
3598
  lino/modlib/publisher/config/publisher/default_list.pub.html,sha256=3ePc4U3xZxE-pqtzlnB9CRQWu8OQrtfXKEjyuc8BBUQ,578
3603
3599
  lino/modlib/publisher/config/publisher/item.pub.html,sha256=973RYgCAYG1SYIB4bwfVZFVTUo0WD2I98PsoPgjQ8XA,154
@@ -4426,10 +4422,10 @@ lino/modlib/users/fixtures/demo.py,sha256=YHPhvjqAh-V9WHgFct2GQlQATZmS-W3Nry-X6m
4426
4422
  lino/modlib/users/fixtures/demo2.py,sha256=j2ke91wvpHs3kHpeztzV3nOG4rJvavkHv2YJo0dISdI,495
4427
4423
  lino/modlib/users/fixtures/demo_users.py,sha256=zTkqxi6hUBL55B9FGpilrhT0aiBXN9uEhxzu0onCF5g,744
4428
4424
  lino/modlib/users/fixtures/std.py,sha256=Eo_TdqFC7NPryLeGRfp-nbOXw3hDqxTUpddFTxUuZ74,712
4429
- lino/modlib/weasyprint/__init__.py,sha256=i0xDsTTIAHGtoStybEv_YNCFJmxGeCy-e5qAyDWWygg,2285
4430
- lino/modlib/weasyprint/choicelists.py,sha256=A3zXUGoiU06DuC8PIM2zS3lnKQk_pahsfXPRAQfMLog,1266
4425
+ lino/modlib/weasyprint/__init__.py,sha256=0bKrkAQUcICXAxocT3zlJdyRBtOw7WP-wbEThMFNNHw,2525
4426
+ lino/modlib/weasyprint/choicelists.py,sha256=HiQuU2UpC0_U989MAZSCIt4Jkb3E2O3JTlT5H2UeJKE,1386
4431
4427
  lino/modlib/weasyprint/models.py,sha256=op6CRRBC8NatqGgGdQHU4zcVG4fu4mRS9Mz8STG3B3g,168
4432
- lino/modlib/weasyprint/config/weasyprint/base.weasy.html,sha256=zs2QpK7DX-uGBYs30eJAFlPyyI2UySyt_Ee17twNcgY,4617
4428
+ lino/modlib/weasyprint/config/weasyprint/base.weasy.html,sha256=QgQBIt6guuKTLftlnNXD40LfmyBEMqHhrijp63slHA0,4620
4433
4429
  lino/modlib/wkhtmltopdf/__init__.py,sha256=1nqwVpOQH4YMhegnzrcfvXW_Xy9CIdHBHzrNvDGyVxg,773
4434
4430
  lino/modlib/wkhtmltopdf/choicelists.py,sha256=Mq7LySs-HJIXnyUHN5PR55nQyg2cgPjEQuN9JUhBmUY,1818
4435
4431
  lino/modlib/wkhtmltopdf/models.py,sha256=T7lHSSQKNcUWceNnNzq_bKEguXQ1THK5qyCDgeV6xfM,294
@@ -4639,8 +4635,8 @@ lino/utils/xml.py,sha256=EGDnO1UaREst9fS7KTESdbHnrrVCwKbRQdvut6B6GmQ,1612
4639
4635
  lino/utils/mldbc/__init__.py,sha256=QqWRlzeXaOmFfbCk-vTY3SZMn1-FCf67XnpZdd_Nim0,1134
4640
4636
  lino/utils/mldbc/fields.py,sha256=tAX8G5UKigr9c6g0F3ARIjZZtg406mdaZ--PWSbiH9E,2873
4641
4637
  lino/utils/mldbc/mixins.py,sha256=CkYe5jDa7xp9fJq_V8zcZf8ocxgIjUgHc9KZccvA_Yw,1945
4642
- lino-25.7.1.dist-info/METADATA,sha256=jwBbYq7IHLniKNteGXBs7OPWNeqM5uMAyl8sNwEi4Fc,42534
4643
- lino-25.7.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
4644
- lino-25.7.1.dist-info/licenses/AUTHORS.rst,sha256=8VEm_G4HOmYEa4oi1nVoKKsdo4JanekEJCefWd2E8vk,981
4645
- lino-25.7.1.dist-info/licenses/COPYING,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
4646
- lino-25.7.1.dist-info/RECORD,,
4638
+ lino-25.7.2.dist-info/METADATA,sha256=r02SpeYvS8PQ1F4MbZXwjctI20OpjU72PE0h51a-wfo,42534
4639
+ lino-25.7.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
4640
+ lino-25.7.2.dist-info/licenses/AUTHORS.rst,sha256=8VEm_G4HOmYEa4oi1nVoKKsdo4JanekEJCefWd2E8vk,981
4641
+ lino-25.7.2.dist-info/licenses/COPYING,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
4642
+ lino-25.7.2.dist-info/RECORD,,
@@ -1,51 +0,0 @@
1
- # -*- coding: UTF-8 -*-
2
- # Copyright 2017 Rumma & Ko Ltd
3
- # License: GNU Affero General Public License v3 (see file COPYING for details)
4
- """
5
- This started as a copy of :mod:`lino.modlib.bootstrap`.
6
-
7
- .. autosummary::
8
- :toctree:
9
-
10
- views
11
- renderer
12
- models
13
- """
14
-
15
- from lino.api.ad import Plugin
16
-
17
-
18
- class Plugin(Plugin):
19
- ui_handle_attr_name = "forms_handle"
20
-
21
- needs_plugins = ["lino.modlib.jinja"]
22
-
23
- url_prefix = "f"
24
-
25
- def on_ui_init(self, kernel):
26
- from .renderer import Renderer
27
-
28
- self.renderer = Renderer(self)
29
- # ui.bs3_renderer = self.renderer
30
-
31
- def get_patterns(self):
32
- from django.conf.urls import url
33
- from . import views
34
-
35
- rx = "^"
36
-
37
- urls = [
38
- url(rx + r"$", views.Index.as_view()),
39
- url(rx + r"auth", views.Authenticate.as_view()),
40
- url(rx + r"(?P<app_label>\w+)/(?P<actor>\w+)$", views.List.as_view()),
41
- url(
42
- rx + r"(?P<app_label>\w+)/(?P<actor>\w+)/(?P<pk>.+)$",
43
- views.Element.as_view(),
44
- ),
45
- ]
46
- return urls
47
-
48
- def get_index_view(self):
49
- from . import views
50
-
51
- return views.Index.as_view()
File without changes
@@ -1,74 +0,0 @@
1
- # -*- coding: UTF-8 -*-
2
- # Copyright 2017 Rumma & Ko Ltd
3
- # License: GNU Affero General Public License v3 (see file COPYING for details)
4
-
5
- from __future__ import unicode_literals
6
- from builtins import str
7
-
8
- from lino.core import constants as ext_requests
9
- from lino.core.renderer import HtmlRenderer
10
- from lino.core.renderer import add_user_language
11
-
12
- from .views import index_response
13
-
14
-
15
- class Renderer(HtmlRenderer):
16
- """
17
- A HTML render that uses Django forms.
18
- """
19
-
20
- can_auth = False
21
-
22
- def obj2url(self, ar, obj, **kw):
23
- ba = obj.get_detail_action(ar)
24
- if ba is not None:
25
- add_user_language(kw, ar)
26
- return self.get_detail_url(ar, ba.actor, obj.pk, **kw)
27
-
28
- def get_detail_url(self, ar, actor, pk, *args, **kw):
29
- return self.front_end.build_plain_url(
30
- ar, actor.app_label, actor.__name__, str(pk), *args, **kw
31
- )
32
-
33
- def get_home_url(self, *args, **kw):
34
- return self.front_end.build_plain_url(*args, **kw)
35
-
36
- def get_request_url(self, ar, *args, **kw):
37
- if ar.actor.__name__ == "Main":
38
- return self.front_end.build_plain_url(*args, **kw)
39
-
40
- st = ar.get_status()
41
- kw.update(st["base_params"])
42
- add_user_language(kw, ar)
43
- if ar.offset is not None:
44
- kw.setdefault(ext_requests.URL_PARAM_START, ar.offset)
45
- if ar.limit is not None:
46
- kw.setdefault(ext_requests.URL_PARAM_LIMIT, ar.limit)
47
- if ar.order_by is not None:
48
- sc = ar.order_by[0]
49
- if sc.startswith("-"):
50
- sc = sc[1:]
51
- kw.setdefault(ext_requests.URL_PARAM_SORTDIR, "DESC")
52
- kw.setdefault(ext_requests.URL_PARAM_SORT, sc)
53
- # ~ print '20120901 TODO get_request_url'
54
-
55
- return self.front_end.build_plain_url(
56
- ar.actor.app_label, ar.actor.__name__, *args, **kw
57
- )
58
-
59
- def request_handler(self, ar, *args, **kw):
60
- return ""
61
-
62
- def action_button(self, obj, ar, ba, label=None, **kw):
63
- label = label or ba.action.label
64
- return label
65
-
66
- def action_call(self, ar, bound_action, status):
67
- a = bound_action.action
68
- if a.opens_a_window or (a.parameters and not a.no_params_window):
69
- return "#"
70
- sar = bound_action.request_from(ar)
71
- return self.get_request_url(sar)
72
-
73
- def render_action_response(self, ar):
74
- return index_response(ar)