devpi-server 6.16.0__tar.gz → 6.17.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 (131) hide show
  1. {devpi_server-6.16.0 → devpi_server-6.17.0}/.flake8 +2 -2
  2. {devpi_server-6.16.0 → devpi_server-6.17.0}/CHANGELOG +47 -51
  3. {devpi_server-6.16.0 → devpi_server-6.17.0}/CHANGELOG.short.rst +47 -27
  4. {devpi_server-6.16.0 → devpi_server-6.17.0}/PKG-INFO +49 -29
  5. devpi_server-6.17.0/devpi_server/__init__.py +1 -0
  6. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/auth.py +6 -59
  7. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/config.py +65 -50
  8. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/genconfig.py +2 -2
  9. devpi_server-6.17.0/devpi_server/httpclient.py +255 -0
  10. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/importexport.py +9 -10
  11. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/keyfs.py +1 -1
  12. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/keyfs_sqlite_fs.py +1 -1
  13. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/main.py +53 -83
  14. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/middleware.py +1 -1
  15. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/mirror.py +197 -41
  16. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/model.py +27 -11
  17. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/replica.py +248 -197
  18. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/view_auth.py +31 -12
  19. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/views.py +214 -170
  20. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server.egg-info/PKG-INFO +49 -29
  21. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server.egg-info/SOURCES.txt +1 -0
  22. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server.egg-info/requires.txt +1 -1
  23. {devpi_server-6.16.0 → devpi_server-6.17.0}/mypy.ini +1 -0
  24. {devpi_server-6.16.0 → devpi_server-6.17.0}/pyproject.toml +118 -10
  25. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/plugin.py +225 -16
  26. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_auth.py +3 -18
  27. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_config.py +26 -6
  28. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_filestore.py +24 -20
  29. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_importexport.py +10 -12
  30. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_keyfs.py +1 -1
  31. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_main.py +58 -28
  32. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_mirror.py +249 -81
  33. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_model.py +34 -67
  34. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_replica.py +195 -112
  35. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_streaming.py +2 -3
  36. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_views.py +57 -16
  37. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_views_push_external.py +148 -134
  38. {devpi_server-6.16.0 → devpi_server-6.17.0}/tox.ini +4 -1
  39. devpi_server-6.16.0/devpi_server/__init__.py +0 -1
  40. {devpi_server-6.16.0 → devpi_server-6.17.0}/LICENSE +0 -0
  41. {devpi_server-6.16.0 → devpi_server-6.17.0}/MANIFEST.in +0 -0
  42. {devpi_server-6.16.0 → devpi_server-6.17.0}/README.rst +0 -0
  43. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/__main__.py +0 -0
  44. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/auth_basic.py +0 -0
  45. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/auth_devpi.py +0 -0
  46. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/__init__.py +0 -0
  47. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/crontab.template +0 -0
  48. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/devpi.service.template +0 -0
  49. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/launchd-macos.txt.template +0 -0
  50. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi-caching-http.conf.template +0 -0
  51. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi-caching-location.conf.template +0 -0
  52. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi-caching-proxy.conf.template +0 -0
  53. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi-caching-server.conf.template +0 -0
  54. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi.conf.template +0 -0
  55. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/supervisor-devpi.conf.template +0 -0
  56. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/supervisord.conf.template +0 -0
  57. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/cfg/windows-service.txt.template +0 -0
  58. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/exceptions.py +0 -0
  59. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/filestore.py +0 -0
  60. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/filestore_fs.py +0 -0
  61. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/fileutil.py +0 -0
  62. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/fsck.py +0 -0
  63. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/hookspecs.py +0 -0
  64. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/init.py +0 -0
  65. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/interfaces.py +0 -0
  66. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/keyfs_sqlite.py +0 -0
  67. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/keyfs_types.py +0 -0
  68. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/log.py +0 -0
  69. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/markers.py +0 -0
  70. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/mythread.py +0 -0
  71. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/passwd.py +0 -0
  72. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/py.typed +0 -0
  73. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/readonly.py +0 -0
  74. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/sizeof.py +0 -0
  75. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/vendor/__init__.py +0 -0
  76. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server/vendor/_pip.py +0 -0
  77. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server.egg-info/dependency_links.txt +0 -0
  78. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server.egg-info/entry_points.txt +0 -0
  79. {devpi_server-6.16.0 → devpi_server-6.17.0}/devpi_server.egg-info/top_level.txt +0 -0
  80. {devpi_server-6.16.0 → devpi_server-6.17.0}/pytest_devpi_server/__init__.py +0 -0
  81. {devpi_server-6.16.0 → devpi_server-6.17.0}/setup.cfg +0 -0
  82. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/__init__.py +0 -0
  83. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/conftest.py +0 -0
  84. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/example.py +0 -0
  85. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/functional.py +0 -0
  86. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/badindexname/dataindex.json +0 -0
  87. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/badusername/dataindex.json +0 -0
  88. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/basescycle/dataindex.json +0 -0
  89. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/createdmodified/dataindex.json +0 -0
  90. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/deletedbase/dataindex.json +0 -0
  91. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/mirrordata/dataindex.json +0 -0
  92. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/mirrordata/root/pypi/dddttt/0.1.dev1/dddttt-0.1.dev1.tar.gz +0 -0
  93. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/modifiedpypi/dataindex.json +0 -0
  94. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/nocreatedmodified/dataindex.json +0 -0
  95. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization/dataindex.json +0 -0
  96. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization/root/dev/hello.pkg/hello.pkg-1.0.tar.gz +0 -0
  97. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization_merge/dataindex.json +0 -0
  98. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization_merge/root/dev/hello-pkg/hello.pkg-1.1.tar.gz +0 -0
  99. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization_merge/root/dev/hello.pkg/hello.pkg-1.0.tar.gz +0 -0
  100. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/norootpypi/dataindex.json +0 -0
  101. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/nouser/dataindex.json +0 -0
  102. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/removedindexplugin/dataindex.json +0 -0
  103. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/removedindexplugin/user/dev/pkg/pkg-1.0.tar.gz +0 -0
  104. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/toxresult_naming_scheme/dataindex.json +0 -0
  105. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/toxresult_naming_scheme/root/dev/hello/0.9/hello-0.9.tar.gz +0 -0
  106. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/toxresult_naming_scheme/root/dev/hello/sha256=ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73/hello-0.9.tar.gz.toxresult0 +0 -0
  107. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/toxresult_upload_default/dataindex.json +0 -0
  108. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/py.typed +0 -0
  109. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/reqmock.py +0 -0
  110. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/simpypi.py +0 -0
  111. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_authcheck.py +0 -0
  112. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_conftest.py +0 -0
  113. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_fileutil.py +0 -0
  114. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_fsck.py +0 -0
  115. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_genconfig.py +0 -0
  116. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_keyfs_sqlite_fs.py +0 -0
  117. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_log.py +0 -0
  118. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_mirror_no_project_list.py +0 -0
  119. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_mythread.py +0 -0
  120. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_nginx.py +0 -0
  121. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_nginx_replica.py +0 -0
  122. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_permissions.py +0 -0
  123. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_readonly.py +0 -0
  124. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_replica_functional.py +0 -0
  125. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_stage_customizer.py +0 -0
  126. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_streaming_nginx.py +0 -0
  127. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_streaming_replica.py +0 -0
  128. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_streaming_replica_nginx.py +0 -0
  129. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_view_auth.py +0 -0
  130. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_views_patch.py +0 -0
  131. {devpi_server-6.16.0 → devpi_server-6.17.0}/test_devpi_server/test_views_status.py +0 -0
