devpi-web 5.0.2__tar.gz → 5.1.1__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.0.2 → devpi_web-5.1.1}/CHANGELOG +29 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/CHANGELOG.short.rst +29 -24
- {devpi_web-5.0.2 → devpi_web-5.1.1}/PKG-INFO +30 -25
- devpi_web-5.1.1/devpi_web/__init__.py +1 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/config.py +7 -3
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/description.py +7 -2
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/hookspecs.py +3 -3
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/indexing.py +9 -9
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/macros.py +15 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/main.py +20 -6
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/index.pt +1 -14
- devpi_web-5.1.1/devpi_web/templates/index_bases.pt +32 -0
- devpi_web-5.1.1/devpi_web/templates/merge_info.pt +10 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/project.pt +2 -5
- devpi_web-5.1.1/devpi_web/templates/project_refresh.pt +1 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/version.pt +1 -4
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/views.py +118 -38
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web.egg-info/PKG-INFO +30 -25
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web.egg-info/SOURCES.txt +3 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/pyproject.toml +0 -9
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_indexing.py +0 -6
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_theme.py +3 -3
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_views.py +121 -24
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_whoosh_index.py +33 -4
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tox.ini +1 -1
- devpi_web-5.0.2/devpi_web/__init__.py +0 -1
- {devpi_web-5.0.2 → devpi_web-5.1.1}/.flake8 +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/LICENSE +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/MANIFEST.in +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/README.rst +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/clear_index.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/compat.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/doczip.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/macroregistry.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/null_index.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/static/common.js +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/static/docview.js +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/static/favicon.ico +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/static/jquery-3.6.0.min.js +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/static/search.js +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/static/style.css +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/doc.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/error.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/favicon.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/footer.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/footer_versions.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/head.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/header.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/header_breadcrumbs.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/header_search.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/header_status.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/html_head_css.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/html_head_scripts.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/logo.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/notfound.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/query_docs.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/root.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/root_above_user_index_list.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/root_below_user_index_list.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/search.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/search_help.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/status.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/status_badge.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/toxresult.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/toxresults.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/templates/user.pt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web/whoosh_index.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web.egg-info/dependency_links.txt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web.egg-info/entry_points.txt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web.egg-info/requires.txt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/devpi_web.egg-info/top_level.txt +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/mypy.ini +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/setup.cfg +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/conftest.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_macro_registry.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_main.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_views_docs.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_views_misc.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_views_search.py +0 -0
- {devpi_web-5.0.2 → devpi_web-5.1.1}/tests/test_views_toxresults.py +0 -0
|
@@ -2,6 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
.. towncrier release notes start
|
|
4
4
|
|
|
5
|
+
5.1.1 (2026-07-02)
|
|
6
|
+
==================
|
|
7
|
+
|
|
8
|
+
Bug Fixes
|
|
9
|
+
---------
|
|
10
|
+
|
|
11
|
+
- Fix compatibility with devpi-server 7.x.
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
5.1.0 (2026-04-30)
|
|
15
|
+
==================
|
|
16
|
+
|
|
17
|
+
Features
|
|
18
|
+
--------
|
|
19
|
+
|
|
20
|
+
- 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.
|
|
21
|
+
|
|
22
|
+
- Support upcoming devpi-server 7.0.0 release.
|
|
23
|
+
|
|
24
|
+
Other Changes
|
|
25
|
+
-------------
|
|
26
|
+
|
|
27
|
+
- index.pt: Moved bases and whitelist info to ``index_bases.pt`` macro.
|
|
28
|
+
|
|
29
|
+
- project.pt, version.pt: Moved whitelist info to ``merge_info.pt`` macro in preparation for changes in devpi-server 7.x.
|
|
30
|
+
|
|
31
|
+
- project.pt: Moved refresh button to ``project_refresh.pt`` macro.
|
|
32
|
+
|
|
33
|
+
|
|
5
34
|
5.0.2 (2026-03-17)
|
|
6
35
|
==================
|
|
7
36
|
|
|
@@ -9,6 +9,35 @@ Changelog
|
|
|
9
9
|
|
|
10
10
|
.. towncrier release notes start
|
|
11
11
|
|
|
12
|
+
5.1.1 (2026-07-02)
|
|
13
|
+
==================
|
|
14
|
+
|
|
15
|
+
Bug Fixes
|
|
16
|
+
---------
|
|
17
|
+
|
|
18
|
+
- Fix compatibility with devpi-server 7.x.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
5.1.0 (2026-04-30)
|
|
22
|
+
==================
|
|
23
|
+
|
|
24
|
+
Features
|
|
25
|
+
--------
|
|
26
|
+
|
|
27
|
+
- 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.
|
|
28
|
+
|
|
29
|
+
- Support upcoming devpi-server 7.0.0 release.
|
|
30
|
+
|
|
31
|
+
Other Changes
|
|
32
|
+
-------------
|
|
33
|
+
|
|
34
|
+
- index.pt: Moved bases and whitelist info to ``index_bases.pt`` macro.
|
|
35
|
+
|
|
36
|
+
- project.pt, version.pt: Moved whitelist info to ``merge_info.pt`` macro in preparation for changes in devpi-server 7.x.
|
|
37
|
+
|
|
38
|
+
- project.pt: Moved refresh button to ``project_refresh.pt`` macro.
|
|
39
|
+
|
|
40
|
+
|
|
12
41
|
5.0.2 (2026-03-17)
|
|
13
42
|
==================
|
|
14
43
|
|
|
@@ -90,27 +119,3 @@ Other Changes
|
|
|
90
119
|
|
|
91
120
|
- macros.pt: Move ``versions`` macro to separate ``footer_versions.pt`` template.
|
|
92
121
|
|
|
93
|
-
|
|
94
|
-
4.3.0 (2024-10-16)
|
|
95
|
-
==================
|
|
96
|
-
|
|
97
|
-
Features
|
|
98
|
-
--------
|
|
99
|
-
|
|
100
|
-
- 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.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
4.2.3 (2024-09-19)
|
|
104
|
-
==================
|
|
105
|
-
|
|
106
|
-
Bug Fixes
|
|
107
|
-
---------
|
|
108
|
-
|
|
109
|
-
- Fix deprecation warnings from devpi-server 6.13.0.
|
|
110
|
-
|
|
111
|
-
- Lazily evaluate file information. Especially with devpi-postgresql this safes many database accesses on most pages.
|
|
112
|
-
|
|
113
|
-
- Guard against missing doczip files, which can happen on replicas during replication.
|
|
114
|
-
|
|
115
|
-
- Increase threshold for index status from 60 s to 300 s for warnings and from 300 s to 3600 s for fatal.
|
|
116
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devpi-web
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.1.1
|
|
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
|
|
@@ -88,6 +88,35 @@ Changelog
|
|
|
88
88
|
|
|
89
89
|
.. towncrier release notes start
|
|
90
90
|
|
|
91
|
+
5.1.1 (2026-07-02)
|
|
92
|
+
==================
|
|
93
|
+
|
|
94
|
+
Bug Fixes
|
|
95
|
+
---------
|
|
96
|
+
|
|
97
|
+
- Fix compatibility with devpi-server 7.x.
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
5.1.0 (2026-04-30)
|
|
101
|
+
==================
|
|
102
|
+
|
|
103
|
+
Features
|
|
104
|
+
--------
|
|
105
|
+
|
|
106
|
+
- 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.
|
|
107
|
+
|
|
108
|
+
- Support upcoming devpi-server 7.0.0 release.
|
|
109
|
+
|
|
110
|
+
Other Changes
|
|
111
|
+
-------------
|
|
112
|
+
|
|
113
|
+
- index.pt: Moved bases and whitelist info to ``index_bases.pt`` macro.
|
|
114
|
+
|
|
115
|
+
- project.pt, version.pt: Moved whitelist info to ``merge_info.pt`` macro in preparation for changes in devpi-server 7.x.
|
|
116
|
+
|
|
117
|
+
- project.pt: Moved refresh button to ``project_refresh.pt`` macro.
|
|
118
|
+
|
|
119
|
+
|
|
91
120
|
5.0.2 (2026-03-17)
|
|
92
121
|
==================
|
|
93
122
|
|
|
@@ -169,27 +198,3 @@ Other Changes
|
|
|
169
198
|
|
|
170
199
|
- macros.pt: Move ``versions`` macro to separate ``footer_versions.pt`` template.
|
|
171
200
|
|
|
172
|
-
|
|
173
|
-
4.3.0 (2024-10-16)
|
|
174
|
-
==================
|
|
175
|
-
|
|
176
|
-
Features
|
|
177
|
-
--------
|
|
178
|
-
|
|
179
|
-
- 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.
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
4.2.3 (2024-09-19)
|
|
183
|
-
==================
|
|
184
|
-
|
|
185
|
-
Bug Fixes
|
|
186
|
-
---------
|
|
187
|
-
|
|
188
|
-
- Fix deprecation warnings from devpi-server 6.13.0.
|
|
189
|
-
|
|
190
|
-
- Lazily evaluate file information. Especially with devpi-postgresql this safes many database accesses on most pages.
|
|
191
|
-
|
|
192
|
-
- Guard against missing doczip files, which can happen on replicas during replication.
|
|
193
|
-
|
|
194
|
-
- Increase threshold for index status from 60 s to 300 s for warnings and from 300 s to 3600 s for fatal.
|
|
195
|
-
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "5.1.1"
|
|
@@ -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."""
|
|
@@ -15,10 +15,10 @@ if TYPE_CHECKING:
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
def is_project_cached(stage, project):
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
return not (
|
|
19
|
+
stage.ixconfig["type"] in {"mirror", "remote"}
|
|
20
|
+
and not stage.is_project_cached(project)
|
|
21
|
+
)
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def preprocess_project(project: ProjectIndexingInfo) -> dict | None:
|
|
@@ -33,7 +33,7 @@ def preprocess_project(project: ProjectIndexingInfo) -> dict | None:
|
|
|
33
33
|
user = ensure_unicode(user)
|
|
34
34
|
index = ensure_unicode(index)
|
|
35
35
|
result: dict[str, object]
|
|
36
|
-
if stage.ixconfig["type"]
|
|
36
|
+
if stage.ixconfig["type"] in {"mirror", "remote"}:
|
|
37
37
|
stage.offline = True
|
|
38
38
|
if not stage.is_project_cached(name):
|
|
39
39
|
# only index basic info for projects with no downloads
|
|
@@ -86,17 +86,17 @@ class ProjectIndexingInfo:
|
|
|
86
86
|
|
|
87
87
|
@property
|
|
88
88
|
def is_from_mirror(self) -> bool:
|
|
89
|
-
return self.stage.ixconfig[
|
|
89
|
+
return self.stage.ixconfig["type"] in {"mirror", "remote"}
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
def iter_indexes(xom):
|
|
93
93
|
mirrors = []
|
|
94
94
|
for user in xom.model.get_userlist():
|
|
95
95
|
username = ensure_unicode(user.name)
|
|
96
|
-
user_info = user.get(
|
|
96
|
+
user_info = user.get()
|
|
97
97
|
for index, index_info in user_info.get('indexes', {}).items():
|
|
98
98
|
index = ensure_unicode(index)
|
|
99
|
-
if index_info[
|
|
99
|
+
if index_info["type"] in {"mirror", "remote"}:
|
|
100
100
|
mirrors.append((username, index))
|
|
101
101
|
else:
|
|
102
102
|
yield (username, index)
|
|
@@ -110,7 +110,7 @@ def iter_projects(xom, *, offline=True):
|
|
|
110
110
|
continue
|
|
111
111
|
names = stage.list_projects_perstage()
|
|
112
112
|
# only go offline after we got the projects list
|
|
113
|
-
if stage.ixconfig["type"]
|
|
113
|
+
if stage.ixconfig["type"] in {"mirror", "remote"}:
|
|
114
114
|
stage.offline = offline
|
|
115
115
|
if isinstance(names, Mapping):
|
|
116
116
|
# since devpi-server 6.6.0 mirrors return a mapping where
|
|
@@ -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
|
|
@@ -272,8 +272,13 @@ def devpiserver_add_parser_options(parser):
|
|
|
272
272
|
add_indexer_backend_option(indexing)
|
|
273
273
|
|
|
274
274
|
|
|
275
|
-
@devpiserver_hookimpl
|
|
275
|
+
@devpiserver_hookimpl(optionalhook=True)
|
|
276
276
|
def devpiserver_mirror_initialnames(stage, projectnames):
|
|
277
|
+
devpiserver_remote_initialnames(stage, projectnames)
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
@devpiserver_hookimpl(optionalhook=True)
|
|
281
|
+
def devpiserver_remote_initialnames(stage, projectnames):
|
|
277
282
|
ix = get_indexer(stage.xom)
|
|
278
283
|
threadlog.info(
|
|
279
284
|
"indexing '%s' mirror with %s projects",
|
|
@@ -299,7 +304,7 @@ def devpiserver_stage_created(stage):
|
|
|
299
304
|
if stage is None:
|
|
300
305
|
# the stage was deleted
|
|
301
306
|
return
|
|
302
|
-
if stage.ixconfig["type"]
|
|
307
|
+
if stage.ixconfig["type"] in {"mirror", "remote"}:
|
|
303
308
|
threadlog.info("triggering load of initial projectnames for %s", stage.name)
|
|
304
309
|
stage.list_projects_perstage()
|
|
305
310
|
|
|
@@ -341,7 +346,7 @@ def devpiserver_on_changed_versiondata(stage, project, version, metadata):
|
|
|
341
346
|
if stage is None:
|
|
342
347
|
return
|
|
343
348
|
if not metadata:
|
|
344
|
-
if stage.ixconfig["type"]
|
|
349
|
+
if stage.ixconfig["type"] in {"mirror", "remote"}:
|
|
345
350
|
stage.offline = True
|
|
346
351
|
if is_project_cached(stage, project) and not stage.has_project_perstage(project):
|
|
347
352
|
delete_project(stage, project)
|
|
@@ -367,10 +372,19 @@ def devpiserver_on_remove_file(stage, relpath):
|
|
|
367
372
|
|
|
368
373
|
|
|
369
374
|
@devpiserver_hookimpl(optionalhook=True)
|
|
370
|
-
def devpiserver_on_replicated_file(
|
|
371
|
-
|
|
375
|
+
def devpiserver_on_replicated_file(
|
|
376
|
+
stage,
|
|
377
|
+
project,
|
|
378
|
+
version, # noqa: ARG001 - API
|
|
379
|
+
link,
|
|
380
|
+
serial, # noqa: ARG001 - API
|
|
381
|
+
back_serial, # noqa: ARG001 - API
|
|
382
|
+
is_from_mirror=None,
|
|
383
|
+
is_from_remote=None,
|
|
384
|
+
):
|
|
385
|
+
if is_from_mirror or is_from_remote:
|
|
372
386
|
return
|
|
373
|
-
|
|
387
|
+
if link.rel == "doczip":
|
|
374
388
|
index_project(stage, project)
|
|
375
389
|
|
|
376
390
|
|
|
@@ -76,20 +76,7 @@
|
|
|
76
76
|
</dl>
|
|
77
77
|
</tal:permissions>
|
|
78
78
|
|
|
79
|
-
<
|
|
80
|
-
<h2>inherited bases</h2>
|
|
81
|
-
<ul>
|
|
82
|
-
<li tal:repeat="base bases">
|
|
83
|
-
<a href="${base.url}">${base.title}</a> (<a href="${base.simple_url}">simple</a>)
|
|
84
|
-
</li>
|
|
85
|
-
</ul>
|
|
86
|
-
</tal:bases>
|
|
87
|
-
|
|
88
|
-
<h2>whitelisted packages</h2>
|
|
89
|
-
<ul class="whitelist" tal:condition="whitelist">
|
|
90
|
-
<li tal:repeat="name whitelist">${name}</li>
|
|
91
|
-
</ul>
|
|
92
|
-
<p tal:condition="not whitelist">No packages whitelisted.</p>
|
|
79
|
+
<metal:indexbases use-macro="request.macros['index_bases']" />
|
|
93
80
|
</div>
|
|
94
81
|
<metal:footer use-macro="request.macros['footer']" />
|
|
95
82
|
</body>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<tal:bases condition="bases">
|
|
2
|
+
<h2>inherited bases</h2>
|
|
3
|
+
<ul>
|
|
4
|
+
<li tal:repeat="base bases">
|
|
5
|
+
<a href="${base.url}">${base.title}</a> (<a href="${base.simple_url}">simple</a>)
|
|
6
|
+
</li>
|
|
7
|
+
</ul>
|
|
8
|
+
</tal:bases>
|
|
9
|
+
|
|
10
|
+
<tal:noinheritanceinfo condition="inheritance_info is None">
|
|
11
|
+
<h2>whitelisted packages</h2>
|
|
12
|
+
<ul class="whitelist" tal:condition="whitelist">
|
|
13
|
+
<li tal:repeat="name whitelist">${name}</li>
|
|
14
|
+
</ul>
|
|
15
|
+
<p tal:condition="not whitelist">No packages whitelisted.</p>
|
|
16
|
+
</tal:noinheritanceinfo>
|
|
17
|
+
|
|
18
|
+
<tal:inheritanceinfo condition="inheritance_info is not None">
|
|
19
|
+
<script id="inheritance-info" type="application/json">${inheritance_info}</script>
|
|
20
|
+
<h2>inheritance information</h2>
|
|
21
|
+
<div class="infonote" tal:condition="inheritance_info.reasons">
|
|
22
|
+
<ul>
|
|
23
|
+
<li tal:repeat="reason inheritance_info.reasons">${reason}</li>
|
|
24
|
+
</ul>
|
|
25
|
+
</div>
|
|
26
|
+
<dl tal:condition="project_inheritance_rules is not None">
|
|
27
|
+
<dt><code>project_inheritance_rules</code></dt>
|
|
28
|
+
<dd><ul>
|
|
29
|
+
<li tal:repeat="rule project_inheritance_rules"><code>${rule}</code></li>
|
|
30
|
+
</ul></dd>
|
|
31
|
+
</dl>
|
|
32
|
+
</tal:inheritanceinfo>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<p class="infonote" tal:condition="merge_info.blocked_remote_name and merge_info.reasons is None">
|
|
2
|
+
Because this project isn't in the <code>mirror_whitelist</code>,
|
|
3
|
+
no releases from <strong>${merge_info.blocked_remote_name}</strong> are included.
|
|
4
|
+
</p>
|
|
5
|
+
<script id="merge-info" type="application/json">${merge_info}</script>
|
|
6
|
+
<div class="infonote" tal:condition="merge_info.reasons">
|
|
7
|
+
<ul>
|
|
8
|
+
<li tal:repeat="reason merge_info.reasons">${reason}</li>
|
|
9
|
+
</ul>
|
|
10
|
+
</div>
|
|
@@ -12,11 +12,8 @@
|
|
|
12
12
|
<p class="projectnavigation" tal:condition="nav_links">
|
|
13
13
|
<span tal:repeat="link nav_links"><a tal:attributes="class link.get('css_class')" href="${link.url}">${link.title}</a></span>
|
|
14
14
|
</p>
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
no releases from <strong>${blocked_by_mirror_whitelist}</strong> are included.
|
|
18
|
-
</p>
|
|
19
|
-
<p tal:condition="not blocked_by_mirror_whitelist" tal:content="structure refresh_form"></p>
|
|
15
|
+
<metal:mergeinfo use-macro="request.macros['merge_info']" />
|
|
16
|
+
<metal:projectrefresh use-macro="request.macros['project_refresh']" />
|
|
20
17
|
|
|
21
18
|
<p tal:condition="latest_version">Latest version on stage is: <a href="${latest_url}">${latest_version}</a></p>
|
|
22
19
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<p tal:condition="not blocked_by_mirror_whitelist" tal:content="structure refresh_form"></p>
|
|
@@ -21,10 +21,7 @@
|
|
|
21
21
|
</tr>
|
|
22
22
|
</table>
|
|
23
23
|
|
|
24
|
-
<
|
|
25
|
-
Because this project isn't in the <code>mirror_whitelist</code>,
|
|
26
|
-
no releases from <strong>${blocked_by_mirror_whitelist}</strong> are included.
|
|
27
|
-
</p>
|
|
24
|
+
<metal:mergeinfo use-macro="request.macros['merge_info']" />
|
|
28
25
|
|
|
29
26
|
<table class="files">
|
|
30
27
|
<thead>
|