lino 25.2.2__py3-none-any.whl → 25.2.3__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.
@@ -1,5 +1,5 @@
1
1
  # -*- coding: UTF-8 -*-
2
- # Copyright 2009-2024 Rumma & Ko Ltd
2
+ # Copyright 2009-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
@@ -24,10 +24,6 @@ from lino.utils.xml import validate_xml
24
24
 
25
25
  from .choicelists import BuildMethods
26
26
 
27
- # davlink = settings.SITE.plugins.get('davlink', None)
28
- # has_davlink = davlink is not None and settings.SITE.use_java
29
- has_davlink = False
30
-
31
27
 
32
28
  class BasePrintAction(Action):
33
29
  sort_index = 50
@@ -98,10 +94,7 @@ class BasePrintAction(Action):
98
94
  # msg %= dict(doc=leaf, help=etree.tostring(
99
95
  # help_url, encoding="unicode"))
100
96
  kw.update(message=msg, alert=True)
101
- if has_davlink and bm.use_webdav and ar.request is not None:
102
- kw.update(open_webdav_url=ar.request.build_absolute_uri(url))
103
- else:
104
- kw.update(open_url=url)
97
+ kw.update(open_url=url)
105
98
  ar.success(**kw)
106
99
  return
107
100
 
@@ -137,7 +130,7 @@ class DirectPrintAction(BasePrintAction):
137
130
  class WriteXmlAction(DirectPrintAction):
138
131
  """Generate an XML file from this database object."""
139
132
 
140
- combo_group = "writexml"
133
+ # combo_group = "writexml"
141
134
  label = _("XML")
142
135
 
143
136
  build_method = "xml"
@@ -148,6 +141,7 @@ class WriteXmlAction(DirectPrintAction):
148
141
  def validate_result_file(self, bm, xmlfile):
149
142
  if self.xsd_file:
150
143
  logger.info("Validate %s against %s ...", xmlfile, self.xsd_file)
144
+ # doc = etree.parse(xmlfile)
151
145
  if True:
152
146
  validate_xml(xmlfile, self.xsd_file)
153
147
  else:
@@ -221,7 +215,7 @@ class EditTemplate(BasePrintAction):
221
215
 
222
216
  def attach_to_actor(self, actor, name):
223
217
  # if not settings.SITE.is_installed('davlink'):
224
- if not (settings.SITE.webdav_protocol or has_davlink):
218
+ if not settings.SITE.webdav_protocol:
225
219
  return False
226
220
  return super(EditTemplate, self).attach_to_actor(actor, name)
227
221
 
@@ -253,7 +247,7 @@ class EditTemplate(BasePrintAction):
253
247
  url = settings.SITE.build_media_url(*parts)
254
248
  # url = ar.build_webdav_uri(url)
255
249
 
256
- if not (settings.SITE.webdav_protocol or has_davlink):
250
+ if not settings.SITE.webdav_protocol:
257
251
  msg = "cp %s %s" % (filename, local_file)
258
252
  ar.debug(msg)