@@ -2,8 +2,8 @@
2
2
  # E203 is ignored because we enforce ruff format which contradicts it
3
3
  ignore = E203,E501,E704,E741,W503
4
4
  per-file-ignores =
5
- plugin.py:E127,E128,E225,E231
5
+ plugin.py:E127,E128,E231
6
6
  importexport.py:E127
7
- model.py:E128,E225,E231
7
+ model.py:E128,E231
8
8
  test_importexport.py:E121
9
9
  test*.py:E126,E127,E128,E225,E226,E231,E251
@@ -2,22 +2,66 @@
2
2
 
3
3
  .. towncrier release notes start
4
4
 
5
- 6.16.0 (2025-06-25)
5
+ 6.17.0 (2025-08-27)
6
6
  ===================
7
7
 
8
8
  Deprecations and Removals
9
9
  -------------------------
10
10
 
11
- - Dropped support for Python 3.7 and 3.8.
11
+ - Dropped support for migrating old password hashes that were replaced in devpi-server 4.2.0.
12
+
13
+ - Removed support for basic authorization in primary URL. The connection is already secured by a bearer token header.
12
14
 
15
+ - Removed the experimental ``--replica-cert`` option. The replica is already using a token via a shared secret, so this is redundant.
13
16
 
17
+ - Removed ``--replica-max-retries`` option. It wasn't implemented for async_httpget and didn't work correctly when streaming data.
14
18
 
