devpi-web 5.0.1__tar.gz → 5.1.0__tar.gz
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.
- devpi_web-5.1.0/.flake8 +3 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/CHANGELOG +40 -19
- {devpi_web-5.0.1 → devpi_web-5.1.0}/CHANGELOG.short.rst +40 -37
- {devpi_web-5.0.1 → devpi_web-5.1.0}/PKG-INFO +42 -38
- devpi_web-5.1.0/devpi_web/__init__.py +1 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/config.py +7 -3
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/description.py +7 -2
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/hookspecs.py +3 -3
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/indexing.py +44 -30
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/macros.py +15 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/main.py +17 -10
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/null_index.py +1 -3
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/index.pt +1 -14
- devpi_web-5.1.0/devpi_web/templates/index_bases.pt +32 -0
- devpi_web-5.1.0/devpi_web/templates/merge_info.pt +10 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/project.pt +2 -5
- devpi_web-5.1.0/devpi_web/templates/project_refresh.pt +1 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/version.pt +1 -4
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/views.py +152 -52
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/whoosh_index.py +83 -43
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/PKG-INFO +42 -38
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/SOURCES.txt +3 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/mypy.ini +7 -12
- {devpi_web-5.0.1 → devpi_web-5.1.0}/pyproject.toml +16 -21
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_indexing.py +2 -8
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_theme.py +3 -3
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views.py +121 -29
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views_misc.py +3 -12
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views_search.py +18 -11
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views_toxresults.py +7 -3
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_whoosh_index.py +75 -31
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tox.ini +6 -5
- devpi_web-5.0.1/.flake8 +0 -2
- devpi_web-5.0.1/devpi_web/__init__.py +0 -1
- {devpi_web-5.0.1 → devpi_web-5.1.0}/LICENSE +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/MANIFEST.in +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/README.rst +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/clear_index.py +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/compat.py +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/doczip.py +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/macroregistry.py +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/common.js +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/docview.js +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/favicon.ico +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/jquery-3.6.0.min.js +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/search.js +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/style.css +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/doc.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/error.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/favicon.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/footer.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/footer_versions.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/head.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/header.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/header_breadcrumbs.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/header_search.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/header_status.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/html_head_css.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/html_head_scripts.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/logo.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/notfound.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/query_docs.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/root.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/root_above_user_index_list.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/root_below_user_index_list.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/search.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/search_help.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/status.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/status_badge.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/toxresult.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/toxresults.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/user.pt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/dependency_links.txt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/entry_points.txt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/requires.txt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/top_level.txt +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/setup.cfg +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/conftest.py +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_macro_registry.py +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_main.py +0 -0
- {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views_docs.py +0 -0
devpi_web-5.1.0/.flake8
ADDED
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
.. towncrier release notes start
|
|
4
4
|
|
|
5
|
+
5.1.0 (2026-04-30)
|
|
6
|
+
==================
|
|
7
|
+
|
|
8
|
+
Features
|
|
9
|
+
--------
|
|
10
|
+
|
|
11
|
+
- With devpi-server 7.x information and warnings about inheritance from bases of an index are reported. This includes inheritance cycles, missing bases and how rules for merging project releases from bases are applied.
|
|
12
|
+
|
|
13
|
+
- Support upcoming devpi-server 7.0.0 release.
|
|
14
|
+
|
|
15
|
+
Other Changes
|
|
16
|
+
-------------
|
|
17
|
+
|
|
18
|
+
- index.pt: Moved bases and whitelist info to ``index_bases.pt`` macro.
|
|
19
|
+
|
|
20
|
+
- project.pt, version.pt: Moved whitelist info to ``merge_info.pt`` macro in preparation for changes in devpi-server 7.x.
|
|
21
|
+
|
|
22
|
+
- project.pt: Moved refresh button to ``project_refresh.pt`` macro.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
5.0.2 (2026-03-17)
|
|
26
|
+
==================
|
|
27
|
+
|
|
28
|
+
Bug Fixes
|
|
29
|
+
---------
|
|
30
|
+
|
|
31
|
+
- Prevent double indexing work on first start of freshly initialized/imported instance.
|
|
32
|
+
|
|
33
|
+
- Optimize preparation of mirror project data for indexing.
|
|
34
|
+
|
|
35
|
+
- Consistently use offline mode when indexing. This especially helps performance on startup.
|
|
36
|
+
|
|
37
|
+
- Skip redirect if an installer is detected which is configured without ``+simple`` in the URL.
|
|
38
|
+
|
|
39
|
+
Other Changes
|
|
40
|
+
-------------
|
|
41
|
+
|
|
42
|
+
- Support string timestamps for file history log entries from devpi-server 7.0.0.
|
|
43
|
+
|
|
44
|
+
|
|
5
45
|
5.0.1 (2025-06-15)
|
|
6
46
|
==================
|
|
7
47
|
|
|
@@ -11,7 +51,6 @@ Bug Fixes
|
|
|
11
51
|
- Fix traceback during unpacking of documentation in some cases.
|
|
12
52
|
|
|
13
53
|
|
|
14
|
-
|
|
15
54
|
5.0.0 (2025-06-12)
|
|
16
55
|
==================
|
|
17
56
|
|
|
@@ -24,15 +63,11 @@ Deprecations and Removals
|
|
|
24
63
|
|
|
25
64
|
- Future releases will more often require newer devpi-server than before.
|
|
26
65
|
|
|
27
|
-
|
|
28
|
-
|
|
29
66
|
Bug Fixes
|
|
30
67
|
---------
|
|
31
68
|
|
|
32
69
|
- Fix #930: remove remaining uses of unmaintained py library.
|
|
33
70
|
|
|
34
|
-
|
|
35
|
-
|
|
36
71
|
Other Changes
|
|
37
72
|
-------------
|
|
38
73
|
|
|
@@ -69,7 +104,6 @@ Other Changes
|
|
|
69
104
|
- macros.pt: Move ``versions`` macro to separate ``footer_versions.pt`` template.
|
|
70
105
|
|
|
71
106
|
|
|
72
|
-
|
|
73
107
|
4.3.0 (2024-10-16)
|
|
74
108
|
==================
|
|
75
109
|
|
|
@@ -79,7 +113,6 @@ Features
|
|
|
79
113
|
- index.pt, project.pt, version.pt: Fix #1062: Added a link to download the documentation as zip-file to the index, project and version view.
|
|
80
114
|
|
|
81
115
|
|
|
82
|
-
|
|
83
116
|
4.2.3 (2024-09-19)
|
|
84
117
|
==================
|
|
85
118
|
|
|
@@ -95,7 +128,6 @@ Bug Fixes
|
|
|
95
128
|
- Increase threshold for index status from 60 s to 300 s for warnings and from 300 s to 3600 s for fatal.
|
|
96
129
|
|
|
97
130
|
|
|
98
|
-
|
|
99
131
|
4.2.2 (2024-04-20)
|
|
100
132
|
==================
|
|
101
133
|
|
|
@@ -109,7 +141,6 @@ Bug Fixes
|
|
|
109
141
|
- Fix #970: overwrite fixed html/body heights like ``100%`` in documentation iframe content.
|
|
110
142
|
|
|
111
143
|
|
|
112
|
-
|
|
113
144
|
4.2.1 (2023-07-02)
|
|
114
145
|
==================
|
|
115
146
|
|
|
@@ -131,7 +162,6 @@ Features
|
|
|
131
162
|
|
|
132
163
|
- Add ``--keep-docs-packed`` option.
|
|
133
164
|
|
|
134
|
-
|
|
135
165
|
Bug Fixes
|
|
136
166
|
---------
|
|
137
167
|
|
|
@@ -151,7 +181,6 @@ Bug Fixes
|
|
|
151
181
|
4.1.1 (2022-09-28)
|
|
152
182
|
==================
|
|
153
183
|
|
|
154
|
-
|
|
155
184
|
Bug Fixes
|
|
156
185
|
---------
|
|
157
186
|
|
|
@@ -170,7 +199,6 @@ Features
|
|
|
170
199
|
|
|
171
200
|
- project.pt: add navigation links to original project page for mirrors and to "Simple page" of projects.
|
|
172
201
|
|
|
173
|
-
|
|
174
202
|
Bug Fixes
|
|
175
203
|
---------
|
|
176
204
|
|
|
@@ -216,7 +244,6 @@ Bug Fixes
|
|
|
216
244
|
|
|
217
245
|
- Use a lock file to prevent concurrent unpacking of documentation.
|
|
218
246
|
|
|
219
|
-
|
|
220
247
|
Other Changes
|
|
221
248
|
-------------
|
|
222
249
|
|
|
@@ -277,7 +304,6 @@ Deprecations and Removals
|
|
|
277
304
|
|
|
278
305
|
- Dropped support for Python 2.7.
|
|
279
306
|
|
|
280
|
-
|
|
281
307
|
Features
|
|
282
308
|
--------
|
|
283
309
|
|
|
@@ -317,7 +343,6 @@ Features
|
|
|
317
343
|
|
|
318
344
|
- Indexer backend options can now be specified as a dict in yaml config files.
|
|
319
345
|
|
|
320
|
-
|
|
321
346
|
Bug Fixes
|
|
322
347
|
---------
|
|
323
348
|
|
|
@@ -325,7 +350,6 @@ Bug Fixes
|
|
|
325
350
|
|
|
326
351
|
- Pass query string on to documentation iframe, this fixes Sphinx search among other things.
|
|
327
352
|
|
|
328
|
-
|
|
329
353
|
Other Changes
|
|
330
354
|
-------------
|
|
331
355
|
|
|
@@ -364,7 +388,6 @@ Features
|
|
|
364
388
|
|
|
365
389
|
- feature #193: adding support for using markdown in package descriptions.
|
|
366
390
|
|
|
367
|
-
|
|
368
391
|
Bug Fixes
|
|
369
392
|
---------
|
|
370
393
|
|
|
@@ -404,7 +427,6 @@ Features
|
|
|
404
427
|
|
|
405
428
|
- Use ``mirror_web_url_fmt`` in ``get_description`` for mirror indexes.
|
|
406
429
|
|
|
407
|
-
|
|
408
430
|
Bug Fixes
|
|
409
431
|
---------
|
|
410
432
|
|
|
@@ -629,7 +651,6 @@ Bug Fixes
|
|
|
629
651
|
- fix notfound-redirect when serving under an outside URL with a sub path
|
|
630
652
|
|
|
631
653
|
|
|
632
|
-
|
|
633
654
|
2.2.0
|
|
634
655
|
=====
|
|
635
656
|
|
|
@@ -9,6 +9,46 @@ Changelog
|
|
|
9
9
|
|
|
10
10
|
.. towncrier release notes start
|
|
11
11
|
|
|
12
|
+
5.1.0 (2026-04-30)
|
|
13
|
+
==================
|
|
14
|
+
|
|
15
|
+
Features
|
|
16
|
+
--------
|
|
17
|
+
|
|
18
|
+
- With devpi-server 7.x information and warnings about inheritance from bases of an index are reported. This includes inheritance cycles, missing bases and how rules for merging project releases from bases are applied.
|
|
19
|
+
|
|
20
|
+
- Support upcoming devpi-server 7.0.0 release.
|
|
21
|
+
|
|
22
|
+
Other Changes
|
|
23
|
+
-------------
|
|
24
|
+
|
|
25
|
+
- index.pt: Moved bases and whitelist info to ``index_bases.pt`` macro.
|
|
26
|
+
|
|
27
|
+
- project.pt, version.pt: Moved whitelist info to ``merge_info.pt`` macro in preparation for changes in devpi-server 7.x.
|
|
28
|
+
|
|
29
|
+
- project.pt: Moved refresh button to ``project_refresh.pt`` macro.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
5.0.2 (2026-03-17)
|
|
33
|
+
==================
|
|
34
|
+
|
|
35
|
+
Bug Fixes
|
|
36
|
+
---------
|
|
37
|
+
|
|
38
|
+
- Prevent double indexing work on first start of freshly initialized/imported instance.
|
|
39
|
+
|
|
40
|
+
- Optimize preparation of mirror project data for indexing.
|
|
41
|
+
|
|
42
|
+
- Consistently use offline mode when indexing. This especially helps performance on startup.
|
|
43
|
+
|
|
44
|
+
- Skip redirect if an installer is detected which is configured without ``+simple`` in the URL.
|
|
45
|
+
|
|
46
|
+
Other Changes
|
|
47
|
+
-------------
|
|
48
|
+
|
|
49
|
+
- Support string timestamps for file history log entries from devpi-server 7.0.0.
|
|
50
|
+
|
|
51
|
+
|
|
12
52
|
5.0.1 (2025-06-15)
|
|
13
53
|
==================
|
|
14
54
|
|
|
@@ -18,7 +58,6 @@ Bug Fixes
|
|
|
18
58
|
- Fix traceback during unpacking of documentation in some cases.
|
|
19
59
|
|
|
20
60
|
|
|
21
|
-
|
|
22
61
|
5.0.0 (2025-06-12)
|
|
23
62
|
==================
|
|
24
63
|
|
|
@@ -31,15 +70,11 @@ Deprecations and Removals
|
|
|
31
70
|
|
|
32
71
|
- Future releases will more often require newer devpi-server than before.
|
|
33
72
|
|
|
34
|
-
|
|
35
|
-
|
|
36
73
|
Bug Fixes
|
|
37
74
|
---------
|
|
38
75
|
|
|
39
76
|
- Fix #930: remove remaining uses of unmaintained py library.
|
|
40
77
|
|
|
41
|
-
|
|
42
|
-
|
|
43
78
|
Other Changes
|
|
44
79
|
-------------
|
|
45
80
|
|
|
@@ -76,7 +111,6 @@ Other Changes
|
|
|
76
111
|
- macros.pt: Move ``versions`` macro to separate ``footer_versions.pt`` template.
|
|
77
112
|
|
|
78
113
|
|
|
79
|
-
|
|
80
114
|
4.3.0 (2024-10-16)
|
|
81
115
|
==================
|
|
82
116
|
|
|
@@ -85,34 +119,3 @@ Features
|
|
|
85
119
|
|
|
86
120
|
- index.pt, project.pt, version.pt: Fix #1062: Added a link to download the documentation as zip-file to the index, project and version view.
|
|
87
121
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
4.2.3 (2024-09-19)
|
|
91
|
-
==================
|
|
92
|
-
|
|
93
|
-
Bug Fixes
|
|
94
|
-
---------
|
|
95
|
-
|
|
96
|
-
- Fix deprecation warnings from devpi-server 6.13.0.
|
|
97
|
-
|
|
98
|
-
- Lazily evaluate file information. Especially with devpi-postgresql this safes many database accesses on most pages.
|
|
99
|
-
|
|
100
|
-
- Guard against missing doczip files, which can happen on replicas during replication.
|
|
101
|
-
|
|
102
|
-
- Increase threshold for index status from 60 s to 300 s for warnings and from 300 s to 3600 s for fatal.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
4.2.2 (2024-04-20)
|
|
107
|
-
==================
|
|
108
|
-
|
|
109
|
-
Bug Fixes
|
|
110
|
-
---------
|
|
111
|
-
|
|
112
|
-
- style.css: Always let content be full browser height. This also gives more height with some documentation themes when content is short.
|
|
113
|
-
|
|
114
|
-
- style.css: set ``scrollbar-gutter: stable`` on ``body`` to prevent jumping content in documentation iframe.
|
|
115
|
-
|
|
116
|
-
- Fix #970: overwrite fixed html/body heights like ``100%`` in documentation iframe content.
|
|
117
|
-
|
|
118
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devpi-web
|
|
3
|
-
Version: 5.0
|
|
3
|
+
Version: 5.1.0
|
|
4
4
|
Summary: devpi-web: a web view for devpi-server
|
|
5
5
|
Maintainer-email: Florian Schulze <mail@pyfidelity.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
24
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
24
25
|
Classifier: Topic :: Internet :: WWW/HTTP
|
|
25
26
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
|
@@ -87,6 +88,46 @@ Changelog
|
|
|
87
88
|
|
|
88
89
|
.. towncrier release notes start
|
|
89
90
|
|
|
91
|
+
5.1.0 (2026-04-30)
|
|
92
|
+
==================
|
|
93
|
+
|
|
94
|
+
Features
|
|
95
|
+
--------
|
|
96
|
+
|
|
97
|
+
- With devpi-server 7.x information and warnings about inheritance from bases of an index are reported. This includes inheritance cycles, missing bases and how rules for merging project releases from bases are applied.
|
|
98
|
+
|
|
99
|
+
- Support upcoming devpi-server 7.0.0 release.
|
|
100
|
+
|
|
101
|
+
Other Changes
|
|
102
|
+
-------------
|
|
103
|
+
|
|
104
|
+
- index.pt: Moved bases and whitelist info to ``index_bases.pt`` macro.
|
|
105
|
+
|
|
106
|
+
- project.pt, version.pt: Moved whitelist info to ``merge_info.pt`` macro in preparation for changes in devpi-server 7.x.
|
|
107
|
+
|
|
108
|
+
- project.pt: Moved refresh button to ``project_refresh.pt`` macro.
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
5.0.2 (2026-03-17)
|
|
112
|
+
==================
|
|
113
|
+
|
|
114
|
+
Bug Fixes
|
|
115
|
+
---------
|
|
116
|
+
|
|
117
|
+
- Prevent double indexing work on first start of freshly initialized/imported instance.
|
|
118
|
+
|
|
119
|
+
- Optimize preparation of mirror project data for indexing.
|
|
120
|
+
|
|
121
|
+
- Consistently use offline mode when indexing. This especially helps performance on startup.
|
|
122
|
+
|
|
123
|
+
- Skip redirect if an installer is detected which is configured without ``+simple`` in the URL.
|
|
124
|
+
|
|
125
|
+
Other Changes
|
|
126
|
+
-------------
|
|
127
|
+
|
|
128
|
+
- Support string timestamps for file history log entries from devpi-server 7.0.0.
|
|
129
|
+
|
|
130
|
+
|
|
90
131
|
5.0.1 (2025-06-15)
|
|
91
132
|
==================
|
|
92
133
|
|
|
@@ -96,7 +137,6 @@ Bug Fixes
|
|
|
96
137
|
- Fix traceback during unpacking of documentation in some cases.
|
|
97
138
|
|
|
98
139
|
|
|
99
|
-
|
|
100
140
|
5.0.0 (2025-06-12)
|
|
101
141
|
==================
|
|
102
142
|
|
|
@@ -109,15 +149,11 @@ Deprecations and Removals
|
|
|
109
149
|
|
|
110
150
|
- Future releases will more often require newer devpi-server than before.
|
|
111
151
|
|
|
112
|
-
|
|
113
|
-
|
|
114
152
|
Bug Fixes
|
|
115
153
|
---------
|
|
116
154
|
|
|
117
155
|
- Fix #930: remove remaining uses of unmaintained py library.
|
|
118
156
|
|
|
119
|
-
|
|
120
|
-
|
|
121
157
|
Other Changes
|
|
122
158
|
-------------
|
|
123
159
|
|
|
@@ -154,7 +190,6 @@ Other Changes
|
|
|
154
190
|
- macros.pt: Move ``versions`` macro to separate ``footer_versions.pt`` template.
|
|
155
191
|
|
|
156
192
|
|
|
157
|
-
|
|
158
193
|
4.3.0 (2024-10-16)
|
|
159
194
|
==================
|
|
160
195
|
|
|
@@ -163,34 +198,3 @@ Features
|
|
|
163
198
|
|
|
164
199
|
- index.pt, project.pt, version.pt: Fix #1062: Added a link to download the documentation as zip-file to the index, project and version view.
|
|
165
200
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
4.2.3 (2024-09-19)
|
|
169
|
-
==================
|
|
170
|
-
|
|
171
|
-
Bug Fixes
|
|
172
|
-
---------
|
|
173
|
-
|
|
174
|
-
- Fix deprecation warnings from devpi-server 6.13.0.
|
|
175
|
-
|
|
176
|
-
- Lazily evaluate file information. Especially with devpi-postgresql this safes many database accesses on most pages.
|
|
177
|
-
|
|
178
|
-
- Guard against missing doczip files, which can happen on replicas during replication.
|
|
179
|
-
|
|
180
|
-
- Increase threshold for index status from 60 s to 300 s for warnings and from 300 s to 3600 s for fatal.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
4.2.2 (2024-04-20)
|
|
185
|
-
==================
|
|
186
|
-
|
|
187
|
-
Bug Fixes
|
|
188
|
-
---------
|
|
189
|
-
|
|
190
|
-
- style.css: Always let content be full browser height. This also gives more height with some documentation themes when content is short.
|
|
191
|
-
|
|
192
|
-
- style.css: set ``scrollbar-gutter: stable`` on ``body`` to prevent jumping content in documentation iframe.
|
|
193
|
-
|
|
194
|
-
- Fix #970: overwrite fixed html/body heights like ``100%`` in documentation iframe content.
|
|
195
|
-
|
|
196
|
-
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "5.1.0"
|
|
@@ -4,7 +4,7 @@ from pluggy import PluginManager
|
|
|
4
4
|
|
|
5
5
|
def get_pluginmanager(config, load_entry_points=True):
|
|
6
6
|
# lookup cached value
|
|
7
|
-
pm = getattr(config,
|
|
7
|
+
pm = getattr(config, "devpiweb_pluginmanager", None)
|
|
8
8
|
if pm is not None:
|
|
9
9
|
return pm
|
|
10
10
|
pm = PluginManager("devpiweb")
|
|
@@ -19,6 +19,10 @@ def get_pluginmanager(config, load_entry_points=True):
|
|
|
19
19
|
|
|
20
20
|
def add_indexer_backend_option(parser, pluginmanager=None):
|
|
21
21
|
parser.addoption(
|
|
22
|
-
"--indexer-backend",
|
|
22
|
+
"--indexer-backend",
|
|
23
|
+
type=str,
|
|
24
|
+
metavar="NAME",
|
|
25
|
+
default="whoosh",
|
|
23
26
|
action="store",
|
|
24
|
-
help="the indexer backend to use"
|
|
27
|
+
help="the indexer backend to use",
|
|
28
|
+
)
|
|
@@ -95,12 +95,17 @@ class DescriptionRenderer:
|
|
|
95
95
|
|
|
96
96
|
:return: boolean
|
|
97
97
|
"""
|
|
98
|
-
return
|
|
98
|
+
return (
|
|
99
|
+
self.stage.ixconfig["type"] in {"mirror", "remote"}
|
|
99
100
|
and self._get_mirror_web_url_fmt() is not None
|
|
101
|
+
)
|
|
100
102
|
|
|
101
103
|
def _get_mirror_web_url_fmt(self):
|
|
102
104
|
""" Fetch the remote's source url.
|
|
103
105
|
|
|
104
106
|
:return: string
|
|
105
107
|
"""
|
|
106
|
-
|
|
108
|
+
ixconfig = self.stage.ixconfig
|
|
109
|
+
if "remote_web_url_fmt" in ixconfig:
|
|
110
|
+
return ixconfig["remote_web_url_fmt"]
|
|
111
|
+
return ixconfig.get("mirror_web_url_fmt")
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from pluggy import HookspecMarker
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
hookspec = HookspecMarker("devpiweb")
|
|
4
5
|
|
|
5
6
|
|
|
@@ -14,7 +15,7 @@ def devpiweb_get_status_info(request):
|
|
|
14
15
|
|
|
15
16
|
@hookspec
|
|
16
17
|
def devpiweb_indexer_backend():
|
|
17
|
-
"""
|
|
18
|
+
"""return dict containing indexer backend info.
|
|
18
19
|
|
|
19
20
|
The following keys are defined:
|
|
20
21
|
|
|
@@ -26,5 +27,4 @@ def devpiweb_indexer_backend():
|
|
|
26
27
|
|
|
27
28
|
@hookspec
|
|
28
29
|
def devpiweb_modify_preprocess_project_result(project, result):
|
|
29
|
-
"""
|
|
30
|
-
"""
|
|
30
|
+
"""allows to modify the ``result`` dictionary used for indexing."""
|
|
@@ -1,20 +1,27 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from attrs import define
|
|
1
4
|
from collections.abc import Mapping
|
|
2
|
-
from devpi_common.types import ensure_unicode
|
|
3
5
|
from devpi_common.metadata import get_sorted_versions
|
|
6
|
+
from devpi_common.types import ensure_unicode
|
|
4
7
|
from devpi_common.validation import normalize_name
|
|
5
8
|
from devpi_web.config import get_pluginmanager
|
|
6
9
|
from devpi_web.doczip import Docs
|
|
7
|
-
import
|
|
10
|
+
from typing import TYPE_CHECKING
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from typing import Any
|
|
8
15
|
|
|
9
16
|
|
|
10
17
|
def is_project_cached(stage, project):
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
return not (
|
|
19
|
+
stage.ixconfig["type"] in {"mirror", "remote"}
|
|
20
|
+
and not stage.is_project_cached(project)
|
|
21
|
+
)
|
|
15
22
|
|
|
16
23
|
|
|
17
|
-
def preprocess_project(project):
|
|
24
|
+
def preprocess_project(project: ProjectIndexingInfo) -> dict | None:
|
|
18
25
|
stage = project.stage
|
|
19
26
|
pm = get_pluginmanager(stage.xom.config)
|
|
20
27
|
name = normalize_name(project.name)
|
|
@@ -25,15 +32,19 @@ def preprocess_project(project):
|
|
|
25
32
|
user, index = stage.name.split('/')
|
|
26
33
|
user = ensure_unicode(user)
|
|
27
34
|
index = ensure_unicode(index)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
result: dict[str, object]
|
|
36
|
+
if stage.ixconfig["type"] in {"mirror", "remote"}:
|
|
37
|
+
stage.offline = True
|
|
38
|
+
if not stage.is_project_cached(name):
|
|
39
|
+
# only index basic info for projects with no downloads
|
|
40
|
+
result = dict(name=project.name, user=user, index=index)
|
|
41
|
+
pm.hook.devpiweb_modify_preprocess_project_result(
|
|
42
|
+
project=project, result=result
|
|
43
|
+
)
|
|
44
|
+
return result
|
|
45
|
+
elif not stage.has_project_perstage(name):
|
|
35
46
|
# project doesn't exist anymore
|
|
36
|
-
return
|
|
47
|
+
return None
|
|
37
48
|
# metadata_keys is only available on private indexes
|
|
38
49
|
setuptools_metadata = frozenset(getattr(stage, 'metadata_keys', ()))
|
|
39
50
|
versions = get_sorted_versions(stage.list_versions_perstage(name))
|
|
@@ -49,8 +60,7 @@ def preprocess_project(project):
|
|
|
49
60
|
result['doc_version'] = version
|
|
50
61
|
result['+doczip'] = docs
|
|
51
62
|
break
|
|
52
|
-
|
|
53
|
-
assert '+doczip' not in result
|
|
63
|
+
assert "+doczip" not in result
|
|
54
64
|
|
|
55
65
|
result[u'user'] = user
|
|
56
66
|
result[u'index'] = index
|
|
@@ -64,46 +74,50 @@ def preprocess_project(project):
|
|
|
64
74
|
return result
|
|
65
75
|
|
|
66
76
|
|
|
67
|
-
@
|
|
68
|
-
class ProjectIndexingInfo
|
|
69
|
-
stage
|
|
70
|
-
name
|
|
77
|
+
@define
|
|
78
|
+
class ProjectIndexingInfo:
|
|
79
|
+
stage: Any
|
|
80
|
+
name: str
|
|
81
|
+
num_names: int
|
|
71
82
|
|
|
72
83
|
@property
|
|
73
|
-
def indexname(self):
|
|
84
|
+
def indexname(self) -> str:
|
|
74
85
|
return self.stage.name
|
|
75
86
|
|
|
76
87
|
@property
|
|
77
|
-
def is_from_mirror(self):
|
|
78
|
-
return self.stage.ixconfig[
|
|
88
|
+
def is_from_mirror(self) -> bool:
|
|
89
|
+
return self.stage.ixconfig["type"] in {"mirror", "remote"}
|
|
79
90
|
|
|
80
91
|
|
|
81
92
|
def iter_indexes(xom):
|
|
82
93
|
mirrors = []
|
|
83
94
|
for user in xom.model.get_userlist():
|
|
84
95
|
username = ensure_unicode(user.name)
|
|
85
|
-
user_info = user.get(
|
|
96
|
+
user_info = user.get()
|
|
86
97
|
for index, index_info in user_info.get('indexes', {}).items():
|
|
87
98
|
index = ensure_unicode(index)
|
|
88
|
-
if index_info[
|
|
99
|
+
if index_info["type"] in {"mirror", "remote"}:
|
|
89
100
|
mirrors.append((username, index))
|
|
90
101
|
else:
|
|
91
102
|
yield (username, index)
|
|
92
103
|
yield from mirrors
|
|
93
104
|
|
|
94
105
|
|
|
95
|
-
def iter_projects(xom):
|
|
106
|
+
def iter_projects(xom, *, offline=True):
|
|
96
107
|
for username, index in iter_indexes(xom):
|
|
97
108
|
stage = xom.model.getstage(username, index)
|
|
98
109
|
if stage is None: # this is async, so the stage may be gone
|
|
99
110
|
continue
|
|
100
111
|
names = stage.list_projects_perstage()
|
|
112
|
+
# only go offline after we got the projects list
|
|
113
|
+
if stage.ixconfig["type"] in {"mirror", "remote"}:
|
|
114
|
+
stage.offline = offline
|
|
101
115
|
if isinstance(names, Mapping):
|
|
102
116
|
# since devpi-server 6.6.0 mirrors return a mapping where
|
|
103
117
|
# the un-normalized names are in the values
|
|
104
118
|
names = names.values()
|
|
119
|
+
num_names = len(names)
|
|
105
120
|
for name in names:
|
|
106
|
-
name = ensure_unicode(name)
|
|
107
121
|
yield ProjectIndexingInfo(
|
|
108
|
-
stage=stage,
|
|
109
|
-
|
|
122
|
+
stage=stage, name=ensure_unicode(name), num_names=num_names
|
|
123
|
+
)
|
|
@@ -80,11 +80,26 @@ def html_head_scripts(request):
|
|
|
80
80
|
return dict(scripts=scripts)
|
|
81
81
|
|
|
82
82
|
|
|
83
|
+
@macro_config(template="templates/index_bases.pt")
|
|
84
|
+
def index_bases(request): # noqa: ARG001
|
|
85
|
+
return dict()
|
|
86
|
+
|
|
87
|
+
|
|
83
88
|
@macro_config(template="templates/logo.pt", groups="main_header_top")
|
|
84
89
|
def logo(request): # noqa: ARG001
|
|
85
90
|
return dict()
|
|
86
91
|
|
|
87
92
|
|
|
93
|
+
@macro_config(template="templates/merge_info.pt")
|
|
94
|
+
def merge_info(request): # noqa: ARG001
|
|
95
|
+
return dict()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@macro_config(template="templates/project_refresh.pt")
|
|
99
|
+
def project_refresh(request): # noqa: ARG001
|
|
100
|
+
return dict()
|
|
101
|
+
|
|
102
|
+
|
|
88
103
|
@macro_config(template="templates/query_docs.pt")
|
|
89
104
|
def query_doc(request):
|
|
90
105
|
query_docs_html = None
|