lino 25.1.6__py3-none-any.whl → 25.2.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.
- lino/__init__.py +1 -1
- lino/core/actions.py +6 -0
- lino/core/actors.py +9 -3
- lino/core/callbacks.py +3 -2
- lino/core/fields.py +4 -0
- lino/core/keyboard.py +7 -2
- lino/core/model.py +1 -0
- lino/core/requests.py +7 -7
- lino/core/site.py +1 -2
- lino/core/store.py +2 -2
- lino/help_texts.py +3 -1
- lino/locale/bn/LC_MESSAGES/django.po +782 -710
- lino/locale/de/LC_MESSAGES/django.mo +0 -0
- lino/locale/de/LC_MESSAGES/django.po +1259 -1280
- lino/locale/django.pot +751 -702
- lino/locale/es/LC_MESSAGES/django.po +777 -708
- lino/locale/et/LC_MESSAGES/django.po +784 -709
- lino/locale/fr/LC_MESSAGES/django.po +1339 -1191
- lino/locale/nl/LC_MESSAGES/django.po +787 -712
- lino/locale/pt_BR/LC_MESSAGES/django.po +769 -700
- lino/locale/zh_Hant/LC_MESSAGES/django.po +769 -700
- lino/management/commands/demotest.py +2 -1
- lino/mixins/__init__.py +1 -1
- lino/modlib/checkdata/choicelists.py +5 -4
- lino/modlib/checkdata/models.py +9 -8
- lino/modlib/help/models.py +5 -0
- lino/modlib/jinja/__init__.py +0 -4
- lino/modlib/memo/__init__.py +1 -1
- lino/modlib/periods/mixins.py +1 -25
- lino/modlib/periods/models.py +42 -9
- lino/modlib/system/choicelists.py +12 -11
- lino/utils/config.py +2 -0
- lino/utils/dpy.py +15 -3
- lino/utils/soup.py +136 -103
- {lino-25.1.6.dist-info → lino-25.2.0.dist-info}/METADATA +1 -1
- {lino-25.1.6.dist-info → lino-25.2.0.dist-info}/RECORD +39 -39
- {lino-25.1.6.dist-info → lino-25.2.0.dist-info}/WHEEL +0 -0
- {lino-25.1.6.dist-info → lino-25.2.0.dist-info}/licenses/AUTHORS.rst +0 -0
- {lino-25.1.6.dist-info → lino-25.2.0.dist-info}/licenses/COPYING +0 -0
lino/utils/soup.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- coding: UTF-8 -*-
|
2
|
-
# Copyright 2016-
|
2
|
+
# Copyright 2016-2025 Rumma & Ko Ltd
|
3
3
|
# License: GNU Affero General Public License v3 (see file COPYING for details)
|
4
4
|
|
5
5
|
# See https://dev.lino-framework.org/dev/bleach.html
|
@@ -8,7 +8,7 @@ import re
|
|
8
8
|
from bs4 import BeautifulSoup, NavigableString, Comment, Doctype
|
9
9
|
from bs4.element import Tag
|
10
10
|
import logging; logger = logging.getLogger(__file__)
|
11
|
-
from lino.api import dd
|
11
|
+
# from lino.api import dd
|
12
12
|
|
13
13
|
|
14
14
|
PARAGRAPH_TAGS = {
|
@@ -29,7 +29,6 @@ PARAGRAPH_TAGS = {
|
|
29
29
|
|
30
30
|
WHITESPACE_TAGS = PARAGRAPH_TAGS | {
|
31
31
|
"[document]",
|
32
|
-
"span",
|
33
32
|
"ul",
|
34
33
|
"html",
|
35
34
|
"head",
|
@@ -37,6 +36,8 @@ WHITESPACE_TAGS = PARAGRAPH_TAGS | {
|
|
37
36
|
"base",
|
38
37
|
}
|
39
38
|
|
39
|
+
SHORT_PREVIEW_IMAGE_HEIGHT = "8em"
|
40
|
+
REMOVED_IMAGE_PLACEHOLDER = "⌧"
|
40
41
|
|
41
42
|
class Style:
|
42
43
|
# TODO: Extend rstgen.sphinxconf.sigal_image.Format to incoroporate this.
|
@@ -67,65 +68,139 @@ class Style:
|
|
67
68
|
# return
|
68
69
|
if "width" in self._map:
|
69
70
|
del self["width"]
|
70
|
-
self["height"] =
|
71
|
+
self["height"] = SHORT_PREVIEW_IMAGE_HEIGHT
|
71
72
|
|
72
73
|
def as_string(self):
|
73
74
|
return ";".join(["{}:{}".format(*kv) for kv in self._map.items()])
|
74
75
|
|
75
76
|
|
77
|
+
# def truncate_soup(soup, max_length=None):
|
78
|
+
# elems = []
|
79
|
+
# found_image = False
|
80
|
+
# remaining = max_length or settings.SITE.plugins.memo.short_preview_length
|
81
|
+
# stop = False
|
82
|
+
# for ch in soup:
|
83
|
+
# if ch.name == "img":
|
84
|
+
# if found_image:
|
85
|
+
# continue
|
86
|
+
# style = Style(ch.get("style", None))
|
87
|
+
# if not "float" in style:
|
88
|
+
# style["float"] = "right"
|
89
|
+
# style.adjust_size()
|
90
|
+
# if style.is_dirty:
|
91
|
+
# ch["style"] = style.as_string()
|
92
|
+
# found_image = True
|
93
|
+
# elems.append(ch)
|
94
|
+
# continue
|
95
|
+
#
|
96
|
+
# if ch.string is not None:
|
97
|
+
# strlen = len(ch.string)
|
98
|
+
# if strlen > remaining:
|
99
|
+
# stop = True
|
100
|
+
# end_text = ch.string[:remaining] + "..."
|
101
|
+
# ch.string.replace_with(end_text)
|
102
|
+
# elems.append(ch)
|
103
|
+
# remaining -= strlen
|
104
|
+
# if isinstance(ch, Tag):
|
105
|
+
# for c in ch.children:
|
106
|
+
# if c.name in PARAGRAPH_TAGS:
|
107
|
+
# c.unwrap()
|
108
|
+
#
|
109
|
+
# if stop:
|
110
|
+
|
111
|
+
|
76
112
|
class TextCollector:
|
77
113
|
def __init__(self, max_length=None):
|
78
114
|
self.text = ""
|
79
|
-
self.sep = "" # becomes "
|
115
|
+
self.sep = "" # becomes " " after WHITESPACE_TAGS
|
80
116
|
self.remaining = max_length or settings.SITE.plugins.memo.short_preview_length
|
81
|
-
self.
|
117
|
+
self.found_image = False
|
82
118
|
|
83
119
|
def add_chunk(self, ch):
|
84
|
-
# print("
|
85
|
-
|
120
|
+
# print(f"20250207 add_chunk {ch.__class__} {ch.name} {ch}")
|
121
|
+
# if isinstance(ch, Tag):
|
86
122
|
if ch.name in WHITESPACE_TAGS:
|
123
|
+
# for c in ch.contents:
|
124
|
+
# for c in ch:
|
87
125
|
for c in ch.children:
|
88
126
|
if not self.add_chunk(c):
|
89
127
|
return False
|
90
|
-
if ch.name in PARAGRAPH_TAGS:
|
91
|
-
|
92
|
-
|
93
|
-
|
128
|
+
# if ch.name in PARAGRAPH_TAGS:
|
129
|
+
# # self.sep = "\n\n"
|
130
|
+
# self.sep = "<br/>"
|
131
|
+
# else:
|
132
|
+
# self.sep = " "
|
133
|
+
self.sep = " "
|
94
134
|
return True
|
95
135
|
|
96
|
-
assert ch.name != "IMG"
|
136
|
+
# assert ch.name != "IMG"
|
137
|
+
we_want_more = True
|
97
138
|
|
139
|
+
# Ignore all images except the first one. And for the first one we
|
140
|
+
# enforce our style.
|
98
141
|
if ch.name == "img":
|
99
|
-
if self.
|
100
|
-
#
|
101
|
-
self.text +=
|
142
|
+
if self.found_image:
|
143
|
+
# self.text += self.sep
|
144
|
+
self.text += REMOVED_IMAGE_PLACEHOLDER
|
102
145
|
return True
|
146
|
+
self.found_image = True
|
103
147
|
style = Style(ch.get("style", None))
|
104
148
|
if not "float" in style:
|
105
149
|
style["float"] = "right"
|
106
150
|
style.adjust_size()
|
107
151
|
if style.is_dirty:
|
108
152
|
ch["style"] = style.as_string()
|
109
|
-
self.image = ch
|
110
153
|
# print("20231023 a", ch)
|
111
154
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
155
|
+
elif ch.string is not None:
|
156
|
+
text = ch.string
|
157
|
+
strlen = len(text)
|
158
|
+
# print(f"20250208b add_chunk {repr(ch)} len={strlen} remaining={self.remaining}")
|
159
|
+
# chop = self.remaining
|
160
|
+
if strlen > self.remaining:
|
117
161
|
we_want_more = False
|
162
|
+
# ch.string = ch.string[: self.remaining] + "..."
|
163
|
+
end_text = text[:self.remaining] + "..."
|
164
|
+
# raise Exception(f"20250208 {strlen} > {self.remaining} {end_text}")
|
165
|
+
if isinstance(ch, NavigableString):
|
166
|
+
# ch = NavigableString(end_text)
|
167
|
+
ch = end_text
|
168
|
+
else:
|
169
|
+
ch.string.replace_with(end_text)
|
170
|
+
# # ch = NavigableString(ch.string[:chop] + "...")
|
171
|
+
# # self.text += self.sep + ch.string
|
172
|
+
# self.text += self.sep + end_text
|
173
|
+
# return False
|
174
|
+
# p = ch.string.parent
|
175
|
+
# previous_sibling = ch.previous_sibling
|
176
|
+
# ch = NavigableString(end_text)
|
177
|
+
# ch = previous_sibling.next_sibling
|
178
|
+
# raise Exception(f"20250208 Old {p} and new parent {ch.parent}")
|
179
|
+
# if isinstance(ch, NavigableString):
|
180
|
+
# ch.replace_with(end_text)
|
181
|
+
# else:
|
182
|
+
# ch.string.replace_with(end_text)
|
183
|
+
# self.text += self.sep + str(ch)
|
184
|
+
# for c in ch.children:
|
185
|
+
# self.add_chunk(c)
|
186
|
+
# return False
|
187
|
+
# raise Exception(f"20250208 {end_text} -- {ch}")
|
188
|
+
# print(f"20250208c {repr(end_text)} in {ch}")
|
118
189
|
# print("20230927", ch.string, ch)
|
119
190
|
# self.text += str(ch.string) + "..."
|
120
|
-
#
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
191
|
+
# self.remaining = 0
|
192
|
+
# return True
|
193
|
+
# return we_want_more
|
194
|
+
self.remaining -= strlen
|
195
|
+
# print(f"20250207c add_chunk {ch.__class__} {ch}")
|
196
|
+
|
197
|
+
# if isinstance(ch, NavigableString):
|
198
|
+
# self.text += self.sep + ch.string
|
199
|
+
# else:
|
200
|
+
# self.text += self.sep + str(ch)
|
201
|
+
self.text += self.sep + str(ch)
|
128
202
|
self.remaining -= len(self.sep)
|
203
|
+
# self.remaining -= 1 # any separator counts as 1 char
|
129
204
|
self.sep = ""
|
130
205
|
return we_want_more
|
131
206
|
|
@@ -135,7 +210,8 @@ def truncate_comment(html_str, max_length=300):
|
|
135
210
|
# new implementation since 20230713
|
136
211
|
html_str = html_str.strip() # remove leading or trailing newlines
|
137
212
|
|
138
|
-
if
|
213
|
+
if False: # no longer need to test for specil case
|
214
|
+
if not html_str.startswith("<"):
|
139
215
|
# print("20231023 c", html_str)
|
140
216
|
if len(html_str) > max_length:
|
141
217
|
return html_str[:max_length] + "..."
|
@@ -145,62 +221,17 @@ def truncate_comment(html_str, max_length=300):
|
|
145
221
|
# print(html_str)
|
146
222
|
# raise Exception("20230928 {} {}".format(len(html_str), max_length))
|
147
223
|
|
148
|
-
soup = BeautifulSoup(html_str, features="html.parser")
|
224
|
+
# soup = BeautifulSoup(html_str, features="html.parser")
|
225
|
+
soup = BeautifulSoup(html_str, features="lxml")
|
226
|
+
# soup = sanitized_soup(html_str)
|
227
|
+
# truncate_soup(soup, max_length)
|
228
|
+
# return str(soup)
|
229
|
+
# return "".join([str(s) for s in walk(soup, max_length)])
|
149
230
|
tc = TextCollector(max_length)
|
150
231
|
tc.add_chunk(soup)
|
151
232
|
return tc.text
|
152
233
|
|
153
234
|
|
154
|
-
|
155
|
-
def old_truncate_comment(html_str, max_p_len=None):
|
156
|
-
# returns a single paragraph with a maximum number of visible chars.
|
157
|
-
# No longer used. Replaced by new truncate_comment() below
|
158
|
-
if max_p_len is None:
|
159
|
-
max_p_len = settings.SITE.plugins.memo.short_preview_length
|
160
|
-
html_str = html_str.strip() # remove leading or trailing newlines
|
161
|
-
|
162
|
-
if not html_str.startswith("<"):
|
163
|
-
if len(html_str) > max_p_len:
|
164
|
-
txt = html_str[:max_p_len] + "..."
|
165
|
-
else:
|
166
|
-
txt = html_str
|
167
|
-
return txt
|
168
|
-
soup = BeautifulSoup(html_str, "html.parser")
|
169
|
-
ps = soup.find_all(
|
170
|
-
["p", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "pre"]
|
171
|
-
)
|
172
|
-
if len(ps) > 0:
|
173
|
-
anchor_end = "</a>"
|
174
|
-
txt = ""
|
175
|
-
for p in ps:
|
176
|
-
text = ""
|
177
|
-
for c in p.contents:
|
178
|
-
if isinstance(c, Tag):
|
179
|
-
if c.name == "a":
|
180
|
-
text += str(c)
|
181
|
-
max_p_len = max_p_len + len(text) - len(c.text)
|
182
|
-
else:
|
183
|
-
# text += str(c)
|
184
|
-
text += c.text
|
185
|
-
else:
|
186
|
-
text += str(c)
|
187
|
-
|
188
|
-
if len(txt) + len(text) > max_p_len:
|
189
|
-
txt += text
|
190
|
-
if anchor_end in txt:
|
191
|
-
ae_index = txt.index(anchor_end) + len(anchor_end)
|
192
|
-
if ae_index >= max_p_len:
|
193
|
-
txt = txt[:ae_index]
|
194
|
-
txt += "..."
|
195
|
-
break
|
196
|
-
txt = txt[:max_p_len]
|
197
|
-
txt += "..."
|
198
|
-
break
|
199
|
-
else:
|
200
|
-
txt += text + "\n\n"
|
201
|
-
return txt
|
202
|
-
return html_str
|
203
|
-
|
204
235
|
# remove these tags including their content.
|
205
236
|
blacklist = frozenset(["script", "style", "head"])
|
206
237
|
|
@@ -234,16 +265,15 @@ ALLOWED_TAGS = frozenset([
|
|
234
265
|
"tbody",
|
235
266
|
])
|
236
267
|
|
268
|
+
GENERALLY_ALLOWED_ATTRS = {"title", "style", "class"}
|
237
269
|
|
238
|
-
# Map of allowed attributes by tag.
|
270
|
+
# Map of allowed attributes by tag. Originally copied from bleach.sanitizer.
|
239
271
|
ALLOWED_ATTRIBUTES = {
|
240
|
-
"a": {"href"
|
241
|
-
"
|
242
|
-
"acronym": {"title"},
|
272
|
+
"a": {"href"} | GENERALLY_ALLOWED_ATTRS,
|
273
|
+
"img": {"src", "alt"} | GENERALLY_ALLOWED_ATTRS,
|
243
274
|
}
|
244
275
|
|
245
|
-
ALLOWED_ATTRIBUTES["span"] = {
|
246
|
-
"class",
|
276
|
+
ALLOWED_ATTRIBUTES["span"] = GENERALLY_ALLOWED_ATTRS | {
|
247
277
|
"data-index",
|
248
278
|
"data-denotation-char",
|
249
279
|
"data-link",
|
@@ -251,28 +281,25 @@ ALLOWED_ATTRIBUTES["span"] = {
|
|
251
281
|
"data-value",
|
252
282
|
"contenteditable",
|
253
283
|
}
|
254
|
-
|
284
|
+
|
285
|
+
ALLOWED_ATTRIBUTES["p"] = GENERALLY_ALLOWED_ATTRS | {"align"}
|
255
286
|
|
256
287
|
# def safe_css(attr, css):
|
257
288
|
# if attr == "style":
|
258
289
|
# return re.sub("(width|height):[^;]+;", "", css)
|
259
290
|
# return css
|
260
291
|
|
261
|
-
def
|
292
|
+
def sanitized_soup(old):
|
262
293
|
|
263
294
|
# Inspired by https://chase-seibert.github.io/blog/2011/01/28/sanitize-html-with-beautiful-soup.html
|
264
295
|
|
265
|
-
old = old.strip()
|
266
|
-
if not old:
|
267
|
-
return old
|
268
|
-
|
269
296
|
try:
|
270
297
|
soup = BeautifulSoup(old, features="lxml")
|
271
298
|
except HTMLParseError as e:
|
272
|
-
logger.
|
299
|
+
logger.warning("Could not sanitize %r : %s", old, e)
|
273
300
|
return f"Could not sanitize content ({e})"
|
274
301
|
|
275
|
-
for tag in soup.
|
302
|
+
for tag in soup.find_all():
|
276
303
|
# print(tag)
|
277
304
|
tag_name = tag.name.lower()
|
278
305
|
if tag_name in blacklist:
|
@@ -282,11 +309,8 @@ def sanitize(old):
|
|
282
309
|
tag.unwrap()
|
283
310
|
elif tag_name in ALLOWED_TAGS:
|
284
311
|
# tag is allowed. Make sure all the attributes are allowed.
|
285
|
-
allowed = ALLOWED_ATTRIBUTES.get(tag_name,
|
286
|
-
if
|
287
|
-
tag.attrs = dict()
|
288
|
-
else:
|
289
|
-
tag.attrs = {k: v for k, v in tag.attrs.items() if k in allowed}
|
312
|
+
allowed = ALLOWED_ATTRIBUTES.get(tag_name, GENERALLY_ALLOWED_ATTRS)
|
313
|
+
tag.attrs = {k: v for k, v in tag.attrs.items() if k in allowed}
|
290
314
|
else:
|
291
315
|
# print(tag.name)
|
292
316
|
# tag.decompose()
|
@@ -298,7 +322,7 @@ def sanitize(old):
|
|
298
322
|
tag.attrs = dict()
|
299
323
|
|
300
324
|
# remove all comments because they might contain scripts
|
301
|
-
comments = soup.
|
325
|
+
comments = soup.find_all(text=lambda text:isinstance(text, (Comment, Doctype)))
|
302
326
|
for comment in comments:
|
303
327
|
comment.extract()
|
304
328
|
|
@@ -308,4 +332,13 @@ def sanitize(old):
|
|
308
332
|
if main_tag.name in useless_main_tags and not main_tag.attrs:
|
309
333
|
main_tag.unwrap()
|
310
334
|
|
311
|
-
return
|
335
|
+
return soup
|
336
|
+
|
337
|
+
def sanitize(s):
|
338
|
+
s = s.strip()
|
339
|
+
if not s:
|
340
|
+
return s
|
341
|
+
# do we want to remove whitespace between tags?
|
342
|
+
# s = re.sub(">\s+<", "><", s)
|
343
|
+
# return sanitized_soup(s).decode(formatter="html").strip()
|
344
|
+
return str(sanitized_soup(s)).strip()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lino
|
3
|
-
Version: 25.
|
3
|
+
Version: 25.2.0
|
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=
|
3
|
+
lino/__init__.py,sha256=L5fEz8yXvX5li-Ml36neDQc_SmeIeUm_wFYZp0vr_l4,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=
|
7
|
+
lino/help_texts.py,sha256=WgZHe3ntyEtZ0LiKSIMMEH6OYHq4bFDKj-noKw7LYVQ,91195
|
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,10 +28,10 @@ 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=
|
32
|
-
lino/core/actors.py,sha256=
|
31
|
+
lino/core/actions.py,sha256=2QGQYpjQ_Fyvb3wb4TBGj8GO4f857aQ3YX3Uz6u15dw,46622
|
32
|
+
lino/core/actors.py,sha256=0MhLLWf3uXzO5nEV5D8Bc12dedlgLCWVBo4WcJyLQCc,73865
|
33
33
|
lino/core/boundaction.py,sha256=tb0C4WwbJpAP3yKbR6OaibzcAkwVs3nfeuD0RjXTjIg,6665
|
34
|
-
lino/core/callbacks.py,sha256=
|
34
|
+
lino/core/callbacks.py,sha256=uu1-znzxVDD-JETUebw-hYsNg_9ExQb1vfwbc7Psjro,7549
|
35
35
|
lino/core/choicelists.py,sha256=8FpmfEREj0jITkx3qihjPfg8pPMBHWXprNfuje4b7N4,36525
|
36
36
|
lino/core/classproperty.py,sha256=_E95WPAs7BWbAuFpPvoYM2ZwW_mbq3rvF7o43WsMq_8,4316
|
37
37
|
lino/core/constants.py,sha256=chvG1TrwD2gVMmL4nTOZtO8NcffcclcUv3zBE8mMoiQ,4503
|
@@ -42,25 +42,25 @@ lino/core/ddh.py,sha256=dYScxWKTOCDEgow7wJNJe812ESasmmITPK2ovraBQno,3172
|
|
42
42
|
lino/core/diff.py,sha256=XQ-oQQDS_v3kXd4eRP9Hwr5UCgp-TPZIPVav9ZblUno,5882
|
43
43
|
lino/core/elems.py,sha256=wgRDDDHlEjN1el37Mgt8yvsLlLNgunr4_vSA4iFLsUM,108454
|
44
44
|
lino/core/exceptions.py,sha256=QDxDo5cllSyXQ8VWet9hGXzNadxCOmwMVrFXc6V-vpE,665
|
45
|
-
lino/core/fields.py,sha256=
|
45
|
+
lino/core/fields.py,sha256=C14cCHHJclk0z6NlJFRPyXPJaVS1DhngQLTE6gPR0BE,57407
|
46
46
|
lino/core/frames.py,sha256=ISxgq9zyZfqW3tDZMWdKi9Ij455lT_81qBH0xex0bfE,1161
|
47
47
|
lino/core/gfks.py,sha256=6VXn2FSIXOrwVq0stfbPevT37EWg1tg4Fn-HMNVnbmk,1970
|
48
48
|
lino/core/help.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
49
|
lino/core/inject.py,sha256=o9pHxWBuo15vpGN5pwCsWVNk2awrMuBigOHiua78v4I,13413
|
50
50
|
lino/core/kernel.py,sha256=gqx1dqVpahdxNPejLcVm9c7JX3qlajosEJ-yEQTgHCU,48275
|
51
|
-
lino/core/keyboard.py,sha256=
|
51
|
+
lino/core/keyboard.py,sha256=W3jA6qtB5HMppoNnd_6PgIM7ZlyHilJEhBvdeZTY7Xk,1283
|
52
52
|
lino/core/layouts.py,sha256=Wojx5UUyhy7PsZE8FWmiXcmZDj4wz2y_1_wlz1G560Q,28663
|
53
53
|
lino/core/menus.py,sha256=BoPtcqtTB1-ADp3ffnzEXyIx8lQ4HLaZWxo0eQrj-T4,10850
|
54
54
|
lino/core/merge.py,sha256=sKtTeZtHdoDKerdHj4NXuXXNzpKDsfdPaiq-CY0NqQc,9094
|
55
|
-
lino/core/model.py,sha256=
|
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
58
|
lino/core/renderer.py,sha256=jIXxNSpljZhb9tBMhUfDNbZD3XmxYzaS6SlipHx29L4,47291
|
59
|
-
lino/core/requests.py,sha256=
|
59
|
+
lino/core/requests.py,sha256=23pQckFF-R9IBfN7KVItlCodiKeGdmDH-UPOyR0N69M,92887
|
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=
|
63
|
-
lino/core/store.py,sha256=
|
62
|
+
lino/core/site.py,sha256=s_kisoL35ZcbFbF18eyvARu7OcNA_61GPE3-_6rNJIc,83136
|
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
|
66
66
|
lino/core/user_types.py,sha256=0iSYmzr2M9v2Mn2y6hzAZeqareUT-gD7l3MfIPyG9ZI,867
|
@@ -76,28 +76,28 @@ lino/core/auth/middleware.py,sha256=1c_z4lP_Rhbw7pdCapprGkjIXX40OJgIlFyQew4O-Nc,
|
|
76
76
|
lino/core/auth/utils.py,sha256=Nv7QbINYi64hGZZxV-Ix1iwhrb_KOfUfhJXAzoKy2ng,4130
|
77
77
|
lino/core/management/__init__.py,sha256=fp1cONBXgq1IftPk5c4b63gRlYOWpT5VzCIKrx0aGlE,61
|
78
78
|
lino/fake_migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
79
|
-
lino/locale/django.pot,sha256=
|
79
|
+
lino/locale/django.pot,sha256=dHb03JkAaWWR22EfURJE5JBiFUbcyJ6jwwZ5ASh-Dps,152924
|
80
80
|
lino/locale/bn/LC_MESSAGES/django.mo,sha256=ygs6NvTycQXv5Dwl8bpyy13u-uMIcNK2-xpJM3zSy3Y,14893
|
81
|
-
lino/locale/bn/LC_MESSAGES/django.po,sha256=
|
82
|
-
lino/locale/de/LC_MESSAGES/django.mo,sha256=
|
83
|
-
lino/locale/de/LC_MESSAGES/django.po,sha256=
|
81
|
+
lino/locale/bn/LC_MESSAGES/django.po,sha256=DCTpcQcLOTC4DpA4NRvYoLVv5_Yvpp804BnjQgX6roM,192740
|
82
|
+
lino/locale/de/LC_MESSAGES/django.mo,sha256=iLKQzGYhaGPt9rUvOmbv-oJQA99SHZgdvtECCjEqS7o,27552
|
83
|
+
lino/locale/de/LC_MESSAGES/django.po,sha256=OWtq6Xr7u1me7oqkuetAUr7vjqpU-iIZWFqKxp29KUk,167411
|
84
84
|
lino/locale/es/LC_MESSAGES/django.mo,sha256=r2zi4aulC-1zX1XcoGddo0mpdOpuuOpUxpWxGoYh8qc,2357
|
85
|
-
lino/locale/es/LC_MESSAGES/django.po,sha256=
|
85
|
+
lino/locale/es/LC_MESSAGES/django.po,sha256=0ZILbxeYQJ8nru55rqWK6-3Oty2WvIbzZovvKWV8gqw,155257
|
86
86
|
lino/locale/et/LC_MESSAGES/django.mo,sha256=1RH5dX6YOBgk2tX_xpkriBRDh6qkxJDPrWysVeio_eM,5519
|
87
|
-
lino/locale/et/LC_MESSAGES/django.po,sha256=
|
87
|
+
lino/locale/et/LC_MESSAGES/django.po,sha256=1g1z5CWOZTWxKqJax7vaa4x5a8ndY5vuyPuZwysn5kc,218934
|
88
88
|
lino/locale/fr/LC_MESSAGES/django.mo,sha256=N7TxEPKmUBjDLu-EabjGUm1VB-CqKjZH1AzRRJ2M5OM,18078
|
89
|
-
lino/locale/fr/LC_MESSAGES/django.po,sha256=
|
89
|
+
lino/locale/fr/LC_MESSAGES/django.po,sha256=hzwUrF6zQc6Uvr7b_3ygpOh-M7ogsjhXnkfB9e858VQ,164385
|
90
90
|
lino/locale/nl/LC_MESSAGES/django.mo,sha256=cQ3DTQqc4dbwrAdm5d95Kf4pDoYqKdMdElAaRerC0XA,8115
|
91
|
-
lino/locale/nl/LC_MESSAGES/django.po,sha256=
|
91
|
+
lino/locale/nl/LC_MESSAGES/django.po,sha256=1fmmyBEEPuLpsLQMRbBEHotcf7lDWvkksKU11ZgQNkk,340860
|
92
92
|
lino/locale/pt/LC_MESSAGES/django.mo,sha256=OCKgnomRXLl_QsikdFsqUwKXkVexvLvSWf5kizPJrRE,42461
|
93
93
|
lino/locale/pt/LC_MESSAGES/django.po,sha256=pMhpgCeuj2O7G37gDSr-8jdAKs1P3hEy-K2Lg-GbCIU,80311
|
94
94
|
lino/locale/pt_BR/LC_MESSAGES/django.mo,sha256=OCKgnomRXLl_QsikdFsqUwKXkVexvLvSWf5kizPJrRE,42461
|
95
|
-
lino/locale/pt_BR/LC_MESSAGES/django.po,sha256=
|
96
|
-
lino/locale/zh_Hant/LC_MESSAGES/django.po,sha256=
|
95
|
+
lino/locale/pt_BR/LC_MESSAGES/django.po,sha256=61QR27iyU4ZXcErTj5DZj7GlyL-Fpwmn3E-tbXq1hyI,154284
|
96
|
+
lino/locale/zh_Hant/LC_MESSAGES/django.po,sha256=JeP8cSTQ5bjX12Nr3EcCVhIaR-1pBYls5qSYv8iFRDs,154206
|
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=
|
100
|
+
lino/management/commands/demotest.py,sha256=yvxpl1G0Clt-iu7lY0DK9HVhaWyl_tQhYx0YUpddTWM,5041
|
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
|
@@ -116,7 +116,7 @@ lino/management/commands/run.py,sha256=MiK53KIACYKDTKF6knJGwU-uzEApGnDxByi-3_nrT
|
|
116
116
|
lino/management/commands/show.py,sha256=dS_TotAEeH8zo_wufQgca6q0Yj9qeWsJUOUcss6YD7E,1439
|
117
117
|
lino/management/commands/syncscreenshots.py,sha256=XYZhqfm5_RwJzVFNGhHJKucl4j6T6mYo2GsDaUzvjAs,1561
|
118
118
|
lino/management/commands/update_conf.py,sha256=saAaQdPhn3mNOoHcBxOFSf_vBEgM-aopTHq1sJN20Bo,1026
|
119
|
-
lino/mixins/__init__.py,sha256=
|
119
|
+
lino/mixins/__init__.py,sha256=ADIq0rPGlAY4ifSaMvqahXvCMnbFzq2qAWcyyUkx4Ds,8930
|
120
120
|
lino/mixins/dupable.py,sha256=ofyYrcT9WiYdVTkzgXyXaBu1kS-y197YnFTnZNALUHo,10233
|
121
121
|
lino/mixins/duplicable.py,sha256=lQ5SEQmxPcOU9vETocgQI41uzgvunvXIy7HAnPeKDUI,4224
|
122
122
|
lino/mixins/human.py,sha256=YDIfIHHAaVmzd3uGsJp_vDvkaBWOp09I7i4AGNy9YsQ,13255
|
@@ -164,8 +164,8 @@ lino/modlib/changes/__init__.py,sha256=3-CO7xI-U-rKDu_-WJg7N4FaIgqmFcj81uzyQlNYr
|
|
164
164
|
lino/modlib/changes/models.py,sha256=kx3BGV82VWu1rA9N393zjPpPvy-k55NbOvV7KI1gfYc,9340
|
165
165
|
lino/modlib/changes/utils.py,sha256=4jz8QXgaBxfmCBUvDeZeh7lkdwfTq7OBXBiFhMmANqA,2550
|
166
166
|
lino/modlib/checkdata/__init__.py,sha256=raUCoYi4WZLKVLG3GqH0ml1eH_YJXqY-EgXsKUe6iRY,2829
|
167
|
-
lino/modlib/checkdata/choicelists.py,sha256=
|
168
|
-
lino/modlib/checkdata/models.py,sha256=
|
167
|
+
lino/modlib/checkdata/choicelists.py,sha256=OGv3mmr5DPPahoBliAOFIx_H6ysuW3ZpcrI4fIq1SB0,5244
|
168
|
+
lino/modlib/checkdata/models.py,sha256=3xXd1opiOjIlWtSQd1jg1XoLU8ZbGrkjbw0vDD7J2SE,11639
|
169
169
|
lino/modlib/checkdata/roles.py,sha256=xjQ882-BxYUoHbv2pzebs7MWl6snA2fKivFDTRzW7sQ,295
|
170
170
|
lino/modlib/checkdata/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
171
171
|
lino/modlib/checkdata/fixtures/checkdata.py,sha256=TY9yIBwB5nEw0e6RTXqRwYdiCaLkkYTwWmFGcVBw2ow,332
|
@@ -3496,7 +3496,7 @@ lino/modlib/gfks/fields.py,sha256=43yIsudT07bXuKD1Gsqvn15_F3UaeZQqZzuzK9dDdLc,32
|
|
3496
3496
|
lino/modlib/gfks/mixins.py,sha256=BcITVETBR7zVj684diZGCii3rzm7lgrgzr2euy-D-iw,2626
|
3497
3497
|
lino/modlib/gfks/models.py,sha256=bDbuvtpSW-wxNWLC3pKWsDQPyN4g6MFMTS-66aQ2DX8,6723
|
3498
3498
|
lino/modlib/help/__init__.py,sha256=PlThatoYB6lThNahWkVL2ZatimW0d_9LAPTZIE7hiuE,4434
|
3499
|
-
lino/modlib/help/models.py,sha256=
|
3499
|
+
lino/modlib/help/models.py,sha256=Ik-fkUH8KHiPajar-SYCbuaQGfIbbgfI6-9rMkr1Np8,3497
|
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
|
@@ -3516,7 +3516,7 @@ lino/modlib/importfilters/__init__.py,sha256=i_eUIwJSRHlSFJueqxBkApcIWOdW-bb1xwp
|
|
3516
3516
|
lino/modlib/importfilters/models.py,sha256=iESoL9hwcYG1TzfCbBCqhJS2tzFw5M3gVNgrCULkSWM,3227
|
3517
3517
|
lino/modlib/ipdict/__init__.py,sha256=n2fkShCZ-KIztazI_JQztJBBgg3c2GeIIh-5Q6ukZmA,1169
|
3518
3518
|
lino/modlib/ipdict/models.py,sha256=9-pjj_xXdndhQaQI8sgXcmODxurST_aFcShGwomiYKk,1774
|
3519
|
-
lino/modlib/jinja/__init__.py,sha256=
|
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
3522
|
lino/modlib/jinja/renderer.py,sha256=yywxocrNYSPvUcMjuYw9guiPoq50lfaIKkJOP_PHg5o,6142
|
@@ -3541,7 +3541,7 @@ lino/modlib/linod/utils.py,sha256=dE973Xib6Be1DvNsZ0M5wzY_jpkk35R21WKs-jQPorM,33
|
|
3541
3541
|
lino/modlib/linod/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3542
3542
|
lino/modlib/linod/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3543
3543
|
lino/modlib/linod/management/commands/linod.py,sha256=9-zRm-Xgp3uWj6AlDZpjtzo_TqSPyxIkKIrI_jshxVI,3457
|
3544
|
-
lino/modlib/memo/__init__.py,sha256=
|
3544
|
+
lino/modlib/memo/__init__.py,sha256=Kghjmlz0y1km6SFq5m9nbDqD3CKfSplj57rso3IevLk,5247
|
3545
3545
|
lino/modlib/memo/mixins.py,sha256=Wv844JL6WyvYI56QqcCdiHq8nocs8xcIM_eNzaWu3So,10919
|
3546
3546
|
lino/modlib/memo/models.py,sha256=2UbKaixPWCnP1ZkoJx_DDTtltpfYVbU3uJ1hmsZDU8A,3146
|
3547
3547
|
lino/modlib/memo/parser.py,sha256=lOSoXY5nj_CaM3jdd2e2s7-MbXCGRQu3SxQ3d1CMkEE,12994
|
@@ -3574,8 +3574,8 @@ lino/modlib/office/__init__.py,sha256=rOKD9zKt-VBvFFqoHBioNp299Igb1Sk2n466iCt6AS
|
|
3574
3574
|
lino/modlib/office/roles.py,sha256=oQWTZ-_9_vssc9QW5A0YspMjG_V5gCiHSU0eE0AIH30,356
|
3575
3575
|
lino/modlib/periods/__init__.py,sha256=MFTI4YTYw3zTxYVlD568rBxn02e_J9Yn10uZ6U5W-uQ,1069
|
3576
3576
|
lino/modlib/periods/choicelists.py,sha256=_t_l40FlXYAyRnlOZzh4DR5wMCM1nIWiIfS7QKbXkmw,1304
|
3577
|
-
lino/modlib/periods/mixins.py,sha256=
|
3578
|
-
lino/modlib/periods/models.py,sha256=
|
3577
|
+
lino/modlib/periods/mixins.py,sha256=QQXtu1Z6HjqDlL_xMM98FR7PQGKhYgjslhusOiWwPDA,4271
|
3578
|
+
lino/modlib/periods/models.py,sha256=hu1myxDqrBMIiORNYWBpAIDz-WjDe3LmF2JhrvG6DeI,8444
|
3579
3579
|
lino/modlib/periods/fixtures/std.py,sha256=iV6a2DNAhfYvO1VspGkcncEmygHK94zWdDZlHUY8JSw,881
|
3580
3580
|
lino/modlib/printing/__init__.py,sha256=u1fq44d073-IDH_t8hWs1sQdlAHdsCP85sfEOMSW5L4,689
|
3581
3581
|
lino/modlib/printing/actions.py,sha256=CME19ZC6lYWO5qGoVX1b8P4q_wHSwvV19ELKEquMLJs,11704
|
@@ -3634,7 +3634,7 @@ lino/modlib/summaries/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-
|
|
3634
3634
|
lino/modlib/summaries/management/commands/checksummaries.py,sha256=hNEGFcZmbGFpL_H6aKAkdhL_Gw_mE8l-C2NYHvH4Bvo,839
|
3635
3635
|
lino/modlib/system/__init__.py,sha256=cXb8cPBr3t18mXtiY_ScqscdUgd6MvSrsHebfqY-SHk,1407
|
3636
3636
|
lino/modlib/system/actions.py,sha256=jmSYPQDvIQxDth8MaJ9GpkmSCufLGWjmAjKdHAIWE48,1126
|
3637
|
-
lino/modlib/system/choicelists.py,sha256=
|
3637
|
+
lino/modlib/system/choicelists.py,sha256=u9Y2e_lZxFS_SMe-MDeOCNOfHc1PtQ6OjdPG9WwpaGk,9512
|
3638
3638
|
lino/modlib/system/mixins.py,sha256=fpj0O1218KgwGhRr8IHYRBXsNt5uXN87qVrx7dxvjys,19031
|
3639
3639
|
lino/modlib/system/models.py,sha256=30HT4M6o_jyYgZ5hLSRf6Inc0nuhxAsHQvLfPtvkFhM,10837
|
3640
3640
|
lino/modlib/system/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -4600,7 +4600,7 @@ lino/utils/addressable.py,sha256=o7bmLbyvrmOoAT478s7XqjWKvnZ7zSXj4k7Xf0ccqf8,221
|
|
4600
4600
|
lino/utils/ajax.py,sha256=npCS0WumhTQlBzXxQPKnp2sYCRcPsYcbFqzE2ykVc4Q,3254
|
4601
4601
|
lino/utils/choosers.py,sha256=9jjeLz-QcWVBfR8_GdY4PNYoqIYM63OI3OvOL2l1ZaU,17604
|
4602
4602
|
lino/utils/code.py,sha256=-2vc8npHQ5jsrRqzxmjRZZ8FWY7QJ7-sRg7-ZhOsUEU,7053
|
4603
|
-
lino/utils/config.py,sha256=
|
4603
|
+
lino/utils/config.py,sha256=gtaJURPOwHyV_AW7i7_vin3KTj3UwZa4iviDbldwXGE,8568
|
4604
4604
|
lino/utils/cycler.py,sha256=2LGMhMJX5At5ln4yZvmNleWROs-CA_YE_UCzxzvxK4U,1548
|
4605
4605
|
lino/utils/daemoncommand.py,sha256=NjGShiz09fddIV0WU0jK2nzO_CwPj1MfdmgwAOYZi4M,11525
|
4606
4606
|
lino/utils/dataserializer.py,sha256=-_xHXaGwDSO6-sYEHEa2BtEmKS8bW6gsYx4dV-GbvDs,3779
|
@@ -4609,7 +4609,7 @@ lino/utils/dbfreader.py,sha256=4sXOGBKX6DFQCEPkCMfnJAVneHMyDzJQB5tsYAq90vQ,12205
|
|
4609
4609
|
lino/utils/dblogger.py,sha256=kr0YxQY6veymvNg5A4tsvkqW8haRWdwqL0C-_9_QTg0,721
|
4610
4610
|
lino/utils/diag.py,sha256=evkU818hZSGpWdL0Du11QakT5_frvc5z4C93IEBlECg,18307
|
4611
4611
|
lino/utils/djangotest.py,sha256=Phz1qNp0wDonZRja5dxbCk0Xl3a73gZNiKK8v9tAgZg,8334
|
4612
|
-
lino/utils/dpy.py,sha256=
|
4612
|
+
lino/utils/dpy.py,sha256=Hw4ofFnhRPAE2PsPf9r5RpzcfVLQdIjtOe-XtMMLtuE,20661
|
4613
4613
|
lino/utils/format_date.py,sha256=HZ3wbN-1OjhawYG8-w2_TwgT33yYDuUvU877j-3QX7Q,2888
|
4614
4614
|
lino/utils/html.py,sha256=pcE0UQmdQGxxmb-p0mBb47zNbRMXLP9cxxrXTLs4gbY,3143
|
4615
4615
|
lino/utils/html2odf.py,sha256=Hxw4HiIHY1ZCjb4_JLykVHbr6yAMhhHrnrCnLNDYKAs,4826
|
@@ -4636,7 +4636,7 @@ lino/utils/restify.py,sha256=QMVQXrmjDl6PPC7HJJGeDm125pcvrZKvcMpiscaPrsw,14066
|
|
4636
4636
|
lino/utils/screenshots.py,sha256=T-szKC3EJfo4JcLio8Jj0xqaoSuJcZG6Jf9EF_B8WDQ,2040
|
4637
4637
|
lino/utils/sendchanges.py,sha256=fcSqRyI3l8sEf9_LSqIyWGML6CORoYkjcFp2bs-YNlY,7097
|
4638
4638
|
lino/utils/socks.py,sha256=0d67FDbrJ7PXl4AYzNNZgwCzV-fzIAAtWGxMEB7dw78,538
|
4639
|
-
lino/utils/soup.py,sha256=
|
4639
|
+
lino/utils/soup.py,sha256=__Bt9WDoayUGPi98EzBrD3dlbVp_NNrD9_irB7yUugc,10753
|
4640
4640
|
lino/utils/sql.py,sha256=kwCgv5E3n7uLjpXOEiaF2W2p8LeGXcP39xgtnqvzTP8,6795
|
4641
4641
|
lino/utils/sqllog.py,sha256=kUCnBfFjExhItJ1w76WT9VWPaWWq8NQM-kSIMIIZnRU,3282
|
4642
4642
|
lino/utils/ssin.py,sha256=Wo-9M0pG0uEYEGvmz8N--iRIqJe3ETtgLOXoung7qlE,4232
|
@@ -4649,8 +4649,8 @@ lino/utils/xml.py,sha256=4Z44W1e5HvTVrU8erkohgnwqY-5Cr2NHywaAJ5OgRvw,989
|
|
4649
4649
|
lino/utils/mldbc/__init__.py,sha256=QqWRlzeXaOmFfbCk-vTY3SZMn1-FCf67XnpZdd_Nim0,1134
|
4650
4650
|
lino/utils/mldbc/fields.py,sha256=tAX8G5UKigr9c6g0F3ARIjZZtg406mdaZ--PWSbiH9E,2873
|
4651
4651
|
lino/utils/mldbc/mixins.py,sha256=CkYe5jDa7xp9fJq_V8zcZf8ocxgIjUgHc9KZccvA_Yw,1945
|
4652
|
-
lino-25.
|
4653
|
-
lino-25.
|
4654
|
-
lino-25.
|
4655
|
-
lino-25.
|
4656
|
-
lino-25.
|
4652
|
+
lino-25.2.0.dist-info/METADATA,sha256=2neMBuGZIjjgExyCMaMWrx3LMHo9UAVl_urM7nCHE70,42534
|
4653
|
+
lino-25.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
4654
|
+
lino-25.2.0.dist-info/licenses/AUTHORS.rst,sha256=8VEm_G4HOmYEa4oi1nVoKKsdo4JanekEJCefWd2E8vk,981
|
4655
|
+
lino-25.2.0.dist-info/licenses/COPYING,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
4656
|
+
lino-25.2.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|