15
19
  Features
16
20
  --------
17
21
 
18
- - Update stored package metadata fields to version 2.4 for license expressions (PEP 639).
22
+ - Use httpx for all data fetching for mirrors and fetch projects list asynchronously to allow update in background even after a timeout.
23
+
24
+ - Use httpx instead of requests when proxying from replicas to primary.
25
+
26
+ - Use httpx for all requests from replicas to primary.
19
27
 
28
+ - Use httpx when pushing releases to external index.
20
29
 
30
+ - 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.
31
+
32
+ - The HTTP cache information for mirrored projects is persisted and re-used on server restarts.
33
+
34
+ - 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``).
35
+
36
+ Bug Fixes
37
+ ---------
38
+
39
+ - Correctly handle lists for ``Provides-Extra`` and ``License-File`` metadata in database.
40
+
41
+ - 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.
42
+
43
+ - Fix #1053: allow users to update their passwords when ``--restrict-modify`` is used.
44
+
45
+ - Fix #1097: return 404 when trying to POST to +simple.
46
+
47
+ Other Changes
48
+ -------------
49
+
50
+ - Changed User-Agent when fetching data for mirrors from just "server" to "devpi-server".
51
+
52
+
53
+ 6.16.0 (2025-06-25)
54
+ ===================
55
+
56
+ Deprecations and Removals
57
+ -------------------------
58
+
59
+ - Dropped support for Python 3.7 and 3.8.
60
+
61
+ Features
62
+ --------
63
+
64
+ - Update stored package metadata fields to version 2.4 for license expressions (PEP 639).
21
65
 
22
66
  Bug Fixes
23
67
  ---------
@@ -27,7 +71,6 @@ Bug Fixes
27
71
  - Keep original metadata_version in database.
28
72
 
29
73
 
30
-
31
74
  6.15.0 (2025-05-18)
32
75
  ===================
33
76
 
@@ -37,7 +80,6 @@ Features
37
80
  - Add ``--connection-limit`` option to devpi-server passed on to waitress.
38
81
 
39
82
 
40
-
41
83
  6.14.0 (2024-10-16)
42
84
  ===================
43
85
 
@@ -50,15 +92,12 @@ Features
50
92
 
51
93
  - Allow pushing of documentation only with no release files. Requires devpi-client 7.2.0.
52
94
 
53
-
54
-
55
95
  Bug Fixes
56
96
  ---------
57
97
 
58
98
  - No longer automatically "register" a project when pushing releases to PyPI. The reply changed from HTTP status 410 to 400 breaking the upload. With devpi-client 7.2.0 there is a ``--register-project`` option if it is still required for some other package registry.
59
99
 
60
100
 
61
-
62
101
  6.13.0 (2024-09-19)
63
102
  ===================
64
103
 
@@ -70,8 +109,6 @@ Deprecations and Removals
70
109
  Using the old terms will now output warnings.
71
110
  The ``+status`` API has additional fields and the ``role`` field content will change with 7.0.0.
72
111
 
73
-
74
-
75
112
  Features
76
113
  --------
77
114
 
@@ -79,8 +116,6 @@ Features
79
116
 
80
117
  - Added support uv pip as an installer.
81
118
 
82
-
83
-
84
119
  Bug Fixes
