devpi-server 6.15.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 (140) hide show
  1. devpi_server-6.17.0/.flake8 +9 -0
  2. {devpi-server-6.15.0 → devpi_server-6.17.0}/CHANGELOG +69 -47
  3. devpi_server-6.17.0/CHANGELOG.short.rst +136 -0
  4. {devpi-server-6.15.0 → devpi_server-6.17.0}/PKG-INFO +97 -54
  5. devpi_server-6.17.0/devpi_server/__init__.py +1 -0
  6. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/auth.py +9 -54
  7. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/config.py +67 -56
  8. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/filestore.py +43 -14
  9. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/genconfig.py +2 -2
  10. devpi_server-6.17.0/devpi_server/httpclient.py +255 -0
  11. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/importexport.py +24 -19
  12. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/interfaces.py +83 -14
  13. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/keyfs.py +188 -87
  14. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/keyfs_sqlite_fs.py +1 -1
  15. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/keyfs_types.py +45 -4
  16. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/log.py +10 -5
  17. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/main.py +87 -93
  18. devpi_server-6.17.0/devpi_server/markers.py +34 -0
  19. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/middleware.py +5 -4
  20. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/mirror.py +224 -58
  21. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/model.py +185 -80
  22. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/mythread.py +21 -17
  23. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/readonly.py +25 -16
  24. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/replica.py +270 -220
  25. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/view_auth.py +31 -12
  26. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/views.py +249 -238
  27. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server.egg-info/PKG-INFO +97 -54
  28. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server.egg-info/SOURCES.txt +3 -5
  29. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server.egg-info/requires.txt +7 -7
  30. devpi_server-6.17.0/mypy.ini +106 -0
  31. devpi_server-6.17.0/pyproject.toml +396 -0
  32. devpi_server-6.17.0/setup.cfg +4 -0
  33. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/plugin.py +240 -35
  34. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/reqmock.py +36 -26
  35. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_auth.py +3 -18
  36. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_config.py +26 -6
  37. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_filestore.py +46 -37
  38. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_importexport.py +56 -49
  39. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_keyfs.py +30 -16
  40. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_main.py +72 -51
  41. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_mirror.py +282 -95
  42. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_mirror_no_project_list.py +17 -17
  43. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_model.py +79 -120
  44. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_mythread.py +8 -0
  45. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_replica.py +202 -114
  46. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_streaming.py +2 -3
  47. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_views.py +83 -17
  48. devpi_server-6.17.0/test_devpi_server/test_views_push_external.py +362 -0
  49. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_views_status.py +5 -7
  50. {devpi-server-6.15.0 → devpi_server-6.17.0}/tox.ini +20 -8
  51. devpi-server-6.15.0/.flake8 +0 -9
  52. devpi-server-6.15.0/AUTHORS +0 -13
  53. devpi-server-6.15.0/devpi_server/__init__.py +0 -1
  54. devpi-server-6.15.0/devpi_server/markers.py +0 -14
  55. devpi-server-6.15.0/devpi_server.egg-info/not-zip-safe +0 -1
  56. devpi-server-6.15.0/pyproject.toml +0 -178
  57. devpi-server-6.15.0/setup.cfg +0 -7
  58. devpi-server-6.15.0/setup.py +0 -116
  59. devpi-server-6.15.0/test_devpi_server/test_reqmock.py +0 -48
  60. devpi-server-6.15.0/test_devpi_server/test_views_push_external.py +0 -288
  61. {devpi-server-6.15.0 → devpi_server-6.17.0}/LICENSE +0 -0
  62. {devpi-server-6.15.0 → devpi_server-6.17.0}/MANIFEST.in +0 -0
  63. {devpi-server-6.15.0 → devpi_server-6.17.0}/README.rst +0 -0
  64. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/__main__.py +0 -0
  65. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/auth_basic.py +0 -0
  66. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/auth_devpi.py +0 -0
  67. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/__init__.py +0 -0
  68. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/crontab.template +0 -0
  69. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/devpi.service.template +0 -0
  70. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/launchd-macos.txt.template +0 -0
  71. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi-caching-http.conf.template +0 -0
  72. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi-caching-location.conf.template +0 -0
  73. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi-caching-proxy.conf.template +0 -0
  74. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi-caching-server.conf.template +0 -0
  75. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/nginx-devpi.conf.template +0 -0
  76. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/supervisor-devpi.conf.template +0 -0
  77. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/supervisord.conf.template +0 -0
  78. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/cfg/windows-service.txt.template +0 -0
  79. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/exceptions.py +0 -0
  80. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/filestore_fs.py +0 -0
  81. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/fileutil.py +0 -0
  82. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/fsck.py +0 -0
  83. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/hookspecs.py +0 -0
  84. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/init.py +0 -0
  85. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/keyfs_sqlite.py +0 -0
  86. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/passwd.py +0 -0
  87. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/py.typed +0 -0
  88. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/sizeof.py +0 -0
  89. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/vendor/__init__.py +0 -0
  90. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server/vendor/_pip.py +0 -0
  91. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server.egg-info/dependency_links.txt +0 -0
  92. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server.egg-info/entry_points.txt +0 -0
  93. {devpi-server-6.15.0 → devpi_server-6.17.0}/devpi_server.egg-info/top_level.txt +0 -0
  94. {devpi-server-6.15.0 → devpi_server-6.17.0}/pytest_devpi_server/__init__.py +0 -0
  95. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/__init__.py +0 -0
  96. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/conftest.py +0 -0
  97. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/example.py +0 -0
  98. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/functional.py +0 -0
  99. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/badindexname/dataindex.json +0 -0
  100. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/badusername/dataindex.json +0 -0
  101. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/basescycle/dataindex.json +0 -0
  102. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/createdmodified/dataindex.json +0 -0
  103. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/deletedbase/dataindex.json +0 -0
  104. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/mirrordata/dataindex.json +0 -0
  105. {devpi-server-6.15.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
  106. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/modifiedpypi/dataindex.json +0 -0
  107. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/nocreatedmodified/dataindex.json +0 -0
  108. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization/dataindex.json +0 -0
  109. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization/root/dev/hello.pkg/hello.pkg-1.0.tar.gz +0 -0
  110. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization_merge/dataindex.json +0 -0
  111. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization_merge/root/dev/hello-pkg/hello.pkg-1.1.tar.gz +0 -0
  112. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/normalization_merge/root/dev/hello.pkg/hello.pkg-1.0.tar.gz +0 -0
  113. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/norootpypi/dataindex.json +0 -0
  114. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/nouser/dataindex.json +0 -0
  115. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/removedindexplugin/dataindex.json +0 -0
  116. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/removedindexplugin/user/dev/pkg/pkg-1.0.tar.gz +0 -0
  117. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/toxresult_naming_scheme/dataindex.json +0 -0
  118. {devpi-server-6.15.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
  119. {devpi-server-6.15.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
  120. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/importexportdata/toxresult_upload_default/dataindex.json +0 -0
  121. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/py.typed +0 -0
  122. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/simpypi.py +0 -0
  123. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_authcheck.py +0 -0
  124. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_conftest.py +0 -0
  125. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_fileutil.py +0 -0
  126. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_fsck.py +0 -0
  127. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_genconfig.py +0 -0
  128. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_keyfs_sqlite_fs.py +0 -0
  129. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_log.py +0 -0
  130. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_nginx.py +0 -0
  131. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_nginx_replica.py +0 -0
  132. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_permissions.py +0 -0
  133. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_readonly.py +0 -0
  134. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_replica_functional.py +0 -0
  135. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_stage_customizer.py +0 -0
  136. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_streaming_nginx.py +0 -0
  137. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_streaming_replica.py +0 -0
  138. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_streaming_replica_nginx.py +0 -0
  139. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_view_auth.py +0 -0
  140. {devpi-server-6.15.0 → devpi_server-6.17.0}/test_devpi_server/test_views_patch.py +0 -0
@@ -0,0 +1,9 @@
1
+ [flake8]
2
+ # E203 is ignored because we enforce ruff format which contradicts it
3
+ ignore = E203,E501,E704,E741,W503
4
+ per-file-ignores =
5
+ plugin.py:E127,E128,E231
6
+ importexport.py:E127
7
+ model.py:E128,E231
8
+ test_importexport.py:E121
9
+ test*.py:E126,E127,E128,E225,E226,E231,E251
@@ -2,6 +2,75 @@
2
2
 
3
3
  .. towncrier release notes start
4
4
 
5
+ 6.17.0 (2025-08-27)
6
+ ===================
7
+
8
+ Deprecations and Removals
9
+ -------------------------
10
+
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.
14
+
15
+ - Removed the experimental ``--replica-cert`` option. The replica is already using a token via a shared secret, so this is redundant.
16
+
17
+ - Removed ``--replica-max-retries`` option. It wasn't implemented for async_httpget and didn't work correctly when streaming data.
18
+
19
+ Features
20
+ --------
21
+
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.
27
+
28
+ - Use httpx when pushing releases to external index.
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).
65
+
66
+ Bug Fixes
67
+ ---------
68
+
69
+ - Preserve hash when importing mirror data to prevent unnecessary updates later on.
70
+
71
+ - Keep original metadata_version in database.
72
+
73
+
5
74
  6.15.0 (2025-05-18)
6
75
  ===================
7
76
 
@@ -11,7 +80,6 @@ Features
11
80
  - Add ``--connection-limit`` option to devpi-server passed on to waitress.
12
81
 
13
82
 
14
-
15
83
  6.14.0 (2024-10-16)
16
84
  ===================
17
85
 
@@ -24,15 +92,12 @@ Features
24
92
 
25
93
  - Allow pushing of documentation only with no release files. Requires devpi-client 7.2.0.
26
94
 
27
-
28
-
29
95
  Bug Fixes
30
96
  ---------
31
97
 
32
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.
33
99
 
34
100
 
35
-
36
101
  6.13.0 (2024-09-19)
37
102
  ===================
38
103
 
@@ -44,8 +109,6 @@ Deprecations and Removals
44
109
  Using the old terms will now output warnings.
45
110
  The ``+status`` API has additional fields and the ``role`` field content will change with 7.0.0.
46
111
 
47
-
48
-
49
112
  Features
50
113
  --------
51
114
 
@@ -53,8 +116,6 @@ Features
53
116
 
54
117
  - Added support uv pip as an installer.
55
118
 
56
-
57
-
58
119
  Bug Fixes
59
120
  ---------
60
121
 
@@ -67,7 +128,6 @@ Bug Fixes
67
128
  - Only warn about replica not being in sync instead of fatal status while still replicating.
68
129
 
69
130
 
70
-
71
131
  6.12.1 (2024-07-24)
72
132
  ===================
73
133
 
@@ -81,7 +141,6 @@ Bug Fixes
81
141
  - Fix #1044: Correctly update cache expiry time when mirrored server returns 304 Not Modified.
82
142
 
83
143
 
84
-
85
144
  6.12.0 (2024-06-25)
86
145
  ===================
87
146
 
@@ -92,15 +151,12 @@ Features
92
151
 
93
152
  - Added ``devpiserver_on_toxresult_upload_forbidden`` hook to allow returning a custom message and result (403 or 200).
94
153
 
95
-
96
-
97
154
  Bug Fixes
98
155
  ---------
99
156
 
100
157
  - Return json data if toxresult upload is forbidden.
101
158
 
102
159
 
103
-
104
160
  6.11.0 (2024-04-20)
105
161
  ===================
106
162
 
@@ -111,8 +167,6 @@ Features
111
167
 
112
168
  - Fix #983: Add plugin hook for mirror authentication header.
113
169
 
114
-
115
-
116
170
  Bug Fixes
117
171
  ---------
118
172
 
@@ -121,7 +175,6 @@ Bug Fixes
121
175
  - Fix #1033: Use ``int`` for ``--mirror-cache-expiry`` to fix value of ``proxy_cache_valid`` in nginx caching config.
122
176
 
123
177
 
124
-
125
178
  6.10.0 (2023-12-19)
126
179
  ===================
127
180
 
@@ -132,8 +185,6 @@ Features
132
185
 
133
186
  - Fix #998: Use the pure Python httpx library instead of aiohttp to prevent delays in supporting newest Python releases.
134
187
 
135
-
136
-
137
188
  Bug Fixes
138
189
  ---------
139
190
 
@@ -142,7 +193,6 @@ Bug Fixes
142
193
  - Only compare hostname instead of full URL prefix when parsing mirror packages to fix mirrors with basic authentication and absolute URLs. See #1006
143
194
 
144
195
 
145
-
146
196
  6.9.2 (2023-08-06)
147
197
  ==================
148
198
 
@@ -173,7 +223,6 @@ Features
173
223
 
174
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.
175
225
 
176
-
177
226
  Bug Fixes
178
227
  ---------
179
228
 
@@ -196,7 +245,6 @@ Features
196
245
 
197
246
  - Fix #929: Cache normalized project names per transaction on mirror index instances.
198
247
 
199
-
200
248
  Bug Fixes
201
249
  ---------
202
250
 
@@ -219,7 +267,6 @@ Features
219
267
 
220
268
  - Set headers to prevent caching for simple links with stale results.
221
269
 
222
-
223
270
  Bug Fixes
224
271
  ---------
225
272
 
@@ -257,7 +304,6 @@ Features
257
304
 
258
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).
259
306
 
260
-
261
307
  Bug Fixes
262
308
  ---------
263
309
 
@@ -299,7 +345,6 @@ Features
299
345
 
300
346
  - Better logging and handling if a thread unexpectedly dies.
301
347
 
302
-
303
348
  Bug Fixes
304
349
  ---------
305
350
 
@@ -320,13 +365,11 @@ Deprecations and Removals
320
365
 
321
366
  - As announced with 6.0.0, support for Python 3.6 has been dropped, because it has reached its end of life.
322
367
 
323
-
324
368
  Features
325
369
  --------
326
370
 
327
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.
328
372
 
329
-
330
373
  Bug Fixes
331
374
  ---------
332
375
 
@@ -352,7 +395,6 @@ Features
352
395
 
353
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.
354
397
 
355
-
356
398
  Bug Fixes
357
399
  ---------
358
400
 
@@ -386,7 +428,6 @@ Deprecations and Removals
386
428
 
387
429
  - Renamed 'pypi_submit' permission to 'upload'. The old permission still works, but will be removed in a later major release.
388
430
 
389
-
390
431
  Features
391
432
  --------
392
433
 
@@ -394,7 +435,6 @@ Features
394
435
 
395
436
  - Allow user and index URLs to work with a trailing slash.
396
437
 
397
-
398
438
  Bug Fixes
399
439
  ---------
400
440
 
@@ -422,7 +462,6 @@ Deprecations and Removals
422
462
 
423
463
  - Removed deprecated ``--start``, ``--stop`` and ``--status`` options.
424
464
 
425
-
426
465
  Features
427
466
  --------
428
467
 
@@ -454,7 +493,6 @@ Features
454
493
 
455
494
  - The user creation and modification time is now stored. Adding or removing an index doesn't count as a modification.
456
495
 
457
-
458
496
  Bug Fixes
459
497
  ---------
460
498
 
@@ -466,7 +504,6 @@ Bug Fixes
466
504
 
467
505
  - Handle cases where the ``Content-Type`` header from a mirror can be an empty string.
468
506
 
469
-
470
507
  Other Changes
471
508
  -------------
472
509
 
@@ -533,7 +570,6 @@ Features
533
570
 
534
571
  - On import files for mirror indexes are now imported when they were included in the dump (see ``--include-mirrored-files``).
535
572
 
536
-
537
573
  Bug Fixes
538
574
  ---------
539
575
 
@@ -561,7 +597,6 @@ Features
561
597
 
562
598
  - proxy requests from the replica to the master will use number of seconds from the new ``--proxy-timeout`` option as their timeout value.
563
599
 
564
-
565
600
  Bug Fixes
566
601
  ---------
567
602
 
@@ -584,7 +619,6 @@ Deprecations and Removals
584
619
 
585
620
  - The ``--passwd`` option is deprecated, use the new ``devpi-passwd`` command instead.
586
621
 
587
-
588
622
  Features
589
623
  --------
590
624
 
@@ -598,7 +632,6 @@ Features
598
632
 
599
633
  - Storage options can now be specified as a dict in yaml config files.
600
634
 
601
-
602
635
  Bug Fixes
603
636
  ---------
604
637
 
@@ -620,7 +653,6 @@ Bug Fixes
620
653
 
621
654
  - Unnecessary database writes where the final value didn't change are now prevented.
622
655
 
623
-
624
656
  Other Changes
625
657
  -------------
626
658
 
@@ -654,7 +686,6 @@ Deprecations and Removals
654
686
 
655
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.
656
688
 
657
-
658
689
  Features
659
690
  --------
660
691
 
@@ -672,7 +703,6 @@ Features
672
703
 
673
704
  - when credentials for the user are rejected, the error message now says so instead of claiming the user could not be found.
674
705
 
675
-
676
706
  Other Changes
677
707
  -------------
678
708
 
@@ -707,7 +737,6 @@ Features
707
737
 
708
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.
709
739
 
710
-
711
740
  Bug Fixes
712
741
  ---------
713
742
 
@@ -717,7 +746,6 @@ Bug Fixes
717
746
 
718
747
  - use timeout when waiting for data from master in replica on mirror simple pages.
719
748
 
720
-
721
749
  Other Changes
722
750
  -------------
723
751
 
@@ -749,7 +777,6 @@ Features
749
777
 
750
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.
751
779
 
752
-
753
780
  Bug Fixes
754
781
  ---------
755
782
 
@@ -779,7 +806,6 @@ Deprecations and Removals
779
806
 
780
807
  - Deprecated DEVPI_SERVERDIR environment variable in favor of DEVPISERVER_SERVERDIR to be consistent with the other option overwrites.
781
808
 
782
-
783
809
  Features
784
810
  --------
785
811
 
@@ -799,7 +825,6 @@ Features
799
825
 
800
826
  - Better handling of 404s in mirror indexes. Every project not found would create an entry in the database which would grow it unnecessarily.
801
827
 
802
-
803
828
  Bug Fixes
804
829
  ---------
805
830
 
@@ -837,7 +862,6 @@ Features
837
862
 
838
863
  - add `--request-timeout` option to provide adjustable request timeout
839
864
 
840
-
841
865
  Bug Fixes
842
866
  ---------
843
867
 
@@ -863,7 +887,6 @@ Features
863
887
 
864
888
  - Use ``pypi.org`` as new default for ``root/pypi`` mirror index.
865
889
 
866
-
867
890
  Bug Fixes
868
891
  ---------
869
892
 
@@ -883,7 +906,6 @@ Features
883
906
 
884
907
  - fix issue469: Add ``acl_toxresult_upload`` to index configuration.
885
908
 
886
-
887
909
  Bug Fixes
888
910
  ---------
889
911
 
@@ -0,0 +1,136 @@
1
+
2
+
3
+ =========
4
+ Changelog
5
+ =========
6
+
7
+
8
+
9
+
10
+ .. towncrier release notes start
11
+
12
+ 6.17.0 (2025-08-27)
13
+ ===================
14
+
15
+ Deprecations and Removals
16
+ -------------------------
17
+
18
+ - Dropped support for migrating old password hashes that were replaced in devpi-server 4.2.0.
19
+
20
+ - Removed support for basic authorization in primary URL. The connection is already secured by a bearer token header.
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.
25
+
26
+ Features
27
+ --------
28
+
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.
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.
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).
72
+
73
+ Bug Fixes
74
+ ---------
75
+
76
+ - Preserve hash when importing mirror data to prevent unnecessary updates later on.
77
+
78
+ - Keep original metadata_version in database.
79
+
80
+
81
+ 6.15.0 (2025-05-18)
82
+ ===================
83
+
84
+ Features
85
+ --------
86
+
87
+ - Add ``--connection-limit`` option to devpi-server passed on to waitress.
88
+
89
+
90
+ 6.14.0 (2024-10-16)
91
+ ===================
92
+
93
+ Features
94
+ --------
95
+
96
+ - Allow pushing of versions which only have documentation and no releases.
97
+
98
+ - Allow pushing of release files only with no documentation. Requires devpi-client 7.2.0.
99
+
100
+ - Allow pushing of documentation only with no release files. Requires devpi-client 7.2.0.
101
+
102
+ Bug Fixes
103
+ ---------
104
+
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.
106
+
107
+
108
+ 6.13.0 (2024-09-19)
109
+ ===================
110
+
111
+ Deprecations and Removals
112
+ -------------------------
113
+
114
+ - Remove/Deprecate "master" related terminology in favor of "primary".
115
+ Usage related changes are the switch to ``--primary-url`` instead of ``--master-url`` and ``--role=primary`` instead of ``--role=master``.
116
+ Using the old terms will now output warnings.
117
+ The ``+status`` API has additional fields and the ``role`` field content will change with 7.0.0.
118
+
119
+ Features
120
+ --------
121
+
122
+ - Enable logging command line options for all commands.
123
+
124
+ - Added support uv pip as an installer.
125
+
126
+ Bug Fixes
127
+ ---------
128
+
129
+ - Don't report on lagging event processing while replicating.
130
+
131
+ - Report primary serial correctly with streaming replication.
132
+
133
+ - Don't store file data in memory when fetching a release while pushing from a mirror.
134
+
135
+ - Only warn about replica not being in sync instead of fatal status while still replicating.
136
+