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.
Files changed (81) hide show
  1. devpi_web-5.1.0/.flake8 +3 -0
  2. {devpi_web-5.0.1 → devpi_web-5.1.0}/CHANGELOG +40 -19
  3. {devpi_web-5.0.1 → devpi_web-5.1.0}/CHANGELOG.short.rst +40 -37
  4. {devpi_web-5.0.1 → devpi_web-5.1.0}/PKG-INFO +42 -38
  5. devpi_web-5.1.0/devpi_web/__init__.py +1 -0
  6. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/config.py +7 -3
  7. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/description.py +7 -2
  8. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/hookspecs.py +3 -3
  9. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/indexing.py +44 -30
  10. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/macros.py +15 -0
  11. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/main.py +17 -10
  12. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/null_index.py +1 -3
  13. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/index.pt +1 -14
  14. devpi_web-5.1.0/devpi_web/templates/index_bases.pt +32 -0
  15. devpi_web-5.1.0/devpi_web/templates/merge_info.pt +10 -0
  16. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/project.pt +2 -5
  17. devpi_web-5.1.0/devpi_web/templates/project_refresh.pt +1 -0
  18. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/version.pt +1 -4
  19. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/views.py +152 -52
  20. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/whoosh_index.py +83 -43
  21. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/PKG-INFO +42 -38
  22. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/SOURCES.txt +3 -0
  23. {devpi_web-5.0.1 → devpi_web-5.1.0}/mypy.ini +7 -12
  24. {devpi_web-5.0.1 → devpi_web-5.1.0}/pyproject.toml +16 -21
  25. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_indexing.py +2 -8
  26. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_theme.py +3 -3
  27. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views.py +121 -29
  28. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views_misc.py +3 -12
  29. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views_search.py +18 -11
  30. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views_toxresults.py +7 -3
  31. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_whoosh_index.py +75 -31
  32. {devpi_web-5.0.1 → devpi_web-5.1.0}/tox.ini +6 -5
  33. devpi_web-5.0.1/.flake8 +0 -2
  34. devpi_web-5.0.1/devpi_web/__init__.py +0 -1
  35. {devpi_web-5.0.1 → devpi_web-5.1.0}/LICENSE +0 -0
  36. {devpi_web-5.0.1 → devpi_web-5.1.0}/MANIFEST.in +0 -0
  37. {devpi_web-5.0.1 → devpi_web-5.1.0}/README.rst +0 -0
  38. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/clear_index.py +0 -0
  39. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/compat.py +0 -0
  40. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/doczip.py +0 -0
  41. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/macroregistry.py +0 -0
  42. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/common.js +0 -0
  43. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/docview.js +0 -0
  44. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/favicon.ico +0 -0
  45. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/jquery-3.6.0.min.js +0 -0
  46. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/search.js +0 -0
  47. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/static/style.css +0 -0
  48. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/doc.pt +0 -0
  49. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/error.pt +0 -0
  50. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/favicon.pt +0 -0
  51. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/footer.pt +0 -0
  52. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/footer_versions.pt +0 -0
  53. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/head.pt +0 -0
  54. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/header.pt +0 -0
  55. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/header_breadcrumbs.pt +0 -0
  56. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/header_search.pt +0 -0
  57. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/header_status.pt +0 -0
  58. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/html_head_css.pt +0 -0
  59. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/html_head_scripts.pt +0 -0
  60. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/logo.pt +0 -0
  61. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/notfound.pt +0 -0
  62. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/query_docs.pt +0 -0
  63. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/root.pt +0 -0
  64. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/root_above_user_index_list.pt +0 -0
  65. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/root_below_user_index_list.pt +0 -0
  66. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/search.pt +0 -0
  67. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/search_help.pt +0 -0
  68. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/status.pt +0 -0
  69. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/status_badge.pt +0 -0
  70. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/toxresult.pt +0 -0
  71. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/toxresults.pt +0 -0
  72. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web/templates/user.pt +0 -0
  73. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/dependency_links.txt +0 -0
  74. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/entry_points.txt +0 -0
  75. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/requires.txt +0 -0
  76. {devpi_web-5.0.1 → devpi_web-5.1.0}/devpi_web.egg-info/top_level.txt +0 -0
  77. {devpi_web-5.0.1 → devpi_web-5.1.0}/setup.cfg +0 -0
  78. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/conftest.py +0 -0
  79. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_macro_registry.py +0 -0
  80. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_main.py +0 -0
  81. {devpi_web-5.0.1 → devpi_web-5.1.0}/tests/test_views_docs.py +0 -0
@@ -0,0 +1,3 @@
1
+ [flake8]
2
+ # E203 is ignored because we enforce ruff format which contradicts it
3
+ ignore = E203,E501,E704,E741,W503
@@ -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.1
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, 'devpiweb_pluginmanager', None)
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", type=str, metavar="NAME", default="whoosh",
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 self.stage.ixconfig['type'] == 'mirror' \
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
- return self.stage.ixconfig.get('mirror_web_url_fmt')
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
- """ return dict containing indexer backend info.
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
- """ allows to modify the ``result`` dictionary used for indexing.
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 attr
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
- if stage.ixconfig['type'] == 'mirror':
12
- if not stage.is_project_cached(project):
13
- return False
14
- return True
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
- if not is_project_cached(stage, name):
29
- result = dict(name=project.name, user=user, index=index)
30
- pm.hook.devpiweb_modify_preprocess_project_result(
31
- project=project, result=result)
32
- return result
33
- stage.offline = True
34
- if not stage.has_project_perstage(name):
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
- else:
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
- @attr.s(slots=True)
68
- class ProjectIndexingInfo(object):
69
- stage = attr.ib()
70
- name = attr.ib(type=str)
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['type'] == 'mirror'
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(user)
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['type'] == 'mirror':
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
- name=name)
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