85
120
  ---------
86
121
 
@@ -93,7 +128,6 @@ Bug Fixes
93
128
  - Only warn about replica not being in sync instead of fatal status while still replicating.
94
129
 
95
130
 
96
-
97
131
  6.12.1 (2024-07-24)
98
132
  ===================
99
133
 
@@ -107,7 +141,6 @@ Bug Fixes
107
141
  - Fix #1044: Correctly update cache expiry time when mirrored server returns 304 Not Modified.
108
142
 
109
143
 
110
-
111
144
  6.12.0 (2024-06-25)
112
145
  ===================
113
146
 
@@ -118,15 +151,12 @@ Features
118
151
 
119
152
  - Added ``devpiserver_on_toxresult_upload_forbidden`` hook to allow returning a custom message and result (403 or 200).
120
153
 
121
-
122
-
123
154
  Bug Fixes
124
155
  ---------
125
156
 
126
157
  - Return json data if toxresult upload is forbidden.
127
158
 
128
159
 
129
-
130
160
  6.11.0 (2024-04-20)
131
161
  ===================
132
162
 
@@ -137,8 +167,6 @@ Features
137
167
 
138
168
  - Fix #983: Add plugin hook for mirror authentication header.
139
169
 
140
-
141
-
142
170
  Bug Fixes
143
171
  ---------
144
172
 
@@ -147,7 +175,6 @@ Bug Fixes
147
175
  - Fix #1033: Use ``int`` for ``--mirror-cache-expiry`` to fix value of ``proxy_cache_valid`` in nginx caching config.
148
176
 
149
177
 
150
-
151
178
  6.10.0 (2023-12-19)
152
179
  ===================
153
180
 
@@ -158,8 +185,6 @@ Features
158
185
 
159
186
  - Fix #998: Use the pure Python httpx library instead of aiohttp to prevent delays in supporting newest Python releases.
160
187
 
161
-
162
-
163
188
  Bug Fixes
164
189
  ---------
165
190
 
@@ -168,7 +193,6 @@ Bug Fixes
168
193
  - Only compare hostname instead of full URL prefix when parsing mirror packages to fix mirrors with basic authentication and absolute URLs. See #1006
169
194
 
170
195
 
171
-
172
196
  6.9.2 (2023-08-06)
173
197
  ==================
174
198
 
@@ -199,7 +223,6 @@ Features
199
223
 
200
224
  - Fix #931: Add ``mirror_no_project_list`` setting for mirror indexes that have no full project list like google cloud artifacts or if you want to prevent downloading the full list for huge indexes like PyPI.
201
225
 
202
-
203
226
  Bug Fixes
204
227
  ---------
205
228
 
@@ -222,7 +245,6 @@ Features
222
245
 
223
246
  - Fix #929: Cache normalized project names per transaction on mirror index instances.
224
247
 
225
-
226
248
  Bug Fixes
227
249
  ---------
228
250
 
@@ -245,7 +267,6 @@ Features
245
267
 
246
268
  - Set headers to prevent caching for simple links with stale results.
247
269
 
248
-
249
270
  Bug Fixes
250
271
  ---------
251
272
 
@@ -283,7 +304,6 @@ Features
283
304
 
284
305
  - Support `PEP-691 <https://peps.python.org/pep-0691/>`_ conformant fetching for mirrors, and requests with JSON result for installers. Proxy servers should add compression support for the ``application/vnd.pypi.simple.v1+json`` content type (``gzip_types`` for nginx).
285
306
 
286
-
287
307
  Bug Fixes
288
308
  ---------
289
309
 
@@ -325,7 +345,6 @@ Features
325
345
 
326
346
  - Better logging and handling if a thread unexpectedly dies.
327
347
 
328
-
329
348
  Bug Fixes
330
349
  ---------
331
350
 
@@ -346,13 +365,11 @@ Deprecations and Removals
346
365
 
347
366
  - As announced with 6.0.0, support for Python 3.6 has been dropped, because it has reached its end of life.
348
367
 
349
-
350
368
  Features
351
369
  --------
352
370
 
