devpi-server 6.19.1__tar.gz → 6.19.3__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_server-6.19.1 → devpi_server-6.19.3}/.flake8 +0 -1
- {devpi_server-6.19.1 → devpi_server-6.19.3}/CHANGELOG +34 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/CHANGELOG.short.rst +34 -69
- {devpi_server-6.19.1 → devpi_server-6.19.3}/PKG-INFO +53 -91
- {devpi_server-6.19.1 → devpi_server-6.19.3}/README.rst +16 -20
- devpi_server-6.19.3/devpi_server/__init__.py +1 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/auth.py +6 -3
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/nginx-devpi-caching-http.conf.template +1 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/config.py +109 -60
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/exceptions.py +4 -4
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/filestore.py +94 -45
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/filestore_db.py +5 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/filestore_hash_hl.py +12 -3
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/fileutil.py +1 -3
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/fsck.py +50 -15
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/genconfig.py +58 -10
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/htmlpage.py +2 -2
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/httpclient.py +5 -1
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/importexport.py +146 -59
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/interfaces.py +1 -1
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/keyfs.py +91 -63
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/keyfs_types.py +4 -3
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/log.py +54 -18
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/main.py +28 -18
- devpi_server-6.19.3/devpi_server/markers.py +76 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/middleware.py +9 -1
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/mirror.py +85 -42
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/model.py +230 -78
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/mythread.py +12 -6
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/readonly.py +16 -12
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/replica.py +46 -28
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/view_auth.py +10 -3
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/views.py +65 -38
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server.egg-info/PKG-INFO +53 -91
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server.egg-info/SOURCES.txt +4 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server.egg-info/requires.txt +1 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/mypy.ini +1 -3
- {devpi_server-6.19.1 → devpi_server-6.19.3}/pyproject.toml +2 -1
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/functional.py +0 -20
- devpi_server-6.19.3/test_devpi_server/importexportdata/dashes_v1/dataindex.json +69 -0
- devpi_server-6.19.3/test_devpi_server/importexportdata/no_history_log/dataindex.json +83 -0
- devpi_server-6.19.3/test_devpi_server/importexportdata/removedindexplugin/user/dev/pkg/pkg-1.0.tar.gz +1 -0
- devpi_server-6.19.3/test_devpi_server/importexportdata/toxresult_naming_scheme/root/dev/hello/0.9/hello-0.9.tar.gz +1 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/plugin.py +72 -39
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_auth.py +1 -1
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_importexport.py +126 -141
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_keyfs.py +15 -5
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_mirror.py +11 -7
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_model.py +91 -6
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_streaming.py +46 -35
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_streaming_nginx.py +4 -2
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_streaming_replica.py +4 -2
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_streaming_replica_nginx.py +4 -2
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_views.py +17 -13
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_views_patch.py +1 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/tox.ini +2 -2
- devpi_server-6.19.1/devpi_server/__init__.py +0 -1
- devpi_server-6.19.1/devpi_server/markers.py +0 -34
- {devpi_server-6.19.1 → devpi_server-6.19.3}/LICENSE +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/MANIFEST.in +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/__main__.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/auth_basic.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/auth_devpi.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/__init__.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/crontab.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/devpi.service.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/launchd-macos.txt.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/nginx-devpi-caching-location.conf.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/nginx-devpi-caching-proxy.conf.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/nginx-devpi-caching-server.conf.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/nginx-devpi.conf.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/supervisor-devpi.conf.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/supervisord.conf.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/cfg/windows-service.txt.template +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/compat.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/filestore_fs.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/filestore_fs_base.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/hookspecs.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/init.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/keyfs_sqlite.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/keyfs_sqlite_fs.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/normalized.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/passwd.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/py.typed +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server/sizeof.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server.egg-info/dependency_links.txt +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server.egg-info/entry_points.txt +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/devpi_server.egg-info/top_level.txt +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/pytest_devpi_server/__init__.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/setup.cfg +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/__init__.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/conftest.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/example.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/badindexname/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/badusername/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/basescycle/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/createdmodified/dataindex.json +0 -0
- /devpi_server-6.19.1/test_devpi_server/importexportdata/mirrordata/root/pypi/dddttt/0.1.dev1/dddttt-0.1.dev1.tar.gz → /devpi_server-6.19.3/test_devpi_server/importexportdata/dashes_v1/user1/dev/hello/hello-1.2_3.tar.gz +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/deletedbase/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/mirrordata/dataindex.json +0 -0
- /devpi_server-6.19.1/test_devpi_server/importexportdata/normalization/root/dev/hello.pkg/hello.pkg-1.0.tar.gz → /devpi_server-6.19.3/test_devpi_server/importexportdata/mirrordata/root/pypi/dddttt/0.1.dev1/dddttt-0.1.dev1.tar.gz +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/modifiedpypi/dataindex.json +0 -0
- /devpi_server-6.19.1/test_devpi_server/importexportdata/removedindexplugin/user/dev/pkg/pkg-1.0.tar.gz → /devpi_server-6.19.3/test_devpi_server/importexportdata/no_history_log/user1/dev/hello/hello-1.0.tar.gz +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/nocreatedmodified/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/normalization/dataindex.json +0 -0
- /devpi_server-6.19.1/test_devpi_server/importexportdata/toxresult_naming_scheme/root/dev/hello/0.9/hello-0.9.tar.gz → /devpi_server-6.19.3/test_devpi_server/importexportdata/normalization/root/dev/hello.pkg/hello.pkg-1.0.tar.gz +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/normalization_merge/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/normalization_merge/root/dev/hello-pkg/hello.pkg-1.1.tar.gz +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/normalization_merge/root/dev/hello.pkg/hello.pkg-1.0.tar.gz +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/norootpypi/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/nouser/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/removedindexplugin/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/toxresult_naming_scheme/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/toxresult_naming_scheme/root/dev/hello/sha256=ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73/hello-0.9.tar.gz.toxresult0 +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/importexportdata/toxresult_upload_default/dataindex.json +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/py.typed +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/reqmock.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/simpypi.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_authcheck.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_config.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_conftest.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_filestore.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_filestore_fs.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_fileutil.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_fsck.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_genconfig.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_log.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_main.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_mirror_no_project_list.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_mythread.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_nginx.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_nginx_replica.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_permissions.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_readonly.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_replica.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_replica_functional.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_stage_customizer.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_view_auth.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_views_push_external.py +0 -0
- {devpi_server-6.19.1 → devpi_server-6.19.3}/test_devpi_server/test_views_status.py +0 -0
|
@@ -2,6 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
.. towncrier release notes start
|
|
4
4
|
|
|
5
|
+
6.19.3 (2026-04-13)
|
|
6
|
+
===================
|
|
7
|
+
|
|
8
|
+
Bug Fixes
|
|
9
|
+
---------
|
|
10
|
+
|
|
11
|
+
- Fix #1112: Parse simple JSON reply even with wrong content-type in reply if the body seems to contain JSON.
|
|
12
|
+
|
|
13
|
+
- Return stale project list for mirrors when the lock can't be acquired within the timeout.
|
|
14
|
+
|
|
15
|
+
- Fix importing of toxresults from devpi-server 6.5.0 to 6.9.0 where the wrong hash was stored.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
6.19.2 (2026-03-17)
|
|
19
|
+
===================
|
|
20
|
+
|
|
21
|
+
Bug Fixes
|
|
22
|
+
---------
|
|
23
|
+
|
|
24
|
+
- Preserve log for documentation uploads in export.
|
|
25
|
+
|
|
26
|
+
- Any missing file on mirrors will be ignored during event processing as is already the case in other places.
|
|
27
|
+
|
|
28
|
+
- Use short timeout when project list is requested for ``has_project`` call on mirrors instead of the long one used for ``list_projects``. This prevents installers from timing out and retrying several times.
|
|
29
|
+
|
|
30
|
+
- Fix error handling for proxy requests from replica to primary.
|
|
31
|
+
|
|
32
|
+
Other Changes
|
|
33
|
+
-------------
|
|
34
|
+
|
|
35
|
+
- Removed limit of reported missing files for devpi-fsck.
|
|
36
|
+
|
|
37
|
+
|
|
5
38
|
6.19.1 (2026-02-09)
|
|
6
39
|
===================
|
|
7
40
|
|
|
@@ -12,6 +45,7 @@ Bug Fixes
|
|
|
12
45
|
|
|
13
46
|
- Always allow replicas to access deleted releases to get the proper ``410 Gone`` instead of ``403 Forbidden`` when ``devpi-lockdown`` is in use.
|
|
14
47
|
|
|
48
|
+
|
|
15
49
|
6.19.0 (2026-02-06)
|
|
16
50
|
===================
|
|
17
51
|
|
|
@@ -9,6 +9,39 @@ Changelog
|
|
|
9
9
|
|
|
10
10
|
.. towncrier release notes start
|
|
11
11
|
|
|
12
|
+
6.19.3 (2026-04-13)
|
|
13
|
+
===================
|
|
14
|
+
|
|
15
|
+
Bug Fixes
|
|
16
|
+
---------
|
|
17
|
+
|
|
18
|
+
- Fix #1112: Parse simple JSON reply even with wrong content-type in reply if the body seems to contain JSON.
|
|
19
|
+
|
|
20
|
+
- Return stale project list for mirrors when the lock can't be acquired within the timeout.
|
|
21
|
+
|
|
22
|
+
- Fix importing of toxresults from devpi-server 6.5.0 to 6.9.0 where the wrong hash was stored.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
6.19.2 (2026-03-17)
|
|
26
|
+
===================
|
|
27
|
+
|
|
28
|
+
Bug Fixes
|
|
29
|
+
---------
|
|
30
|
+
|
|
31
|
+
- Preserve log for documentation uploads in export.
|
|
32
|
+
|
|
33
|
+
- Any missing file on mirrors will be ignored during event processing as is already the case in other places.
|
|
34
|
+
|
|
35
|
+
- Use short timeout when project list is requested for ``has_project`` call on mirrors instead of the long one used for ``list_projects``. This prevents installers from timing out and retrying several times.
|
|
36
|
+
|
|
37
|
+
- Fix error handling for proxy requests from replica to primary.
|
|
38
|
+
|
|
39
|
+
Other Changes
|
|
40
|
+
-------------
|
|
41
|
+
|
|
42
|
+
- Removed limit of reported missing files for devpi-fsck.
|
|
43
|
+
|
|
44
|
+
|
|
12
45
|
6.19.1 (2026-02-09)
|
|
13
46
|
===================
|
|
14
47
|
|
|
@@ -19,6 +52,7 @@ Bug Fixes
|
|
|
19
52
|
|
|
20
53
|
- Always allow replicas to access deleted releases to get the proper ``410 Gone`` instead of ``403 Forbidden`` when ``devpi-lockdown`` is in use.
|
|
21
54
|
|
|
55
|
+
|
|
22
56
|
6.19.0 (2026-02-06)
|
|
23
57
|
===================
|
|
24
58
|
|
|
@@ -78,72 +112,3 @@ Other Changes
|
|
|
78
112
|
|
|
79
113
|
- The filenames of some exported doczip files change due to normalization of the project name caused by changing the internals during export to allow ``--hard-links`` to work.
|
|
80
114
|
|
|
81
|
-
|
|
82
|
-
6.17.0 (2025-08-27)
|
|
83
|
-
===================
|
|
84
|
-
|
|
85
|
-
Deprecations and Removals
|
|
86
|
-
-------------------------
|
|
87
|
-
|
|
88
|
-
- Dropped support for migrating old password hashes that were replaced in devpi-server 4.2.0.
|
|
89
|
-
|
|
90
|
-
- Removed support for basic authorization in primary URL. The connection is already secured by a bearer token header.
|
|
91
|
-
|
|
92
|
-
- Removed the experimental ``--replica-cert`` option. The replica is already using a token via a shared secret, so this is redundant.
|
|
93
|
-
|
|
94
|
-
- Removed ``--replica-max-retries`` option. It wasn't implemented for async_httpget and didn't work correctly when streaming data.
|
|
95
|
-
|
|
96
|
-
Features
|
|
97
|
-
--------
|
|
98
|
-
|
|
99
|
-
- Use httpx for all data fetching for mirrors and fetch projects list asynchronously to allow update in background even after a timeout.
|
|
100
|
-
|
|
101
|
-
- Use httpx instead of requests when proxying from replicas to primary.
|
|
102
|
-
|
|
103
|
-
- Use httpx for all requests from replicas to primary.
|
|
104
|
-
|
|
105
|
-
- Use httpx when pushing releases to external index.
|
|
106
|
-
|
|
107
|
-
- Added ``mirror_ignore_serial_header`` mirror index option, which allows switching from PyPI to a mirror without serials header when set to ``True``, otherwise only stale links will be served and no updates be stored.
|
|
108
|
-
|
|
109
|
-
- The HTTP cache information for mirrored projects is persisted and re-used on server restarts.
|
|
110
|
-
|
|
111
|
-
- Added ``--file-replication-skip-indexes`` option to skip file replication for ``all``, by index type (i.e. ``mirror``) or index name (i.e. ``root/pypi``).
|
|
112
|
-
|
|
113
|
-
Bug Fixes
|
|
114
|
-
---------
|
|
115
|
-
|
|
116
|
-
- Correctly handle lists for ``Provides-Extra`` and ``License-File`` metadata in database.
|
|
117
|
-
|
|
118
|
-
- Fix traceback by returning 401 error code when using wrong password with a user that was created using an authentication plugin like devpi-ldap which passes authentication through in that case.
|
|
119
|
-
|
|
120
|
-
- Fix #1053: allow users to update their passwords when ``--restrict-modify`` is used.
|
|
121
|
-
|
|
122
|
-
- Fix #1097: return 404 when trying to POST to +simple.
|
|
123
|
-
|
|
124
|
-
Other Changes
|
|
125
|
-
-------------
|
|
126
|
-
|
|
127
|
-
- Changed User-Agent when fetching data for mirrors from just "server" to "devpi-server".
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
6.16.0 (2025-06-25)
|
|
131
|
-
===================
|
|
132
|
-
|
|
133
|
-
Deprecations and Removals
|
|
134
|
-
-------------------------
|
|
135
|
-
|
|
136
|
-
- Dropped support for Python 3.7 and 3.8.
|
|
137
|
-
|
|
138
|
-
Features
|
|
139
|
-
--------
|
|
140
|
-
|
|
141
|
-
- Update stored package metadata fields to version 2.4 for license expressions (PEP 639).
|
|
142
|
-
|
|
143
|
-
Bug Fixes
|
|
144
|
-
---------
|
|
145
|
-
|
|
146
|
-
- Preserve hash when importing mirror data to prevent unnecessary updates later on.
|
|
147
|
-
|
|
148
|
-
- Keep original metadata_version in database.
|
|
149
|
-
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devpi-server
|
|
3
|
-
Version: 6.19.
|
|
4
|
-
Summary: devpi-server:
|
|
3
|
+
Version: 6.19.3
|
|
4
|
+
Summary: devpi-server: backend for hosting private package indexes and PyPI on-demand mirrors
|
|
5
5
|
Maintainer-email: Florian Schulze <mail@pyfidelity.com>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Bug Tracker, https://github.com/devpi/devpi/issues
|
|
@@ -43,6 +43,7 @@ Requires-Dist: pluggy<2.0,>=0.6.0
|
|
|
43
43
|
Requires-Dist: py>=1.4.23
|
|
44
44
|
Requires-Dist: pyramid>=2
|
|
45
45
|
Requires-Dist: repoze.lru>=0.6
|
|
46
|
+
Requires-Dist: requests>=2.3.0
|
|
46
47
|
Requires-Dist: setuptools<=81
|
|
47
48
|
Requires-Dist: strenum; python_version < "3.11"
|
|
48
49
|
Requires-Dist: strictyaml
|
|
@@ -50,25 +51,24 @@ Requires-Dist: waitress>=1.0.1
|
|
|
50
51
|
Requires-Dist: ruamel.yaml
|
|
51
52
|
Dynamic: license-file
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
devpi-server:
|
|
55
|
-
|
|
54
|
+
====================================================================================
|
|
55
|
+
devpi-server: backend for hosting private package indexes and PyPI on-demand mirrors
|
|
56
|
+
====================================================================================
|
|
56
57
|
|
|
57
58
|
|
|
58
|
-
PyPI
|
|
59
|
-
|
|
59
|
+
PyPI on-demand package mirror
|
|
60
|
+
=============================
|
|
60
61
|
|
|
61
|
-
You can point ``pip or
|
|
62
|
-
|
|
62
|
+
You can point ``uv``, ``pip`` or another Python package installer to the ``root/pypi/+simple/`` index,
|
|
63
|
+
serving as a transparent on-demand mirror for PyPI-hosted packages.
|
|
63
64
|
|
|
64
65
|
|
|
65
66
|
User specific indexes
|
|
66
67
|
=====================
|
|
67
68
|
|
|
68
|
-
Each user (which can represent a person, project or team) can have
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
`devpi-client`_ and a RESTful HTTP API.
|
|
69
|
+
Each user (which can represent a person, project or team) can have multiple indexes,
|
|
70
|
+
and can upload packages and documents to these indexes via standard ``twine`` or ``setup.py`` invocations.
|
|
71
|
+
Users and indexes can be manipulated through `devpi-client`_ and a RESTful HTTP API.
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
Index inheritance
|
|
@@ -80,19 +80,16 @@ index using ``root/pypi`` as a parent is a good place to test out a
|
|
|
80
80
|
release candidate before you push it to PyPI.
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
Sensible defaults for a low friction deployment
|
|
84
|
+
===============================================
|
|
85
85
|
|
|
86
|
-
Get started easily and
|
|
87
|
-
including pre-configured templates for ``nginx`` and process managers.
|
|
86
|
+
Get started easily and deploy a devpi-server instance with pre-configured templates for ``nginx`` and process managers.
|
|
88
87
|
|
|
89
88
|
|
|
90
89
|
Separate tool for Packaging/Testing activities
|
|
91
90
|
==============================================
|
|
92
91
|
|
|
93
|
-
The complementary `devpi-client`_ tool
|
|
94
|
-
helps to manage users, indexes, logins and typical setup.py-based upload and
|
|
95
|
-
installation workflows.
|
|
92
|
+
The complementary `devpi-client`_ tool helps to manage users, indexes, logins and typical package upload and installation workflows.
|
|
96
93
|
|
|
97
94
|
See https://doc.devpi.net on how to get started and further documentation.
|
|
98
95
|
|
|
@@ -105,9 +102,9 @@ Support
|
|
|
105
102
|
|
|
106
103
|
If you find a bug, use the `issue tracker at Github`_.
|
|
107
104
|
|
|
108
|
-
For general questions use `GitHub Discussions`_ or the `devpi-dev@python.org mailing list`_.
|
|
105
|
+
For general questions, use `GitHub Discussions`_ or the `devpi-dev@python.org mailing list`_.
|
|
109
106
|
|
|
110
|
-
For support contracts and paid help contact ``mail at pyfidelity.com``.
|
|
107
|
+
For support contracts and paid help, contact ``mail at pyfidelity.com``.
|
|
111
108
|
|
|
112
109
|
.. _issue tracker at Github: https://github.com/devpi/devpi/issues/
|
|
113
110
|
.. _devpi-dev@python.org mailing list: https://mail.python.org/mailman3/lists/devpi-dev.python.org/
|
|
@@ -124,6 +121,39 @@ Changelog
|
|
|
124
121
|
|
|
125
122
|
.. towncrier release notes start
|
|
126
123
|
|
|
124
|
+
6.19.3 (2026-04-13)
|
|
125
|
+
===================
|
|
126
|
+
|
|
127
|
+
Bug Fixes
|
|
128
|
+
---------
|
|
129
|
+
|
|
130
|
+
- Fix #1112: Parse simple JSON reply even with wrong content-type in reply if the body seems to contain JSON.
|
|
131
|
+
|
|
132
|
+
- Return stale project list for mirrors when the lock can't be acquired within the timeout.
|
|
133
|
+
|
|
134
|
+
- Fix importing of toxresults from devpi-server 6.5.0 to 6.9.0 where the wrong hash was stored.
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
6.19.2 (2026-03-17)
|
|
138
|
+
===================
|
|
139
|
+
|
|
140
|
+
Bug Fixes
|
|
141
|
+
---------
|
|
142
|
+
|
|
143
|
+
- Preserve log for documentation uploads in export.
|
|
144
|
+
|
|
145
|
+
- Any missing file on mirrors will be ignored during event processing as is already the case in other places.
|
|
146
|
+
|
|
147
|
+
- Use short timeout when project list is requested for ``has_project`` call on mirrors instead of the long one used for ``list_projects``. This prevents installers from timing out and retrying several times.
|
|
148
|
+
|
|
149
|
+
- Fix error handling for proxy requests from replica to primary.
|
|
150
|
+
|
|
151
|
+
Other Changes
|
|
152
|
+
-------------
|
|
153
|
+
|
|
154
|
+
- Removed limit of reported missing files for devpi-fsck.
|
|
155
|
+
|
|
156
|
+
|
|
127
157
|
6.19.1 (2026-02-09)
|
|
128
158
|
===================
|
|
129
159
|
|
|
@@ -134,6 +164,7 @@ Bug Fixes
|
|
|
134
164
|
|
|
135
165
|
- Always allow replicas to access deleted releases to get the proper ``410 Gone`` instead of ``403 Forbidden`` when ``devpi-lockdown`` is in use.
|
|
136
166
|
|
|
167
|
+
|
|
137
168
|
6.19.0 (2026-02-06)
|
|
138
169
|
===================
|
|
139
170
|
|
|
@@ -193,72 +224,3 @@ Other Changes
|
|
|
193
224
|
|
|
194
225
|
- The filenames of some exported doczip files change due to normalization of the project name caused by changing the internals during export to allow ``--hard-links`` to work.
|
|
195
226
|
|
|
196
|
-
|
|
197
|
-
6.17.0 (2025-08-27)
|
|
198
|
-
===================
|
|
199
|
-
|
|
200
|
-
Deprecations and Removals
|
|
201
|
-
-------------------------
|
|
202
|
-
|
|
203
|
-
- Dropped support for migrating old password hashes that were replaced in devpi-server 4.2.0.
|
|
204
|
-
|
|
205
|
-
- Removed support for basic authorization in primary URL. The connection is already secured by a bearer token header.
|
|
206
|
-
|
|
207
|
-
- Removed the experimental ``--replica-cert`` option. The replica is already using a token via a shared secret, so this is redundant.
|
|
208
|
-
|
|
209
|
-
- Removed ``--replica-max-retries`` option. It wasn't implemented for async_httpget and didn't work correctly when streaming data.
|
|
210
|
-
|
|
211
|
-
Features
|
|
212
|
-
--------
|
|
213
|
-
|
|
214
|
-
- Use httpx for all data fetching for mirrors and fetch projects list asynchronously to allow update in background even after a timeout.
|
|
215
|
-
|
|
216
|
-
- Use httpx instead of requests when proxying from replicas to primary.
|
|
217
|
-
|
|
218
|
-
- Use httpx for all requests from replicas to primary.
|
|
219
|
-
|
|
220
|
-
- Use httpx when pushing releases to external index.
|
|
221
|
-
|
|
222
|
-
- Added ``mirror_ignore_serial_header`` mirror index option, which allows switching from PyPI to a mirror without serials header when set to ``True``, otherwise only stale links will be served and no updates be stored.
|
|
223
|
-
|
|
224
|
-
- The HTTP cache information for mirrored projects is persisted and re-used on server restarts.
|
|
225
|
-
|
|
226
|
-
- Added ``--file-replication-skip-indexes`` option to skip file replication for ``all``, by index type (i.e. ``mirror``) or index name (i.e. ``root/pypi``).
|
|
227
|
-
|
|
228
|
-
Bug Fixes
|
|
229
|
-
---------
|
|
230
|
-
|
|
231
|
-
- Correctly handle lists for ``Provides-Extra`` and ``License-File`` metadata in database.
|
|
232
|
-
|
|
233
|
-
- Fix traceback by returning 401 error code when using wrong password with a user that was created using an authentication plugin like devpi-ldap which passes authentication through in that case.
|
|
234
|
-
|
|
235
|
-
- Fix #1053: allow users to update their passwords when ``--restrict-modify`` is used.
|
|
236
|
-
|
|
237
|
-
- Fix #1097: return 404 when trying to POST to +simple.
|
|
238
|
-
|
|
239
|
-
Other Changes
|
|
240
|
-
-------------
|
|
241
|
-
|
|
242
|
-
- Changed User-Agent when fetching data for mirrors from just "server" to "devpi-server".
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
6.16.0 (2025-06-25)
|
|
246
|
-
===================
|
|
247
|
-
|
|
248
|
-
Deprecations and Removals
|
|
249
|
-
-------------------------
|
|
250
|
-
|
|
251
|
-
- Dropped support for Python 3.7 and 3.8.
|
|
252
|
-
|
|
253
|
-
Features
|
|
254
|
-
--------
|
|
255
|
-
|
|
256
|
-
- Update stored package metadata fields to version 2.4 for license expressions (PEP 639).
|
|
257
|
-
|
|
258
|
-
Bug Fixes
|
|
259
|
-
---------
|
|
260
|
-
|
|
261
|
-
- Preserve hash when importing mirror data to prevent unnecessary updates later on.
|
|
262
|
-
|
|
263
|
-
- Keep original metadata_version in database.
|
|
264
|
-
|
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
devpi-server:
|
|
3
|
-
|
|
1
|
+
====================================================================================
|
|
2
|
+
devpi-server: backend for hosting private package indexes and PyPI on-demand mirrors
|
|
3
|
+
====================================================================================
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
PyPI
|
|
7
|
-
|
|
6
|
+
PyPI on-demand package mirror
|
|
7
|
+
=============================
|
|
8
8
|
|
|
9
|
-
You can point ``pip or
|
|
10
|
-
|
|
9
|
+
You can point ``uv``, ``pip`` or another Python package installer to the ``root/pypi/+simple/`` index,
|
|
10
|
+
serving as a transparent on-demand mirror for PyPI-hosted packages.
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
User specific indexes
|
|
14
14
|
=====================
|
|
15
15
|
|
|
16
|
-
Each user (which can represent a person, project or team) can have
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
`devpi-client`_ and a RESTful HTTP API.
|
|
16
|
+
Each user (which can represent a person, project or team) can have multiple indexes,
|
|
17
|
+
and can upload packages and documents to these indexes via standard ``twine`` or ``setup.py`` invocations.
|
|
18
|
+
Users and indexes can be manipulated through `devpi-client`_ and a RESTful HTTP API.
|
|
20
19
|
|
|
21
20
|
|
|
22
21
|
Index inheritance
|
|
@@ -28,19 +27,16 @@ index using ``root/pypi`` as a parent is a good place to test out a
|
|
|
28
27
|
release candidate before you push it to PyPI.
|
|
29
28
|
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
Sensible defaults for a low friction deployment
|
|
31
|
+
===============================================
|
|
33
32
|
|
|
34
|
-
Get started easily and
|
|
35
|
-
including pre-configured templates for ``nginx`` and process managers.
|
|
33
|
+
Get started easily and deploy a devpi-server instance with pre-configured templates for ``nginx`` and process managers.
|
|
36
34
|
|
|
37
35
|
|
|
38
36
|
Separate tool for Packaging/Testing activities
|
|
39
37
|
==============================================
|
|
40
38
|
|
|
41
|
-
The complementary `devpi-client`_ tool
|
|
42
|
-
helps to manage users, indexes, logins and typical setup.py-based upload and
|
|
43
|
-
installation workflows.
|
|
39
|
+
The complementary `devpi-client`_ tool helps to manage users, indexes, logins and typical package upload and installation workflows.
|
|
44
40
|
|
|
45
41
|
See https://doc.devpi.net on how to get started and further documentation.
|
|
46
42
|
|
|
@@ -53,9 +49,9 @@ Support
|
|
|
53
49
|
|
|
54
50
|
If you find a bug, use the `issue tracker at Github`_.
|
|
55
51
|
|
|
56
|
-
For general questions use `GitHub Discussions`_ or the `devpi-dev@python.org mailing list`_.
|
|
52
|
+
For general questions, use `GitHub Discussions`_ or the `devpi-dev@python.org mailing list`_.
|
|
57
53
|
|
|
58
|
-
For support contracts and paid help contact ``mail at pyfidelity.com``.
|
|
54
|
+
For support contracts and paid help, contact ``mail at pyfidelity.com``.
|
|
59
55
|
|
|
60
56
|
.. _issue tracker at Github: https://github.com/devpi/devpi/issues/
|
|
61
57
|
.. _devpi-dev@python.org mailing list: https://mail.python.org/mailman3/lists/devpi-dev.python.org/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "6.19.3"
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from .log import threadlog
|
|
4
|
+
from .markers import notset
|
|
4
5
|
from passlib.context import CryptContext
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
5
7
|
import itertools
|
|
6
8
|
import itsdangerous
|
|
7
9
|
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from .main import XOM
|
|
10
13
|
|
|
11
14
|
|
|
12
15
|
class AuthException(Exception):
|
|
@@ -19,7 +22,7 @@ class Auth:
|
|
|
19
22
|
class Expired(Exception):
|
|
20
23
|
""" proxy authentication expired. """
|
|
21
24
|
|
|
22
|
-
def __init__(self, xom, secret):
|
|
25
|
+
def __init__(self, xom: XOM, secret: str) -> None:
|
|
23
26
|
self.xom = xom
|
|
24
27
|
self.serializer = itsdangerous.TimedSerializer(secret)
|
|
25
28
|
self.hook = xom.config.hook.devpiserver_auth_request
|
|
@@ -56,7 +59,7 @@ class Auth:
|
|
|
56
59
|
return dict(status="ok", groups=sorted(
|
|
57
60
|
set(itertools.chain.from_iterable(groups))))
|
|
58
61
|
|
|
59
|
-
def _autocreate_user(self, authuser):
|
|
62
|
+
def _autocreate_user(self, authuser: str) -> None:
|
|
60
63
|
if self.model.get_user(authuser) is None:
|
|
61
64
|
# Autocreated users will be authenticated via plugin, and so no
|
|
62
65
|
# valid password should be stored.
|