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