353
371
  - When an installer user agent is detected the full list of projects is returned unsorted and with less info to improve performance and reduce memory usage.
354
372
 
355
-
356
373
  Bug Fixes
357
374
  ---------
358
375
 
@@ -378,7 +395,6 @@ Features
378
395
 
379
396
  - Use aiohttp (asyncio) for fetching release links from mirrors to return stale links immediately in case of a timeout, but update the database in the background for the next request.
380
397
 
381
-
382
398
  Bug Fixes
383
399
  ---------
384
400
 
@@ -412,7 +428,6 @@ Deprecations and Removals
412
428
 
413
429
  - Renamed 'pypi_submit' permission to 'upload'. The old permission still works, but will be removed in a later major release.
414
430
 
415
-
416
431
  Features
417
432
  --------
418
433
 
@@ -420,7 +435,6 @@ Features
420
435
 
421
436
  - Allow user and index URLs to work with a trailing slash.
422
437
 
423
-
424
438
  Bug Fixes
425
439
  ---------
426
440
 
@@ -448,7 +462,6 @@ Deprecations and Removals
448
462
 
449
463
  - Removed deprecated ``--start``, ``--stop`` and ``--status`` options.
450
464
 
451
-
452
465
  Features
453
466
  --------
454
467
 
@@ -480,7 +493,6 @@ Features
480
493
 
481
494
  - The user creation and modification time is now stored. Adding or removing an index doesn't count as a modification.
482
495
 
483
-
484
496
  Bug Fixes
485
497
  ---------
486
498
 
@@ -492,7 +504,6 @@ Bug Fixes
492
504
 
493
505
  - Handle cases where the ``Content-Type`` header from a mirror can be an empty string.
494
506
 
495
-
496
507
  Other Changes
497
508
  -------------
498
509
 
@@ -559,7 +570,6 @@ Features
559
570
 
560
571
  - On import files for mirror indexes are now imported when they were included in the dump (see ``--include-mirrored-files``).
561
572
 
562
-
563
573
  Bug Fixes
564
574
  ---------
565
575
 
@@ -587,7 +597,6 @@ Features
587
597
 
588
598
  - proxy requests from the replica to the master will use number of seconds from the new ``--proxy-timeout`` option as their timeout value.
589
599
 
590
-
591
600
  Bug Fixes
592
601
  ---------
593
602
 
@@ -610,7 +619,6 @@ Deprecations and Removals
610
619
 
611
620
  - The ``--passwd`` option is deprecated, use the new ``devpi-passwd`` command instead.
612
621
 
613
-
614
622
  Features
615
623
  --------
616
624
 
@@ -624,7 +632,6 @@ Features
624
632
 
625
633
  - Storage options can now be specified as a dict in yaml config files.
626
634
 
627
-
628
635
  Bug Fixes
629
636
  ---------
630
637
 
@@ -646,7 +653,6 @@ Bug Fixes
646
653
 
647
654
  - Unnecessary database writes where the final value didn't change are now prevented.
648
655
 
649
-
650
656
  Other Changes
651
657
  -------------
652
658
 
@@ -680,7 +686,6 @@ Deprecations and Removals
680
686
 
681
687
  - deprecated Python 2.7 support. This is the last major version supporting Python 2.7. For upgrading to Python 3.x you have to export your data using your current setup with Python 2.7 and import it in a new installation with Python 3.x.
682
688
 
683
-
684
689
  Features
685
690
  --------
686
691
 
@@ -698,7 +703,6 @@ Features
698
703
 
699
704
  - when credentials for the user are rejected, the error message now says so instead of claiming the user could not be found.
700
705
 
701
-
702
706
  Other Changes
703
707
  -------------
704
708
 
@@ -733,7 +737,6 @@ Features
733
737
 
734
738
  - add ``--hard-links`` support for replicas together with the ``--replica-file-search-path`` option. When a matching file is found it's hard linked instead of writing a copy.
735
739
 
736
-
737
740
  Bug Fixes
738
741
  ---------
739
742
 
@@ -743,7 +746,6 @@ Bug Fixes
743
746
 
744
747
  - use timeout when waiting for data from master in replica on mirror simple pages.
