Implement prerelease filter in SyncPlainHTTP

This commit is contained in:
taoky 2024-08-06 18:17:18 +08:00
parent 231b891565
commit 33e9746a46

View File

@ -613,6 +613,12 @@ def download(
return True, resp return True, resp
def filter_release_from_meta(meta: dict, patterns: list[re.Pattern[str]]) -> None:
for release in list(meta["releases"].keys()):
if match_patterns(release, PRERELEASE_PATTERNS):
del meta["releases"][release]
class SyncPyPI(SyncBase): class SyncPyPI(SyncBase):
def __init__( def __init__(
self, basedir: Path, local_db: LocalVersionKV, sync_packages: bool = False self, basedir: Path, local_db: LocalVersionKV, sync_packages: bool = False
@ -655,9 +661,7 @@ class SyncPyPI(SyncBase):
# filter prerelease, if necessary # filter prerelease, if necessary
if match_patterns(package_name, prerelease_excludes): if match_patterns(package_name, prerelease_excludes):
for release in list(meta["releases"].keys()): filter_release_from_meta(meta, PRERELEASE_PATTERNS)
if match_patterns(release, PRERELEASE_PATTERNS):
del meta["releases"][release]
if self.sync_packages: if self.sync_packages:
# sync packages first, then sync index # sync packages first, then sync index
@ -726,11 +730,6 @@ class SyncPlainHTTP(SyncBase):
prerelease_excludes: list[re.Pattern[str]], prerelease_excludes: list[re.Pattern[str]],
use_db: bool = True, use_db: bool = True,
) -> Optional[int]: ) -> Optional[int]:
if prerelease_excludes:
# TODO
logger.warning(
"prerelease_excludes is currently ignored in SyncPlainHTTP mode."
)
logger.info("updating %s", package_name) logger.info("updating %s", package_name)
package_simple_path = self.simple_dir / package_name package_simple_path = self.simple_dir / package_name
package_simple_path.mkdir(exist_ok=True) package_simple_path.mkdir(exist_ok=True)
@ -751,6 +750,9 @@ class SyncPlainHTTP(SyncBase):
return None return None
assert resp assert resp
meta = resp.json() meta = resp.json()
# filter prerelease, if necessary
if match_patterns(package_name, prerelease_excludes):
filter_release_from_meta(meta, PRERELEASE_PATTERNS)
if self.sync_packages: if self.sync_packages:
release_files = PyPI.get_release_files_from_meta(meta) release_files = PyPI.get_release_files_from_meta(meta)