devpi-server 6.9.0__tar.gz → 6.9.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devpi-server-6.9.0 → devpi-server-6.9.1}/CHANGELOG +11 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/PKG-INFO +12 -30
- devpi-server-6.9.1/devpi_server/__init__.py +1 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/config.py +0 -2
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/keyfs.py +9 -1
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/keyfs_sqlite.py +8 -2
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/replica.py +3 -2
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/views.py +10 -1
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server.egg-info/PKG-INFO +12 -30
- {devpi-server-6.9.0 → devpi-server-6.9.1}/setup.py +1 -1
- devpi-server-6.9.0/devpi_server/__init__.py +0 -1
- {devpi-server-6.9.0 → devpi-server-6.9.1}/AUTHORS +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/LICENSE +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/MANIFEST.in +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/README.rst +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/__main__.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/auth.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/auth_basic.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/auth_devpi.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/__init__.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/crontab.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/devpi.service.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/launchd-macos.txt.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/nginx-devpi-caching-http.conf.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/nginx-devpi-caching-location.conf.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/nginx-devpi-caching-proxy.conf.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/nginx-devpi-caching-server.conf.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/nginx-devpi.conf.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/supervisor-devpi.conf.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/supervisord.conf.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/windows-service.txt.template +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/exceptions.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/filestore.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/fileutil.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/fsck.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/genconfig.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/hookspecs.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/importexport.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/init.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/interfaces.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/keyfs_sqlite_fs.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/keyfs_types.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/log.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/main.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/middleware.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/mirror.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/model.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/mythread.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/passwd.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/readonly.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/sizeof.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/vendor/_pip.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/view_auth.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server.egg-info/SOURCES.txt +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server.egg-info/dependency_links.txt +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server.egg-info/entry_points.txt +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server.egg-info/not-zip-safe +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server.egg-info/requires.txt +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server.egg-info/top_level.txt +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/pyproject.toml +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/pytest_devpi_server/__init__.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/setup.cfg +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/__init__.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/conftest.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/example.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/functional.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/badindexname/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/badusername/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/basescycle/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/createdmodified/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/deletedbase/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/mirrordata/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/mirrordata/root/pypi/dddttt/0.1.dev1/dddttt-0.1.dev1.tar.gz +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/modifiedpypi/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/nocreatedmodified/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/normalization/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/normalization/root/dev/hello.pkg/hello.pkg-1.0.tar.gz +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/normalization_merge/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/normalization_merge/root/dev/hello-pkg/hello.pkg-1.1.tar.gz +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/normalization_merge/root/dev/hello.pkg/hello.pkg-1.0.tar.gz +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/norootpypi/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/nouser/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/removedindexplugin/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/removedindexplugin/user/dev/pkg/pkg-1.0.tar.gz +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/toxresult_naming_scheme/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/toxresult_naming_scheme/root/dev/hello/0.9/hello-0.9.tar.gz +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/toxresult_naming_scheme/root/dev/hello/sha256=ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73/hello-0.9.tar.gz.toxresult0 +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/toxresult_upload_default/dataindex.json +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/reqmock.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/simpypi.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_auth.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_authcheck.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_config.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_conftest.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_filestore.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_fileutil.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_genconfig.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_importexport.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_keyfs.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_keyfs_sqlite_fs.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_log.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_main.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_mirror.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_mirror_no_project_list.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_model.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_mythread.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_nginx.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_nginx_replica.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_permissions.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_readonly.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_replica.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_replica_functional.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_reqmock.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_stage_customizer.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_streaming.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_streaming_nginx.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_streaming_replica.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_streaming_replica_nginx.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_view_auth.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_views.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_views_patch.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_views_push_external.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/test_views_status.py +0 -0
- {devpi-server-6.9.0 → devpi-server-6.9.1}/tox.ini +0 -0
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
.. towncrier release notes start
|
|
4
4
|
|
|
5
|
+
6.9.1 (2023-07-02)
|
|
6
|
+
==================
|
|
7
|
+
|
|
8
|
+
Bug Fixes
|
|
9
|
+
---------
|
|
10
|
+
|
|
11
|
+
- Prevent error in find_pre_existing_file in case of incomplete metadata.
|
|
12
|
+
|
|
13
|
+
- Fix #980: Remove long deprecated backward compatibility for old pluggy versions to fix error with pluggy 1.1.0.
|
|
14
|
+
|
|
15
|
+
|
|
5
16
|
6.9.0 (2023-05-23)
|
|
6
17
|
==================
|
|
7
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: devpi-server
|
|
3
|
-
Version: 6.9.
|
|
3
|
+
Version: 6.9.1
|
|
4
4
|
Summary: devpi-server: reliable private and pypi.org caching server
|
|
5
5
|
Home-page: https://devpi.net
|
|
6
6
|
Maintainer: Florian Schulze
|
|
@@ -102,6 +102,17 @@ Changelog
|
|
|
102
102
|
|
|
103
103
|
.. towncrier release notes start
|
|
104
104
|
|
|
105
|
+
6.9.1 (2023-07-02)
|
|
106
|
+
==================
|
|
107
|
+
|
|
108
|
+
Bug Fixes
|
|
109
|
+
---------
|
|
110
|
+
|
|
111
|
+
- Prevent error in find_pre_existing_file in case of incomplete metadata.
|
|
112
|
+
|
|
113
|
+
- Fix #980: Remove long deprecated backward compatibility for old pluggy versions to fix error with pluggy 1.1.0.
|
|
114
|
+
|
|
115
|
+
|
|
105
116
|
6.9.0 (2023-05-23)
|
|
106
117
|
==================
|
|
107
118
|
|
|
@@ -179,32 +190,3 @@ Bug Fixes
|
|
|
179
190
|
|
|
180
191
|
- Preserve toxresult filenames during import to keep them being accessible on the same URLs after the fix for #686 in 5.2.0.
|
|
181
192
|
|
|
182
|
-
|
|
183
|
-
6.6.0 (2022-08-16)
|
|
184
|
-
==================
|
|
185
|
-
|
|
186
|
-
Features
|
|
187
|
-
--------
|
|
188
|
-
|
|
189
|
-
- Fix #592: return dict from ``list_projects_perstage`` of mirrors where the values contain the un-normalized project name. This allows support in devpi-web 4.1.0 to index them correctly.
|
|
190
|
-
|
|
191
|
-
- Check name in project list instead of fetching project page for mirrors. This improves response times and avoids leaking typos of private package names upstream.
|
|
192
|
-
|
|
193
|
-
- Use ETag header if provided by mirror to reduce bandwidth usage and latency.
|
|
194
|
-
|
|
195
|
-
- Prevent concurrent updates of simple links on mirrors with a short lived lock.
|
|
196
|
-
|
|
197
|
-
- 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).
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
Bug Fixes
|
|
201
|
-
---------
|
|
202
|
-
|
|
203
|
-
- Fix #743: support PEP427 escaped wheels with local version, where the + is replaced by _.
|
|
204
|
-
|
|
205
|
-
- Fix #895: store and return content of data-yanked.
|
|
206
|
-
|
|
207
|
-
- Fix #908: include basic auth from ``mirror_url`` when fetching packages.
|
|
208
|
-
|
|
209
|
-
- Fix #914: switch to write transaction as late as possible when streaming a file from a mirror.
|
|
210
|
-
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '6.9.1'
|
|
@@ -45,8 +45,6 @@ def strtobool(val):
|
|
|
45
45
|
|
|
46
46
|
def get_pluginmanager(load_entrypoints=True):
|
|
47
47
|
pm = PluginManager("devpiserver")
|
|
48
|
-
# support old plugins, but emit deprecation warnings
|
|
49
|
-
pm._implprefix = "devpiserver_"
|
|
50
48
|
pm.add_hookspecs(hookspecs)
|
|
51
49
|
# XXX load internal plugins here
|
|
52
50
|
if load_entrypoints:
|
|
@@ -28,6 +28,10 @@ from devpi_common.types import cached_property
|
|
|
28
28
|
absent = object()
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
class KeyfsTimeoutError(TimeoutError):
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
|
|
31
35
|
class MissingFileException(Exception):
|
|
32
36
|
def __init__(self, relpath, serial):
|
|
33
37
|
msg = "missing file '%s' at serial %s" % (relpath, serial)
|
|
@@ -761,7 +765,11 @@ class Transaction(object):
|
|
|
761
765
|
"restarting %s transaction afresh as %s transaction",
|
|
762
766
|
"write" if self.write else "read",
|
|
763
767
|
"write" if write else "read")
|
|
764
|
-
|
|
768
|
+
try:
|
|
769
|
+
newtx = self.__class__(self.keyfs, write=write)
|
|
770
|
+
except BaseException:
|
|
771
|
+
self.doomed = True
|
|
772
|
+
raise
|
|
765
773
|
self.__dict__ = newtx.__dict__
|
|
766
774
|
|
|
767
775
|
def doom(self):
|
|
@@ -2,6 +2,7 @@ from devpi_common.types import cached_property
|
|
|
2
2
|
from .config import hookimpl
|
|
3
3
|
from .fileutil import dumps, loads
|
|
4
4
|
from .interfaces import IStorageConnection2
|
|
5
|
+
from .keyfs import KeyfsTimeoutError
|
|
5
6
|
from .keyfs import RelpathInfo
|
|
6
7
|
from .keyfs import get_relpath_at
|
|
7
8
|
from .log import threadlog, thread_push_log, thread_pop_log
|
|
@@ -115,7 +116,11 @@ class BaseConnection:
|
|
|
115
116
|
self._sqlconn.commit()
|
|
116
117
|
|
|
117
118
|
def rollback(self):
|
|
118
|
-
|
|
119
|
+
try:
|
|
120
|
+
self._sqlconn.rollback()
|
|
121
|
+
except sqlite3.ProgrammingError as e:
|
|
122
|
+
if not e.args or 'closed database' not in e.args[0]:
|
|
123
|
+
raise
|
|
119
124
|
|
|
120
125
|
@cached_property
|
|
121
126
|
def last_changelog_serial(self):
|
|
@@ -441,7 +446,8 @@ class BaseStorage(object):
|
|
|
441
446
|
elapsed = time.monotonic() - start_time
|
|
442
447
|
if elapsed > timeout:
|
|
443
448
|
# if it takes this long, something is wrong
|
|
444
|
-
raise
|
|
449
|
+
raise KeyfsTimeoutError(
|
|
450
|
+
f"Timeout after {int(elapsed)} seconds.") from e
|
|
445
451
|
conn = self.Connection(sqlconn, self.basedir, self)
|
|
446
452
|
if closing:
|
|
447
453
|
return contextlib.closing(conn)
|
|
@@ -855,11 +855,12 @@ class FileReplicationThread:
|
|
|
855
855
|
path = os.path.join(self.file_search_path, entry.relpath)
|
|
856
856
|
if not os.path.exists(path):
|
|
857
857
|
# look for file in export layout
|
|
858
|
-
|
|
859
|
-
self.file_search_path,
|
|
858
|
+
parts = (
|
|
860
859
|
entry.user, entry.index,
|
|
861
860
|
entry.project, entry.version,
|
|
862
861
|
entry.basename)
|
|
862
|
+
if all(part is not None for part in parts):
|
|
863
|
+
path = os.path.join(self.file_search_path, *parts)
|
|
863
864
|
if not os.path.exists(path):
|
|
864
865
|
threadlog.debug("path for existing file not found: %s", path)
|
|
865
866
|
return
|
|
@@ -16,6 +16,7 @@ from pyramid.interfaces import IRootFactory
|
|
|
16
16
|
from pyramid.interfaces import IRoutesMapper
|
|
17
17
|
from pyramid.httpexceptions import HTTPException, HTTPFound, HTTPSuccessful
|
|
18
18
|
from pyramid.httpexceptions import HTTPForbidden
|
|
19
|
+
from pyramid.httpexceptions import HTTPInternalServerError
|
|
19
20
|
from pyramid.httpexceptions import HTTPOk
|
|
20
21
|
from pyramid.httpexceptions import HTTPUnauthorized
|
|
21
22
|
from pyramid.httpexceptions import exception_response
|
|
@@ -36,9 +37,11 @@ from devpi_common.request import new_requests_session
|
|
|
36
37
|
from devpi_common.validation import normalize_name, is_valid_archive_name
|
|
37
38
|
|
|
38
39
|
from .config import hookimpl
|
|
40
|
+
from .exceptions import lazy_format_exception_only
|
|
39
41
|
from .filestore import BadGateway
|
|
40
42
|
from .filestore import get_checksum_error
|
|
41
43
|
from .fileutil import buffered_iterator
|
|
44
|
+
from .keyfs import KeyfsTimeoutError
|
|
42
45
|
from .model import InvalidIndex, InvalidIndexconfig, InvalidUser, InvalidUserconfig
|
|
43
46
|
from .model import ReadonlyIndex
|
|
44
47
|
from .model import RemoveValue
|
|
@@ -223,7 +226,13 @@ def tween_keyfs_transaction(handler, registry):
|
|
|
223
226
|
write = is_mutating_http_method(request.method) and not is_replica
|
|
224
227
|
with keyfs.transaction(write=write) as tx:
|
|
225
228
|
threadlog.debug("in-transaction %s", tx.at_serial)
|
|
226
|
-
|
|
229
|
+
try:
|
|
230
|
+
response = handler(request)
|
|
231
|
+
except KeyfsTimeoutError as e:
|
|
232
|
+
msg = lazy_format_exception_only(e)
|
|
233
|
+
threadlog.error(
|
|
234
|
+
"Keyfs timeout: %s", msg)
|
|
235
|
+
return HTTPInternalServerError(msg)
|
|
227
236
|
set_header_devpi_serial(response, tx)
|
|
228
237
|
return response
|
|
229
238
|
return request_tx_handler
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: devpi-server
|
|
3
|
-
Version: 6.9.
|
|
3
|
+
Version: 6.9.1
|
|
4
4
|
Summary: devpi-server: reliable private and pypi.org caching server
|
|
5
5
|
Home-page: https://devpi.net
|
|
6
6
|
Maintainer: Florian Schulze
|
|
@@ -102,6 +102,17 @@ Changelog
|
|
|
102
102
|
|
|
103
103
|
.. towncrier release notes start
|
|
104
104
|
|
|
105
|
+
6.9.1 (2023-07-02)
|
|
106
|
+
==================
|
|
107
|
+
|
|
108
|
+
Bug Fixes
|
|
109
|
+
---------
|
|
110
|
+
|
|
111
|
+
- Prevent error in find_pre_existing_file in case of incomplete metadata.
|
|
112
|
+
|
|
113
|
+
- Fix #980: Remove long deprecated backward compatibility for old pluggy versions to fix error with pluggy 1.1.0.
|
|
114
|
+
|
|
115
|
+
|
|
105
116
|
6.9.0 (2023-05-23)
|
|
106
117
|
==================
|
|
107
118
|
|
|
@@ -179,32 +190,3 @@ Bug Fixes
|
|
|
179
190
|
|
|
180
191
|
- Preserve toxresult filenames during import to keep them being accessible on the same URLs after the fix for #686 in 5.2.0.
|
|
181
192
|
|
|
182
|
-
|
|
183
|
-
6.6.0 (2022-08-16)
|
|
184
|
-
==================
|
|
185
|
-
|
|
186
|
-
Features
|
|
187
|
-
--------
|
|
188
|
-
|
|
189
|
-
- Fix #592: return dict from ``list_projects_perstage`` of mirrors where the values contain the un-normalized project name. This allows support in devpi-web 4.1.0 to index them correctly.
|
|
190
|
-
|
|
191
|
-
- Check name in project list instead of fetching project page for mirrors. This improves response times and avoids leaking typos of private package names upstream.
|
|
192
|
-
|
|
193
|
-
- Use ETag header if provided by mirror to reduce bandwidth usage and latency.
|
|
194
|
-
|
|
195
|
-
- Prevent concurrent updates of simple links on mirrors with a short lived lock.
|
|
196
|
-
|
|
197
|
-
- 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).
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
Bug Fixes
|
|
201
|
-
---------
|
|
202
|
-
|
|
203
|
-
- Fix #743: support PEP427 escaped wheels with local version, where the + is replaced by _.
|
|
204
|
-
|
|
205
|
-
- Fix #895: store and return content of data-yanked.
|
|
206
|
-
|
|
207
|
-
- Fix #908: include basic auth from ``mirror_url`` when fetching packages.
|
|
208
|
-
|
|
209
|
-
- Fix #914: switch to write transaction as late as possible when streaming a file from a mirror.
|
|
210
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '6.9.0'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/nginx-devpi-caching-http.conf.template
RENAMED
|
File without changes
|
|
File without changes
|
{devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/nginx-devpi-caching-proxy.conf.template
RENAMED
|
File without changes
|
{devpi-server-6.9.0 → devpi-server-6.9.1}/devpi_server/cfg/nginx-devpi-caching-server.conf.template
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devpi-server-6.9.0 → devpi-server-6.9.1}/test_devpi_server/importexportdata/nouser/dataindex.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|