745
748
 
746
-
747
749
  Other Changes
748
750
  -------------
749
751
 
@@ -775,7 +777,6 @@ Features
775
777
 
776
778
  - The PATCH method of indexes supports a list of arguments with operations in the form of ``key=value`` for setting values and for lists in the form of ``key+=value`` and ``key-=value`` to add and remove items. This prevents undoing changes sent in concurrent PATCH requests.
777
779
 
778
-
779
780
  Bug Fixes
780
781
  ---------
781
782
 
@@ -805,7 +806,6 @@ Deprecations and Removals
805
806
 
806
807
  - Deprecated DEVPI_SERVERDIR environment variable in favor of DEVPISERVER_SERVERDIR to be consistent with the other option overwrites.
807
808
 
808
-
809
809
  Features
810
810
  --------
811
811
 
@@ -825,7 +825,6 @@ Features
825
825
 
826
826
  - Better handling of 404s in mirror indexes. Every project not found would create an entry in the database which would grow it unnecessarily.
827
827
 
828
-
829
828
  Bug Fixes
830
829
  ---------
831
830
 
@@ -863,7 +862,6 @@ Features
863
862
 
864
863
  - add `--request-timeout` option to provide adjustable request timeout
865
864
 
866
-
867
865
  Bug Fixes
868
866
  ---------
869
867
 
@@ -889,7 +887,6 @@ Features
889
887
 
890
888
  - Use ``pypi.org`` as new default for ``root/pypi`` mirror index.
891
889
 
892
-
893
890
  Bug Fixes
894
891
  ---------
895
892
 
@@ -909,7 +906,6 @@ Features
909
906
 
910
907
  - fix issue469: Add ``acl_toxresult_upload`` to index configuration.
911
908
 
912
-
913
909
  Bug Fixes
914
910
  ---------
915
911
 
@@ -9,22 +9,66 @@ Changelog
9
9
 
10
10
  .. towncrier release notes start
11
11
 
12
- 6.16.0 (2025-06-25)
12
+ 6.17.0 (2025-08-27)
13
13
  ===================
14
14
 
15
15
  Deprecations and Removals
16
16
  -------------------------
17
17
 
18
- - Dropped support for Python 3.7 and 3.8.
18
+ - Dropped support for migrating old password hashes that were replaced in devpi-server 4.2.0.
19
19
 
20
+ - Removed support for basic authorization in primary URL. The connection is already secured by a bearer token header.
20
21
 
22
+ - Removed the experimental ``--replica-cert`` option. The replica is already using a token via a shared secret, so this is redundant.
23
+
24
+ - Removed ``--replica-max-retries`` option. It wasn't implemented for async_httpget and didn't work correctly when streaming data.
21
25
 
22
26
  Features
23
27
  --------
24
28
 
25
- - Update stored package metadata fields to version 2.4 for license expressions (PEP 639).
29
+ - Use httpx for all data fetching for mirrors and fetch projects list asynchronously to allow update in background even after a timeout.
30
+
31
+ - Use httpx instead of requests when proxying from replicas to primary.
32
+
33
+ - Use httpx for all requests from replicas to primary.
34
+
35
+ - Use httpx when pushing releases to external index.
26
36
 
37
+ - 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.
27
38
 
39
+ - The HTTP cache information for mirrored projects is persisted and re-used on server restarts.
40
+
41
+ - 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``).
42
+
43
+ Bug Fixes
44
+ ---------
45
+
46
+ - Correctly handle lists for ``Provides-Extra`` and ``License-File`` metadata in database.
47
+
48
+ - 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.
49
+
50
+ - Fix #1053: allow users to update their passwords when ``--restrict-modify`` is used.
51
+
52
+ - Fix #1097: return 404 when trying to POST to +simple.
53
+
54
+ Other Changes
55
+ -------------
56
+
57
+ - Changed User-Agent when fetching data for mirrors from just "server" to "devpi-server".
58
+
59
+
60
+ 6.16.0 (2025-06-25)
61
+ ===================
62
+
63
+ Deprecations and Removals
64
+ -------------------------
65
+
66
+ - Dropped support for Python 3.7 and 3.8.
67
+
68
+ Features
69
+ --------
70
+
71
+ - Update stored package metadata fields to version 2.4 for license expressions (PEP 639).
28
72
 