259
253
  raise Warning(
@@ -1,16 +1,15 @@
1
1
  # -*- coding: UTF-8 -*-
2
- # Copyright 2009-2023 Rumma & Ko Ltd
2
+ # Copyright 2009-2025 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
4
  """
5
5
  Choicelists for `lino.modlib.printing`.
6
6
 
7
7
  """
8
8
 
9
- from lino import logger
10
-
11
9
  import os
12
10
  import io
13
11
  from copy import copy
12
+ from pathlib import Path
14
13
 
15
14
  from django.conf import settings
16
15
  from django.utils import translation
@@ -25,6 +24,7 @@ from django.template.loader import select_template
25
24
  from lino.core.choicelists import ChoiceList, Choice
26
25
  from lino.utils.media import MediaFile
27
26
  from lino.api import rt, _
27
+ from lino import logger
28
28
 
29
29
  try:
30
30
  import pyratemp
@@ -42,9 +42,7 @@ class BuildMethod(Choice):
42
42
  # same.
43
43
  if names is None:
44
44
  names = self.name
45
- super(BuildMethod, self).__init__(
46
- names, self.__class__.__name__, names, **kwargs
47
- )
45
+ super().__init__(names, self.__class__.__name__, names, **kwargs)
48
46
 
49
47
  def get_target(self, action, obj):
50
48
  # Used by get_target_name()
@@ -72,7 +70,7 @@ class TemplatedBuildMethod(BuildMethod):
72
70
  default_template = "" # overridden by lino_xl.lib.appypod
73
71
 
74
72
  def __init__(self, *args, **kwargs):
75
- super(TemplatedBuildMethod, self).__init__(*args, **kwargs)
73
+ super().__init__(*args, **kwargs)
76
74
  if self.templates_name is None:
77
75
  assert len(self.names) == 1
78
76
  self.templates_name = self.names[0]
@@ -234,11 +232,13 @@ class XmlBuildMethod(DjangoBuildMethod):
234
232
  filename = action.before_build(self, elem)
235
233
  if filename is None:
236
234
  return
235
+ filename = Path(filename)
237
236
  tpl = self.get_template(action, elem)
238
237
 
239
238
  lang = str(elem.get_print_language() or translation.get_language())
240
239
  # or settings.SITE.DEFAULT_LANGUAGE.django_code)
241
240
 
241
+
242
242
  with translation.override(lang):
243
243
  cmd_options = elem.get_build_options(self)
244
244
  logger.info(
@@ -35,12 +35,12 @@ class Plugin(ad.Plugin):
35
35
  # TODO: Also remove the Volume model and its actors when with_volumes is set
36
36
  # to False.
37
37
 
38
- def get_uploads_root(self):
39
- # return join(self.site.django_settings["MEDIA_ROOT"], "uploads")
40
- return self.site.media_root / UPLOADS_ROOT
38
+ # def get_uploads_root(self):
39
+ # # return join(self.site.django_settings["MEDIA_ROOT"], "uploads")
40
+ # return self.site.media_root / UPLOADS_ROOT
41
41
 
42
- def get_volumes_root(self):
43
- return self.site.media_root / VOLUMES_ROOT
42
+ # def get_volumes_root(self):
43
+ # return self.site.media_root / VOLUMES_ROOT
44
44
 
45
45
  def setup_main_menu(self, site, user_type, m, ar=None):
46
46
  mg = self.get_menu_group()
@@ -61,6 +61,9 @@ class Plugin(ad.Plugin):
61
61
 
62
62
  def post_site_startup(self, site):
63
63
 
64
+ self.uploads_root = site.media_root / UPLOADS_ROOT
65
+ self.volumes_root = site.media_root / VOLUMES_ROOT
66
+
64
67
  if site.is_installed("memo"):
65
68
 
66
69
  def gallery(ar, text, cmdname, mentions, context):
@@ -76,7 +79,7 @@ class Plugin(ad.Plugin):
76
79
  super().post_site_startup(site)
77
80
 
78
81
  # site.makedirs_if_missing(self.get_uploads_root())
79
- # site.makedirs_if_missing(self.get_volumes_root())
82
+ # site.makedirs_if_missing(self.volumes_root)
80
83
 
81
84
  def get_requirements(self, site):
82
85
  if self.with_thumbnails:
@@ -57,7 +57,7 @@ class Volume(Referrable):
57
57
 
58
58
  def full_clean(self, *args, **kw):
59
59
  super().full_clean(*args, **kw)
60
- pth = dd.plugins.uploads.get_volumes_root() / self.ref
60
+ pth = dd.plugins.uploads.volumes_root / self.ref
61
61
  if pth.exists():
62
62
  if pth.resolve().absolute() != Path(self.root_dir).resolve().absolute():
63
63
  raise ValidationError(
@@ -176,7 +176,7 @@ class Upload(UploadBase, UserAuthored, Controllable, Publishable):
176
176
  if self.file:
177
177
  return self.file.size
178
178
  if self.volume_id and self.library_file:
179
- pth = dd.plugins.uploads.get_volumes_root() / self.volume.ref / self.library_file
179
+ pth = dd.plugins.uploads.volumes_root / self.volume.ref / self.library_file
180
180
  return pth.stat().st_size
181
181
  # return os.path.getsize(pth)
182
182
 
@@ -308,7 +308,7 @@ class UploadsFolderChecker(Checker):
308
308
  def get_checkdata_problems(self, obj, fix=False):
309
309
  assert obj is None # this is an unbound checker
310
310
  Upload = rt.models.uploads.Upload
311
- pth = dd.plugins.uploads.get_uploads_root()
311
+ pth = dd.plugins.uploads.uploads_root
312
312
  assert str(pth).startswith(settings.MEDIA_ROOT)
313
313
  start = len(settings.MEDIA_ROOT) + 1
314
314
  for filename in Path(pth).rglob("*"):
lino/modlib/uploads/ui.py CHANGED
@@ -153,6 +153,7 @@ class AreaUploads(Uploads):
153
153
  required_roles = dd.login_required(UploadsReader)
154
154
  stay_in_grid = True
155
155
  default_display_modes = {None: constants.DISPLAY_MODE_SUMMARY}
156
+ detailed_summary = False
156
157
 
157
158
  # 20180119
158
159
  # @classmethod
@@ -170,7 +171,8 @@ class AreaUploads(Uploads):
170
171
  return obj.description or filename_leaf(obj.file.name) or str(obj.id)
171
172
 
172
173
  @classmethod
173
- def get_table_summary(self, obj, ar):
174
+ def get_table_summary(self, ar):
175
+ obj = ar.master_instance
174
176
  if obj is None:
175
177
  return
176
178
  UploadType = rt.models.uploads.UploadType
@@ -237,7 +239,8 @@ class AreaUploads(Uploads):
237
239
  types.append(chunks)
238
240
  # logger.info("20140430 %s", [tostring(e) for e in types])
239
241
  # elems += [str(ar.bound_action.action.__class__), " "]
240
- if ar.bound_action.action.window_type == "d":
242
+ # if ar.bound_action.action.window_type == "d":
243
+ if self.detailed_summary:
241
244
  if len(types) == 0:
242
245
  elems.append(E.ul(E.li(str(ar.no_data_text))))
243
246
  else:
lino/utils/__init__.py CHANGED
@@ -40,7 +40,6 @@ function for general use. It has also many subpackages and submodules.
40
40
  pyuca
41
41
  quantities
42
42
  ranges
43
- requests
44
43
  restify
45
44
  screenshots
46
45
  sqllog
@@ -39,18 +39,18 @@ class JSCompressor(object):
39
39
 
40
40
  literalMarker = "@_@%d@_@" # temporary replacement
41
41
  # put the string literals back in
42
- backSubst = re.compile("@_@(\d+)@_@")
42
+ backSubst = re.compile(r"@_@(\d+)@_@")
43
43
 
44
44
  # /* ... */ comments on single line
45
45
  mlc1 = re.compile(r"(\/\*.*?\*\/)")
46
46
  mlc = re.compile(r"(\/\*.*?\*\/)", re.DOTALL) # real multiline comments
47
- slc = re.compile("\/\/.*") # remove single line comments
47
+ slc = re.compile(r"\/\/.*") # remove single line comments
48
48
 
49
49
  # collapse successive non-leading white space characters into one
50
- collapseWs = re.compile("(?<=\S)[ \t]+")
50
+ collapseWs = re.compile(r"(?<=\S)[ \t]+")
51
51
 
52
52
  squeeze = re.compile(
53
- """
53
+ r"""
54
54
  \s+(?=[\}\]\)\:\&\|\=\;\,\.\+]) | # remove whitespace preceding control characters
55
55
  (?<=[\{\[\(\:\&\|\=\;\,\.\+])\s+ | # ... or following such
56
56
  [ \t]+(?=\W) | # remove spaces or tabs preceding non-word characters
lino/utils/restify.py CHANGED
@@ -17,7 +17,7 @@ import re
17
17
 
18
18
  # This regular expression finds the indentation of every non-blank
19
19
  # line in a string.
20
- _INDENT_RE = re.compile("^([ ]*)(?=\S)", re.MULTILINE)
20
+ _INDENT_RE = re.compile(r"^([ ]*)(?=\S)", re.MULTILINE)
21
21
 
22
22
 
23
23
  def min_indent(s):
@@ -451,7 +451,7 @@ def rst2latex(
451
451
 
452
452
 
453
453
  if __name__ == "__main__":
454
- test = """
454
+ test = r"""
455
455
  Test example
456
456
  ============
457
457
 
lino/utils/soup.py CHANGED
@@ -327,10 +327,10 @@ def sanitized_soup(old):
327
327
  comment.extract()
328
328
 
329
329
  # remove the wrapper tag if it is useless
330
- if len(soup.contents) == 1:
331
- main_tag = soup.contents[0]
332
- if main_tag.name in useless_main_tags and not main_tag.attrs:
333
- main_tag.unwrap()
330
+ # if len(soup.contents) == 1:
331
+ # main_tag = soup.contents[0]
332
+ # if main_tag.name in useless_main_tags and not main_tag.attrs:
333
+ # main_tag.unwrap()
334
334
 
335
335
  return soup
336
336
 
lino/utils/xml.py CHANGED
@@ -2,14 +2,19 @@
2
2
  # Copyright 2013-2024 Rumma & Ko Ltd
3
3
  # License: GNU Affero General Public License v3 (see file COPYING for details)
4
4
 
5
+ import subprocess
6
+
5
7
  from lxml import etree
6
8
  from lxml import isoschematron
7
9
 
8
10
 
11
+ # def validate_xml(doc, xsdfile):
9
12
  def validate_xml(xmlfile, xsdfile):
10
13
  """
11
14
 
12
15
  Validate the given :attr:`xmlfile` using the given :attr:`xsdfile`.
16
+ Validate the given XML document `doc` using the given :attr:`xsdfile`.
17
+ The document must be an ElementTree root element.
13
18
 
14
19
  When :attr:`xsdfile` ends with :file:`.xsd`, the generated :attr:`xmlfile`
15
20
  file is validated using :class:`lxml.etree.XMLSchema`. When it ends with
@@ -19,11 +24,20 @@ def validate_xml(xmlfile, xsdfile):
19
24
 
20
25
  """
21
26
  doc = etree.parse(xmlfile)
22
- if xsdfile.endswith(".xsd"):
27
+ if xsdfile.suffix == ".xsd":
23
28
  # xsd = etree.XMLSchema(etree.parse(xsdfile))
24
29
  xsd = etree.XMLSchema(file=xsdfile)
25
30
  xsd.assertValid(doc)
26
- elif xsdfile.endswith(".sch"):
27
- # schematron = isoschematron.Schematron(etree.parse(xsdfile))
28
- schematron = isoschematron.Schematron(file=xsdfile)
29
- schematron.assertValid(doc)
31
+ elif xsdfile.suffix == ".sch":
32
+ if False:
33
+ jarfile = "/home/luc/Downloads/saxon/saxon-he-12.5.jar"
34
+ # cmd = ["/usr/bin/java", "-jar", jarfile, "-xsl:", xsdfile, "-s:", xmlfile]
35
+ cmd = ["/usr/bin/java", "-jar", jarfile, f"-xsd:{xsdfile}", f"-s:{xmlfile}"]
36
+ cp = subprocess.run(cmd)
37
+
38
+ if False:
39
+ # # sch = etree.parse(xsdfile)
40
+ # # schematron = isoschematron.Schematron(sch, store_report=True)
41
+ schematron = isoschematron.Schematron(file=xsdfile, store_report=True)
42
+ schematron.assertValid(doc)
43
+ # schematron.validation_report
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lino
3
- Version: 25.2.2
3
+ Version: 25.2.3
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,16 +1,16 @@
1
1
  lino/.cvsignore,sha256=1vrrWoP-WD8hPfCszHHIiJEi8KUMRCt5WvoKB9TSB1k,28
2
2
  lino/SciTEDirectory.properties,sha256=rCYi_e-6h8Yx5DwXhAa6MBPlVINcl6Vv9BQDYZV2_go,28
3
- lino/__init__.py,sha256=YtNOcVKh2rB06MddYDsdCB0P7SljYCG4kHzpM-pZy1w,5584
3
+ lino/__init__.py,sha256=ZmFiwiiQpJsV0ud-WYVwRBcTY9Ar96t9l7ab9drrkwo,5916
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=yBhYx2QaAHzNOtzvZgoLerNpNAVucak52Dc8q45xeN0,91293
7
+ lino/help_texts.py,sha256=eLDOaWsgFLiJWc-ThRXR9pP85TaRSIi4y1lEpluS7yE,91831
8
8
  lino/api/__init__.py,sha256=WmzHU-rHdZ68se_nI0SmepQTGE8-cd9tPpovHRH9aag,512
9
9
  lino/api/ad.py,sha256=F6SrcKPRRalHKOZ7QLwsRWGq9hhykQIeo0b85cEk9NQ,314
10
- lino/api/dd.py,sha256=-mjuoflZilnFM97we-N1H_sEf1TQiNs62JwZ5m4XV1s,7813
11
- lino/api/doctest.py,sha256=cDnnkvci-6K2evlaJ6ih6BopiSEYhchN7Y2UhmyIdNE,25575
10
+ lino/api/dd.py,sha256=pN-c6si_5iEzDq8o5z6i3KszlWky6_HJtKFPF8V6BPc,8398
11
+ lino/api/doctest.py,sha256=PrmUSTT7AsUjjN0TjvVlzuCJ8ViUUeOq9wz8QXgDhG0,26349
12
12
  lino/api/rt.py,sha256=WX0I7oOJIFtqN1JXK1sVC_OmByY5hct4lDIaELDFkgs,1378
13
- lino/api/selenium.py,sha256=07BQuC6KW2tBUlIUcPGeCQHIfogz-wuHJqPshSzLDp0,9384
13
+ lino/api/selenium.py,sha256=bOu8UaNz3Q7lGVvxjmvrtYtSWn1xfI1f5MN5sVcdYr8,9383
14
14
  lino/api/shell.py,sha256=epyjwEZ396TiJ0AHqhVIvzX8TBIXU8xR4UHJlYOrRhc,536
15
15
  lino/config/about.html.tmpl,sha256=Vt3drpxP5f26wb1meXq_Kc8ZUAl_TGfr1bcuWuz-7L4,705
16
16
  lino/config/admin_main.html,sha256=uq179bSDST-ACy0iuOFqMfs501mdwnR7Zw9ICDFZfsc,37
@@ -29,7 +29,7 @@ lino/config/unused/404.html,sha256=GOJrAyF6NcM69ETdSHgjff_-lvYs_-bOYhyZBem7x3I,2
29
29
  lino/config/unused/500.html,sha256=aWmP37uPoMS-PJgPuBloxdx0nEreU7AvkXxsex3yVYs,544
30
30
  lino/core/__init__.py,sha256=T7106QxQpa3jXAouGTIer6AXEwpkJ0NAQ9B7Q3-K6qE,686
31
31
  lino/core/actions.py,sha256=2QGQYpjQ_Fyvb3wb4TBGj8GO4f857aQ3YX3Uz6u15dw,46622
32
- lino/core/actors.py,sha256=0MhLLWf3uXzO5nEV5D8Bc12dedlgLCWVBo4WcJyLQCc,73865
32
+ lino/core/actors.py,sha256=n0g1QIg7TWs-Ze8iDBPh6l2vSzcClxIWrSGy_pBUVVk,74121
33
33
  lino/core/boundaction.py,sha256=9LgEsN3pM2DzG28_WZ7DgXKRRMdGW2E5yTVB1uWcsww,6674
34
34
  lino/core/callbacks.py,sha256=uu1-znzxVDD-JETUebw-hYsNg_9ExQb1vfwbc7Psjro,7549
35
35
  lino/core/choicelists.py,sha256=rR1FutDfYRRJUtBPJPl_aMuy6r6vqmZGkatcCe2wSUg,36519
@@ -40,7 +40,7 @@ lino/core/dbtables.py,sha256=nSZgFOar2-XuDX3U5_BLJb7Im7ZvFcyP2iMQCxSTTaA,29134
40
40
  lino/core/dbutils.py,sha256=_QHcWd-ajLUwt5G8uOp8d47lZQKD3VseHnqKJke18rA,263
41
41
  lino/core/ddh.py,sha256=dYScxWKTOCDEgow7wJNJe812ESasmmITPK2ovraBQno,3172
42
42
  lino/core/diff.py,sha256=XQ-oQQDS_v3kXd4eRP9Hwr5UCgp-TPZIPVav9ZblUno,5882
43
- lino/core/elems.py,sha256=CsYl9fLn5Jlt1HWrOEamcAC8xtMKeulhS3R2uRg4XcE,108453
43
+ lino/core/elems.py,sha256=H2MOrEUAIa9Plkvw5ZSSHfZd0KYDG84-R0B1JPXbpI0,108453
44
44
  lino/core/exceptions.py,sha256=QDxDo5cllSyXQ8VWet9hGXzNadxCOmwMVrFXc6V-vpE,665
45
45
  lino/core/fields.py,sha256=C14cCHHJclk0z6NlJFRPyXPJaVS1DhngQLTE6gPR0BE,57407
46
46
  lino/core/frames.py,sha256=ISxgq9zyZfqW3tDZMWdKi9Ij455lT_81qBH0xex0bfE,1161
@@ -55,11 +55,11 @@ lino/core/merge.py,sha256=sKtTeZtHdoDKerdHj4NXuXXNzpKDsfdPaiq-CY0NqQc,9094
55
55
  lino/core/model.py,sha256=wKxb0bWi_5FgcZn8Pz-bjDGo-5Y1cwOVTZPrJbv5ljQ,36408
56
56
  lino/core/permissions.py,sha256=Fnemz3NwWz21X0YATI9Q7ba2FcAdg-EMLHjIcbt_AVU,6840
57
57
  lino/core/plugin.py,sha256=oVvTsGoBBYmjvRgtyiFPIiHZQErH0ZlNjiUFtOk2dOM,6834
58
- lino/core/renderer.py,sha256=jIXxNSpljZhb9tBMhUfDNbZD3XmxYzaS6SlipHx29L4,47291
59
- lino/core/requests.py,sha256=I9feB-w8XnMRF7vkjFs63crzWMkojeLGHlU4ar6joxk,93617
58
+ lino/core/renderer.py,sha256=y79wQnoQ9cdnBmNXWnvPPWiTIrRs5ozyLI6j3T6oPr0,47251
59
+ lino/core/requests.py,sha256=NGs1uAF0zPkFOtnd3wDvHmfINdAvHbmLEGARdmC3I1w,94529
60
60
  lino/core/roles.py,sha256=PXwk436xUupxdbJcygRSYFu7ixfKjAJPQRUQ8sy0lB0,4425
61
61
  lino/core/signals.py,sha256=0JT89mkjSbRm57QZcSI9DoThoKUGkyi-egNhuLUKEds,948
62
- lino/core/site.py,sha256=s_kisoL35ZcbFbF18eyvARu7OcNA_61GPE3-_6rNJIc,83136
62
+ lino/core/site.py,sha256=kUp5hjW_tLdDugmstIPyk8FEmbxCWBHsVOXQiQBEw-4,83163
63
63
  lino/core/store.py,sha256=eQyahBvsMvX2K_lJvJGSATLV0SGOOCfqpf0JDJprNNw,51351
64
64
  lino/core/tables.py,sha256=VXfUDENJ-Zl6M3tRvEdLr1LGjmJcAmwXUWSG4EWLFDE,24413
65
65
  lino/core/urls.py,sha256=06QlmN1vpxjmb5snO3SPpP6lX1pMdE60bTiBiC77_vQ,2677
@@ -188,9 +188,9 @@ lino/modlib/dupable/mixins.py,sha256=B7JRVDRszf7ojFBAeb-Md_fJMc9Sp5u-emLEAtR6s2g
188
188
  lino/modlib/dupable/models.py,sha256=0watviKwTiVwlArC54V3IxVVfcB1Yg5kO6ed2xCM9a0,4595
189
189
  lino/modlib/export_excel/__init__.py,sha256=k11dEbh1VgA7cMaUdMhiJvHNboX4BqN0Z5Wj9fV7rWw,469
190
190
  lino/modlib/export_excel/models.py,sha256=OaAkt__l-GaqGLMWQiwXHPJOYABkXHUZ7j9DC7uFE08,5078
191
- lino/modlib/extjs/__init__.py,sha256=-TfGa8YR8SWuCHkZ2_pFNVBfOhvVfL5ec4zz6_TWeo4,10170
191
+ lino/modlib/extjs/__init__.py,sha256=6UBWAWSROwy3DfTXQmVUVJTF6eZ_e2k3BEfE4wtqVhU,10172
192
192
  lino/modlib/extjs/ext_renderer.py,sha256=SwfikRmAi1FbDXQLsWNgzgkGqIePwL0UTLgQbb05pOE,60600
193
- lino/modlib/extjs/views.py,sha256=SFzGLKxuqvR-1PWAJfHWDgra9tcKq8XBppl_IrW7nXk,23760
193
+ lino/modlib/extjs/views.py,sha256=44sT3PZXXeLy3M7ODtv3ICA2apkR-MZO1LHVPTwagiY,25290
194
194
  lino/modlib/extjs/config/extjs/index.html,sha256=jO5hdNpFSkm9t0xhHD5hc8Hw1fSr6xb3zYq9aMyOI7Q,8603
195
195
  lino/modlib/extjs/config/extjs/linoweb.js,sha256=I4VYGmkK4htqZvHM9g-6psJF3pp7SvgHEI0I02Sxpvo,175127
196
196
  lino/modlib/extjs/config/extjs/service-worker.js,sha256=KEKWeehTlfBHk3r8NbsP9C5av_DukHORybxFOwbjYaQ,1767
@@ -3500,7 +3500,7 @@ lino/modlib/help/models.py,sha256=Ik-fkUH8KHiPajar-SYCbuaQGfIbbgfI6-9rMkr1Np8,34
3500
3500
  lino/modlib/help/utils.py,sha256=dWmz0huCw7N4ENIsCUoGiXyn3AbkE96jVR4YwyzPjjo,3944
3501
3501
  lino/modlib/help/config/makehelp/actor.tpl.rst,sha256=Yl-ZAWvI93cVFLd7GG-qpn_vkGFvKe3iR0eWBJpHgMc,346
3502
3502
  lino/modlib/help/config/makehelp/actors.tpl.rst,sha256=wXMKYQnlhLi432QggVgRUWGuHRDiSX9NyXSdnSar7Io,249
3503
- lino/modlib/help/config/makehelp/conf.tpl.py,sha256=pTTQyP0F7ETvghtI2VcAflctnw-UYIDg3kOO9G4Jlrk,1113
3503
+ lino/modlib/help/config/makehelp/conf.tpl.py,sha256=865N8cgHCOsJk-9wJVHNL1A2zDilfFDxx9yd997jZKA,1114
3504
3504
  lino/modlib/help/config/makehelp/copyright.tpl.rst,sha256=0fcF2Mf83HJc50iMbiN_qgx-BgrO1wBOC5bWHKPE0No,138
3505
3505
  lino/modlib/help/config/makehelp/index.tpl.rst,sha256=q3SwIW70McQl5PmRniQvkj8ZaWQnEog9en8EDrE7qBw,281
3506
3506
  lino/modlib/help/config/makehelp/model.tpl.rst,sha256=2wyLT9h5llvm4xwZ5vu6fQoKMNcnNAjHi8Wp6l3-6zE,279
@@ -3519,6 +3519,8 @@ lino/modlib/ipdict/models.py,sha256=9-pjj_xXdndhQaQI8sgXcmODxurST_aFcShGwomiYKk,
3519
3519
  lino/modlib/jinja/__init__.py,sha256=XSa-e1qZGabl8EmRDKPRtmzgBRole5ZbxAUBR_m-ds0,3418
3520
3520
  lino/modlib/jinja/choicelists.py,sha256=QHjWQWLnJCKSGnLIKeGqnCw41JYvcbTkCeXjBpWh23w,1466
3521
3521
  lino/modlib/jinja/loader.py,sha256=MX027X_UuQPqq0wOUr06QnOkdTzGpksNv0Om1CGp61I,1765
3522
+ lino/modlib/jinja/mixins.py,sha256=EgRzp7oN_uTD2hYJhb9vXflu5B5AsO-UKu7V61v92fk,2057
3523
+ lino/modlib/jinja/models.py,sha256=vXNFS78qP-qIzeSmnXJNOpvW_IfH1h6hhPgYjfkvvD0,207
3522
3524
  lino/modlib/jinja/renderer.py,sha256=yywxocrNYSPvUcMjuYw9guiPoq50lfaIKkJOP_PHg5o,6142
3523
3525
  lino/modlib/jinja/config/jinja/status.jinja.rst,sha256=XEsfXd82B0fLsBfds5-pXdeDWVr4ccTv7WyGa9ayigk,312
3524
3526
  lino/modlib/jinja/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -3534,17 +3536,19 @@ lino/modlib/languages/fixtures/iso-639-3_20100707.tab,sha256=u8PwI2s8shy0_Val5-s
3534
3536
  lino/modlib/linod/__init__.py,sha256=u2XCoHtoGwEpMDLfRnGYxj49s4DWng7vOjRrkS57F00,2607
3535
3537
  lino/modlib/linod/choicelists.py,sha256=Tq3hoK7wHZXR8QruaSkAo1e8vE5qEy1bh5xrb8cPkyw,2147
3536
3538
  lino/modlib/linod/consumers.py,sha256=NMzuLwNDPFyWNtqXXEyDQ3lyoUWniyoVWbRr7URazCM,6451
3537
- lino/modlib/linod/mixins.py,sha256=o40iC6z8WheXsJ6hL_Lqbyf8HY_FhCdUAwxZLECPN6k,10570
3539
+ lino/modlib/linod/mixins.py,sha256=4ID1zhhXbNGB0JRqlStD6qc-mp0SyIQywohcHDZ29Wo,10729
3538
3540
  lino/modlib/linod/models.py,sha256=n3HhwDJr3fLdD3PHLZyeF4wBrfC2CWY_UdsC3Acuv7U,2295
3539
3541
  lino/modlib/linod/routing.py,sha256=FiG0JVqp9TWWkNpl9Y_50UCAJ7ZEImDXkQUhlg4aGL4,2094
3540
3542
  lino/modlib/linod/utils.py,sha256=dE973Xib6Be1DvNsZ0M5wzY_jpkk35R21WKs-jQPorM,339
3543
+ lino/modlib/linod/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3544
+ lino/modlib/linod/fixtures/linod.py,sha256=qCFU2IktRVEdt1lChwu6kZLLnd4Ppfq_x9_2qGYelTY,1173
3541
3545
  lino/modlib/linod/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3542
3546
  lino/modlib/linod/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3543
3547
  lino/modlib/linod/management/commands/linod.py,sha256=9-zRm-Xgp3uWj6AlDZpjtzo_TqSPyxIkKIrI_jshxVI,3457
3544
3548
  lino/modlib/memo/__init__.py,sha256=Kghjmlz0y1km6SFq5m9nbDqD3CKfSplj57rso3IevLk,5247
3545
- lino/modlib/memo/mixins.py,sha256=qDCbUTVBx9Grw_FAgPS40R49mDjOOKPkZuzED4fuxxQ,11183
3549
+ lino/modlib/memo/mixins.py,sha256=Ij_bFcBY_ivo5t2HWArEeRkxIQhg61iP0sTNnhZpRac,11246
3546
3550
  lino/modlib/memo/models.py,sha256=2UbKaixPWCnP1ZkoJx_DDTtltpfYVbU3uJ1hmsZDU8A,3146
3547
- lino/modlib/memo/parser.py,sha256=lOSoXY5nj_CaM3jdd2e2s7-MbXCGRQu3SxQ3d1CMkEE,12994
3551
+ lino/modlib/memo/parser.py,sha256=YbGf1EdJqTI4rqM05ZPTdufN_-aWeV_Z85Nh47HH8Pw,12996
3548
3552
  lino/modlib/memo/views.py,sha256=H3g_nuiMzguptXLSWaWLJClU7BefXPFn9Rh8UIVVBeg,555
3549
3553
  lino/modlib/notify/__init__.py,sha256=suo7EMVdyTPTPFwuU2KZL25PwIEstTvvR4Turgdz7UE,6926
3550
3554
  lino/modlib/notify/actions.py,sha256=ClRKDjmgx3m43IZ5cx0TdxXN_pU6hLIlo_jCwEW2LhY,2468
@@ -3552,7 +3556,7 @@ lino/modlib/notify/api.py,sha256=dIuyn7uRF1dDgoGAqvFQvuJImLl1Q0g79skBJvnXMYs,333
3552
3556
  lino/modlib/notify/choicelists.py,sha256=7ZkYNMOXNDfyTvdx8Sn-Gsma9f31o-6G1CtivXmQDmA,1324
3553
3557
  lino/modlib/notify/consumers.py,sha256=YaEAhAi_Oq5ovakuP5DI21YIAMvRqQcf4K8MBilcN2w,1529
3554
3558
  lino/modlib/notify/mixins.py,sha256=oRArn5ZCJ3Ot4OAYXleyDEEkpe-y50qKdJTGmWq8ZHs,3495
3555
- lino/modlib/notify/models.py,sha256=2ujOilTVqvlxF1mW2aiO5rDLP1HH4OGcFVeCLPha1CA,18735
3559
+ lino/modlib/notify/models.py,sha256=6aZ4gCT-03Szqs-eLLi9UlkCvE2ca8ij-v8qG5OFauI,18731
3556
3560
  lino/modlib/notify/utils.py,sha256=e4TAJr8mgicwEjgyuP-bOiw1VGNA6tVo_hab1q-oSNc,328
3557
3561
  lino/modlib/notify/views.py,sha256=Ar2L_Tv1qqU5giHu2b0h_AKc3utvgfZwda4qncqoBsk,957
3558
3562
  lino/modlib/notify/config/notify/individual.eml,sha256=Ct8fLx7dz_adE_ua8S87dYFSNESCHRbRGx9Ven1MlLI,307
@@ -3578,8 +3582,8 @@ lino/modlib/periods/mixins.py,sha256=QQXtu1Z6HjqDlL_xMM98FR7PQGKhYgjslhusOiWwPDA
3578
3582
  lino/modlib/periods/models.py,sha256=hu1myxDqrBMIiORNYWBpAIDz-WjDe3LmF2JhrvG6DeI,8444
3579
3583
  lino/modlib/periods/fixtures/std.py,sha256=iV6a2DNAhfYvO1VspGkcncEmygHK94zWdDZlHUY8JSw,881
3580
3584
  lino/modlib/printing/__init__.py,sha256=u1fq44d073-IDH_t8hWs1sQdlAHdsCP85sfEOMSW5L4,689
3581
- lino/modlib/printing/actions.py,sha256=CME19ZC6lYWO5qGoVX1b8P4q_wHSwvV19ELKEquMLJs,11704
3582
- lino/modlib/printing/choicelists.py,sha256=5-HdRkRsNccMH5uq4bAwWSFKaTxMCcZM6HjemgJUSaY,9605
3585
+ lino/modlib/printing/actions.py,sha256=kWJPZxnFfiBDGV80bsCskChhFgiVEdIscBNy71Nlsqs,11413
3586
+ lino/modlib/printing/choicelists.py,sha256=nrBZoUfPGzE6Z5xqNB9b5XMcdObptoy2xUtLX9Y-0u4,9599
3583
3587
  lino/modlib/printing/mixins.py,sha256=XjcY5brF_1GxsECLCdOys7YBvUA4NNcGmpKAv3Q508k,8269
3584
3588
  lino/modlib/printing/models.py,sha256=fd-BEKSLpgxPnkh9U7fg2tjNy39exBi3xJC9VzJuXdU,185
3585
3589
  lino/modlib/printing/utils.py,sha256=LUO9769wJvHCPZIqeVQ9XAS6UKJ6BfJbiwO8Dt1kHc4,737
@@ -4388,15 +4392,15 @@ lino/modlib/tinymce/static/tinymce-4.1.10/skins/lightgray/img/loader.gif,sha256=
4388
4392
  lino/modlib/tinymce/static/tinymce-4.1.10/skins/lightgray/img/object.gif,sha256=5qFeUrxKF7CFBzuo3r1HCOrWrj1MvrOIDGXLevxIl3c,152
4389
4393
  lino/modlib/tinymce/static/tinymce-4.1.10/skins/lightgray/img/trans.gif,sha256=nPAg18O7p_WrEM2lSqvvk0-QbU-aOs-Z6efcbJhXljU,43
4390
4394
  lino/modlib/tinymce/static/tinymce-4.1.10/themes/modern/theme.min.js,sha256=w41NrMzqdGEDk6OhjeuElBHlIr5Ntt_QpdoxNRFXa3Q,6431
4391
- lino/modlib/uploads/__init__.py,sha256=S6RNBs5vwCTnoAkPGRGWBQdKp1uOzWngc_B19iAmGsg,2675
4395
+ lino/modlib/uploads/__init__.py,sha256=1WyOe8TQtevW18yo1J8rAR7rfl6l08BQvGlWPeYkXkg,2798
4392
4396
  lino/modlib/uploads/actions.py,sha256=lSdMmMmFaJRkJ2JkMX0aOVFNiisGVcI3PP3WqSQmK1E,1402
4393
4397
  lino/modlib/uploads/choicelists.py,sha256=RVKLCEDly9VUa183ul5U9DRla8yOkMxrP4qMjTC5410,1327
4394
4398
  lino/modlib/uploads/dummy_upload.odt,sha256=VHG2YkykCg8VqoXx8Hm37QYunvdbmg_jCyygiZseKF8,10447
4395
4399
  lino/modlib/uploads/dummy_upload.pdf,sha256=hdAx7s3V10lqVekSGugzkn_Hqxx3V4OkCNVNQI2OsFY,18730
4396
4400
  lino/modlib/uploads/mixins.py,sha256=4CSTEDU0ZBfdCV5RqV9SGc3r0rH7TlaGdB7tGGlVN-o,8000
4397
- lino/modlib/uploads/models.py,sha256=nFGPyLdSJW61gv1jAAscrVKHub86F5X_srjVq8e3WvY,16572
4401
+ lino/modlib/uploads/models.py,sha256=QchFTuGQo4_wiOPiUwJgkPzzeh9OY0EBEMlH7BpOFSQ,16554
4398
4402
  lino/modlib/uploads/roles.py,sha256=ae0wf_vC4O6MffDx8abpjW1M2oWOp5VzOvt_ckk72Cc,191
4399
- lino/modlib/uploads/ui.py,sha256=dc17OUf8R6jqFFt6qzfCkBHIiMKEhoOBGFw0esWfA2g,8456
4403
+ lino/modlib/uploads/ui.py,sha256=CPix0Nbnq-CuUnuqhT_G8AemMjhV-hjJTsM4_tU_psM,8549
4400
4404
  lino/modlib/uploads/utils.py,sha256=MQAJbI5sUe0RCXCrkxpNKUJFxHpz1bOMqKQy3QsA76o,3343
4401
4405
  lino/modlib/uploads/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4402
4406
  lino/modlib/uploads/fixtures/demo.py,sha256=igZevIAwJFjt5y90lnkzVnaWYgZLxmEtOFuFQA7TbDE,1665
@@ -4595,7 +4599,7 @@ lino/templates_old/404.html,sha256=9O5EJgULwLws0X1LjNig3xT4l9Hw04MBIGswD-EAlnw,2
4595
4599
  lino/templates_old/500.html,sha256=inOR744w4FGJM_fCSQcnlk-OIYQpaBTxUQWgXQozon4,496
4596
4600
  lino/templates_old/base.html,sha256=qYqj5-u1UPtpatrFkqBr3MnwS0oFUXCyQRcuNZczDfk,1641
4597
4601
  lino/templates_old/base_site.html,sha256=NcLEk0kBT1b-SrhoGpDPUej7NExqJ9-dP1kbrvwBzrs,255
4598
- lino/utils/__init__.py,sha256=gWMOaiqZ884GJNC68tu6g3-JinoCDMd6i1l9z4cRi2g,18377
4602
+ lino/utils/__init__.py,sha256=Z7ilNYzd2gJpx5XyE70UvrFsi7jQI7JxvlTO0txpUw0,18364
4599
4603
  lino/utils/addressable.py,sha256=o7bmLbyvrmOoAT478s7XqjWKvnZ7zSXj4k7Xf0ccqf8,2213
4600
4604
  lino/utils/ajax.py,sha256=npCS0WumhTQlBzXxQPKnp2sYCRcPsYcbFqzE2ykVc4Q,3254
4601
4605
  lino/utils/choosers.py,sha256=9jjeLz-QcWVBfR8_GdY4PNYoqIYM63OI3OvOL2l1ZaU,17604
@@ -4616,7 +4620,7 @@ lino/utils/html2odf.py,sha256=Hxw4HiIHY1ZCjb4_JLykVHbr6yAMhhHrnrCnLNDYKAs,4826
4616
4620
  lino/utils/html2xhtml.py,sha256=fvrIoLBFpiXtYO3UYaIgAIDjf6ATvrxolQX4etxS57Y,2119
4617
4621
  lino/utils/instantiator.py,sha256=BKgcig5Cgt7paAq4ouZNuQct9o9BEd3LbrAyQx1E3KQ,6995
4618
4622
  lino/utils/jinja.py,sha256=1FZgWNKEP9wcokFuIfYysl_VD5mwVHxBHtpnmO17nRQ,1444
4619
- lino/utils/jscompressor.py,sha256=uA6APYMO1q5ah3-lPmGU6d5Uk7IFVwEBQAmURpfXlzs,5221
4623
+ lino/utils/jscompressor.py,sha256=j9UTaaPCfRZLrWUh6PBp0KDDM0QshG7XAFzp-R_elOs,5225
4620
4624
  lino/utils/jsgen.py,sha256=yN0uUNFp4FCxsSPJBDsdkvtAJVL50f7CpW4hR31Rm4k,15215
4621
4625
  lino/utils/latex.py,sha256=cv5rJjtcslTVoRNjAmlUd2CCpC0GPO-YnvJgNJJe0R8,2218
4622
4626
  lino/utils/mdbtools.py,sha256=R1LHskyDLtwBcYRDA14PU2XeSku9gRUIV52f4Sr-Hto,5310
@@ -4631,12 +4635,11 @@ lino/utils/pyuca.py,sha256=YSLpCYEMqKUhx1y0q-ML8Ryu2ARDFO2HyIFxz1DzYEY,4344
4631
4635
  lino/utils/quantities.py,sha256=m_oi647uCTf2NhhQo6ytphZa2jQq1QXIUcts-cLkEJM,7367
4632
4636
  lino/utils/ranges.py,sha256=wVsZMe3dlaRYWWELXCGSK2DvjBfW4eLbAwpQVYqzj3g,3303
4633
4637
  lino/utils/report.py,sha256=5l1NkZpcZyd1zpg37MB4Doly9dH9KHBEFarp9Q6vh4w,7983
4634
- lino/utils/requests.py,sha256=vXxsC51FK9FgrqmF9dy3MsmUqJINjSQ_4AmvBiQbGEk,1337
4635
- lino/utils/restify.py,sha256=QMVQXrmjDl6PPC7HJJGeDm125pcvrZKvcMpiscaPrsw,14066
4638
+ lino/utils/restify.py,sha256=AbVCBjM9V9rYuFweV1gVo9ObO8lblJbA-mKjaPsebRE,14068
4636
4639
  lino/utils/screenshots.py,sha256=T-szKC3EJfo4JcLio8Jj0xqaoSuJcZG6Jf9EF_B8WDQ,2040
4637
4640
  lino/utils/sendchanges.py,sha256=fcSqRyI3l8sEf9_LSqIyWGML6CORoYkjcFp2bs-YNlY,7097
4638
4641
  lino/utils/socks.py,sha256=0d67FDbrJ7PXl4AYzNNZgwCzV-fzIAAtWGxMEB7dw78,538
4639
- lino/utils/soup.py,sha256=__Bt9WDoayUGPi98EzBrD3dlbVp_NNrD9_irB7yUugc,10753
4642
+ lino/utils/soup.py,sha256=15pEuwtFHrALLG3BzfC9kozMSq8jrewYbonsAofPUz8,10761
4640
4643
  lino/utils/sql.py,sha256=kwCgv5E3n7uLjpXOEiaF2W2p8LeGXcP39xgtnqvzTP8,6795
4641
4644
  lino/utils/sqllog.py,sha256=kUCnBfFjExhItJ1w76WT9VWPaWWq8NQM-kSIMIIZnRU,3282
4642
4645
  lino/utils/ssin.py,sha256=Wo-9M0pG0uEYEGvmz8N--iRIqJe3ETtgLOXoung7qlE,4232
@@ -4645,12 +4648,12 @@ lino/utils/textfields.py,sha256=suTUK_zwTcxT1eHWAlif_AoRXxG_0AW6JhdbOv1zDSQ,2239
4645
4648
  lino/utils/ucsv.py,sha256=KjhGh7K_yxQOM0gHWjn4BjPdi_1aLPHkem5J8nNCqD4,2235
4646
4649
  lino/utils/watch.py,sha256=cZiiR8BRvuKxT_mzPFEoQWZyYKbRYqbi7TqNHD6HsZ4,83
4647
4650
  lino/utils/weekly.py,sha256=t4WZAmAy0Z-siaMEaYgVQh1VDNKXtEa-wgLDXd52BtU,1577
4648
- lino/utils/xml.py,sha256=4Z44W1e5HvTVrU8erkohgnwqY-5Cr2NHywaAJ5OgRvw,989
4651
+ lino/utils/xml.py,sha256=EGDnO1UaREst9fS7KTESdbHnrrVCwKbRQdvut6B6GmQ,1612
4649
4652
  lino/utils/mldbc/__init__.py,sha256=QqWRlzeXaOmFfbCk-vTY3SZMn1-FCf67XnpZdd_Nim0,1134
4650
4653
  lino/utils/mldbc/fields.py,sha256=tAX8G5UKigr9c6g0F3ARIjZZtg406mdaZ--PWSbiH9E,2873
4651
4654
  lino/utils/mldbc/mixins.py,sha256=CkYe5jDa7xp9fJq_V8zcZf8ocxgIjUgHc9KZccvA_Yw,1945
4652
- lino-25.2.2.dist-info/METADATA,sha256=zdReU_IERL2XyGbIUuXYmrscWytvSX3KxnxAmZWLT_Q,42534
4653
- lino-25.2.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
4654
- lino-25.2.2.dist-info/licenses/AUTHORS.rst,sha256=8VEm_G4HOmYEa4oi1nVoKKsdo4JanekEJCefWd2E8vk,981
4655
- lino-25.2.2.dist-info/licenses/COPYING,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
4656
- lino-25.2.2.dist-info/RECORD,,
4655
+ lino-25.2.3.dist-info/METADATA,sha256=TfT4Umplqu13p1S1S6vhTC9gow_fNMceRtYfc5UTE_s,42534
4656
+ lino-25.2.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
4657
+ lino-25.2.3.dist-info/licenses/AUTHORS.rst,sha256=8VEm_G4HOmYEa4oi1nVoKKsdo4JanekEJCefWd2E8vk,981
4658
+ lino-25.2.3.dist-info/licenses/COPYING,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
4659
+ lino-25.2.3.dist-info/RECORD,,
lino/utils/requests.py DELETED
@@ -1,55 +0,0 @@
1
- # Copyright 2009 Rumma & Ko Ltd
2
- # License: GNU Affero General Public License v3 (see file COPYING for details)
3
-
4
- import os
5
-
6
-
7
- def again(request, *args, **kw):
8
- get = request.GET.copy()
9
- for k, v in list(kw.items()):
10
- if v is None: # value None means "remove this key"
11
- if k in get:
12
- del get[k]
13
- else:
14
- get[k] = v
15
- path = request.path
16
- if len(args):
17
- path += "/" + "/".join(args)
18
- path = os.path.normpath(path)
19
- path = path.replace("\\", "/")
20
- s = get.urlencode()
21
- if len(s):
22
- path += "?" + s
23
- # print pth
24
- return path
25
-
26
-
27
- def get_redirect(request):
28
- if hasattr(request, "redirect_to"):
29
- return request.redirect_to
30
-
31
-
32
- def redirect_to(request, url):
33
- request.redirect_to = url
34
-
35
-
36
- # ~ def is_editing(request):
37
- # ~ editing = request.GET.get("editing",None)
38
- # ~ if editing is None:
39
- # ~ path = request.session.get("editing",None)
40
- # ~ else:
41
- # ~ editing = int(editing)
42
- # ~ if editing:
43
- # ~ request.session["editing"] = path = request.path
44
- # ~ else:
45
- # ~ request.session["editing"] = path = None
46
- # ~ if request.path == path:
47
- # ~ return True
48
- # ~ request.session["editing"] = None
49
- # ~ return False
50
-
51
- # ~ def stop_editing(request):
52
- # ~ request.session["editing"] = None
53
-
54
- # ~ def start_editing(request):
55
- # ~ request.session["editing"] = request.path
File without changes