29
73
  Bug Fixes
30
74
  ---------
@@ -34,7 +78,6 @@ Bug Fixes
34
78
  - Keep original metadata_version in database.
35
79
 
36
80
 
37
-
38
81
  6.15.0 (2025-05-18)
39
82
  ===================
40
83
 
@@ -44,7 +87,6 @@ Features
44
87
  - Add ``--connection-limit`` option to devpi-server passed on to waitress.
45
88
 
46
89
 
47
-
48
90
  6.14.0 (2024-10-16)
49
91
  ===================
50
92
 
@@ -57,15 +99,12 @@ Features
57
99
 
58
100
  - Allow pushing of documentation only with no release files. Requires devpi-client 7.2.0.
59
101
 
60
-
61
-
62
102
  Bug Fixes
63
103
  ---------
64
104
 
65
105
  - No longer automatically "register" a project when pushing releases to PyPI. The reply changed from HTTP status 410 to 400 breaking the upload. With devpi-client 7.2.0 there is a ``--register-project`` option if it is still required for some other package registry.
66
106
 
67
107
 
68
-
69
108
  6.13.0 (2024-09-19)
70
109
  ===================
71
110
 
@@ -77,8 +116,6 @@ Deprecations and Removals
77
116
  Using the old terms will now output warnings.
78
117
  The ``+status`` API has additional fields and the ``role`` field content will change with 7.0.0.
79
118
 
80
-
81
-
82
119
  Features
83
120
  --------
84
121
 
@@ -86,8 +123,6 @@ Features
86
123
 
87
124
  - Added support uv pip as an installer.
88
125
 
89
-
90
-
91
126
  Bug Fixes
92
127
  ---------
93
128
 
@@ -99,18 +134,3 @@ Bug Fixes
99
134
 
100
135
  - Only warn about replica not being in sync instead of fatal status while still replicating.
101
136
 
102
-
103
-
104
- 6.12.1 (2024-07-24)
105
- ===================
106
-
107
- Bug Fixes
108
- ---------
109
-
110
- - Support Python 3.13 by depending on legacy-cgi.
111
-
112
- - Preserve query string when proxying requests from replica to primary. This fixes force removal on non-volatile indexes and probably other bugs.
113
-
114
- - Fix #1044: Correctly update cache expiry time when mirrored server returns 304 Not Modified.
115
-
116
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devpi-server
3
- Version: 6.16.0
3
+ Version: 6.17.0
4
4
  Summary: devpi-server: reliable, private, and pypi.org caching server
5
5
  Maintainer-email: Florian Schulze <mail@pyfidelity.com>
6
6
  License-Expression: MIT
@@ -32,7 +32,7 @@ Requires-Dist: argon2-cffi
32
32
  Requires-Dist: attrs>=22.2.0
33
33
  Requires-Dist: defusedxml
34
34
  Requires-Dist: devpi_common<5,>3.6.0
35
- Requires-Dist: httpx
35
+ Requires-Dist: httpx<1
36
36
  Requires-Dist: itsdangerous>=0.24
37
37
  Requires-Dist: lazy
38
38
  Requires-Dist: legacy-cgi; python_version >= "3.13"
@@ -121,22 +121,66 @@ Changelog
121
121
 
122
122
  .. towncrier release notes start
123
123
 
124
- 6.16.0 (2025-06-25)
124
+ 6.17.0 (2025-08-27)
125
125
  ===================
126
126
 
127
127
  Deprecations and Removals
128
128
  -------------------------
129
129
 
130
- - Dropped support for Python 3.7 and 3.8.
130
+ - Dropped support for migrating old password hashes that were replaced in devpi-server 4.2.0.
131
131
 
132
+ - Removed support for basic authorization in primary URL. The connection is already secured by a bearer token header.
132
133
 
134
+ - Removed the experimental ``--replica-cert`` option. The replica is already using a token via a shared secret, so this is redundant.
135
+
136
+ - Removed ``--replica-max-retries`` option. It wasn't implemented for async_httpget and didn't work correctly when streaming data.
133
137
 
134
138
  Features
135
139
  --------
136
140
 
137
- - Update stored package metadata fields to version 2.4 for license expressions (PEP 639).
141
+ - Use httpx for all data fetching for mirrors and fetch projects list asynchronously to allow update in background even after a timeout.
142
+
143
+ - Use httpx instead of requests when proxying from replicas to primary.
144
+
145
+ - Use httpx for all requests from replicas to primary.
146
+
147
+ - Use httpx when pushing releases to external index.
138
148
 
149
+ - 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.
139
150
 
151
+ - The HTTP cache information for mirrored projects is persisted and re-used on server restarts.
152
+
153
+ - 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``).
154
+
155
+ Bug Fixes
156
+ ---------
157
+
158
+ - Correctly handle lists for ``Provides-Extra`` and ``License-File`` metadata in database.
159
+
160
+ - 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.
161
+
162
+ - Fix #1053: allow users to update their passwords when ``--restrict-modify`` is used.
163
+
164
+ - Fix #1097: return 404 when trying to POST to +simple.
165
+
166
+ Other Changes
167
+ -------------
168
+
169
+ - Changed User-Agent when fetching data for mirrors from just "server" to "devpi-server".
170
+
171
+
172
+ 6.16.0 (2025-06-25)
173
+ ===================
174
+
175
+ Deprecations and Removals
176
+ -------------------------
177
+
178
+ - Dropped support for Python 3.7 and 3.8.
179
+
180
+ Features
181
+ --------
182
+
183
+ - Update stored package metadata fields to version 2.4 for license expressions (PEP 639).
140
184
 
141
185
  Bug Fixes
142
186
  ---------
@@ -146,7 +190,6 @@ Bug Fixes
146
190
  - Keep original metadata_version in database.
147
191
 
148
192
 
149
-
150
193
  6.15.0 (2025-05-18)
151
194
  ===================
152
195
 
@@ -156,7 +199,6 @@ Features
156
199
  - Add ``--connection-limit`` option to devpi-server passed on to waitress.
157
200
 
158
201
 
159
-
160
202
  6.14.0 (2024-10-16)
161
203
  ===================
162
204
 
@@ -169,15 +211,12 @@ Features
169
211
 
170
212
  - Allow pushing of documentation only with no release files. Requires devpi-client 7.2.0.
171
213
 
172
-
173
-
174
214
  Bug Fixes
175
215
  ---------
176
216
 
177
217
  - No longer automatically "register" a project when pushing releases to PyPI. The reply changed from HTTP status 410 to 400 breaking the upload. With devpi-client 7.2.0 there is a ``--register-project`` option if it is still required for some other package registry.
178
218
 
179
219
 
180
-
181
220
  6.13.0 (2024-09-19)
182
221
  ===================
183
222
 
@@ -189,8 +228,6 @@ Deprecations and Removals
189
228
  Using the old terms will now output warnings.
190
229
  The ``+status`` API has additional fields and the ``role`` field content will change with 7.0.0.
191
230
 
192
-
193
-
194
231
  Features
195
232
  --------
196
233
 
@@ -198,8 +235,6 @@ Features
198
235
 
199
236
  - Added support uv pip as an installer.
200
237
 
201
-
202
-
203
238
  Bug Fixes
204
239
  ---------
205
240
 
@@ -211,18 +246,3 @@ Bug Fixes
211
246
 
212
247
  - Only warn about replica not being in sync instead of fatal status while still replicating.
213
248
 
214
-
215
-
216
- 6.12.1 (2024-07-24)
217
- ===================
218
-
219
- Bug Fixes
220
- ---------
221
-
222
- - Support Python 3.13 by depending on legacy-cgi.
223
-
224
- - Preserve query string when proxying requests from replica to primary. This fixes force removal on non-volatile indexes and probably other bugs.
225
-
226
- - Fix #1044: Correctly update cache expiry time when mirrored server returns 304 Not Modified.
227
-
228
-
@@ -0,0 +1 @@
1
+ __version__ = "6.17.0"