Skip to content

Commit 6343aab

Browse files
authored
Merge pull request #22 from eggplants/pagination
Collect paginated responses of Maven Central
2 parents cd604ed + 2a960c3 commit 6343aab

1 file changed

Lines changed: 23 additions & 20 deletions

File tree

publish.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,12 @@
66
import shutil
77
import subprocess
88
from pathlib import Path
9-
from typing import TYPE_CHECKING
109
from urllib.request import urlopen
1110

1211
from natsort import natsorted
1312

14-
if TYPE_CHECKING:
15-
from collections.abc import KeysView
16-
1713
MVN_BASE_URL = "https://search.maven.org"
14+
MVN_CENTRAL_BASE_URL = "https://central.sonatype.com"
1815

1916

2017
def convert_pre_release_version(version: str) -> str:
@@ -35,9 +32,8 @@ def convert_pre_release_version(version: str) -> str:
3532
def download_openapi_generator_jar(version: str) -> None:
3633
download_url = (
3734
MVN_BASE_URL
38-
+ "/remotecontent?filepath=org/openapitools/openapi-generator-cli/"
39-
+ version
40-
+ f"/openapi-generator-cli-{version}.jar"
35+
+ "/remotecontent?filepath=org/openapitools/openapi-generator-cli"
36+
+ f"/{version}/openapi-generator-cli-{version}.jar"
4137
)
4238

4339
Path("openapi-generator.jar").unlink(missing_ok=True)
@@ -54,17 +50,24 @@ def download_openapi_generator_jar(version: str) -> None:
5450
openapi_generator_jar.close()
5551

5652

57-
def get_available_versions() -> list[str]:
58-
mvn_url = (
59-
MVN_BASE_URL + "/solrsearch/select?q=g:org.openapitools+AND+a:openapi-generator-cli&core=gav"
60-
"&start=0&rows=200"
61-
)
62-
response = urlopen(mvn_url) # noqa: S310
63-
docs = json.loads(response.read())["response"]["docs"]
64-
return [convert_pre_release_version(doc["v"]) for doc in docs]
65-
66-
67-
def get_published_vesions() -> KeysView[str]:
53+
def get_available_versions() -> set[str]:
54+
rows = 200
55+
versions: list[str] = []
56+
for page_index, _ in enumerate(iter(int, 1)): # 0..Inf
57+
mvn_url = (
58+
MVN_CENTRAL_BASE_URL
59+
+ "/solrsearch/select?q=g:org.openapitools+AND+a:openapi-generator-cli&core=gav&format=json"
60+
f"&start={page_index}&rows={rows}"
61+
)
62+
response = urlopen(mvn_url) # noqa: S310
63+
docs = json.loads(response.read())["response"]["docs"]
64+
if len(docs) == 0:
65+
break
66+
versions.extend(convert_pre_release_version(doc["v"]) for doc in docs)
67+
return set(versions)
68+
69+
70+
def get_published_vesions() -> set[str]:
6871
pypi_url = "https://pypi.org/pypi/openapi-generator-cli/json"
6972
response = urlopen(pypi_url) # noqa: S310
7073

@@ -77,7 +80,7 @@ def get_published_vesions() -> KeysView[str]:
7780
msg = f"Expected dict, got {type(published_releases)}"
7881
raise TypeError(msg)
7982

80-
return published_releases.keys()
83+
return set(published_releases.keys())
8184

8285

8386
def update_package_version(version: str) -> None:
@@ -103,7 +106,7 @@ def publish(*, dryrun: bool = False) -> None:
103106
pytest_path = shutil.which("pytest")
104107
poetry_path = shutil.which("poetry")
105108

106-
unpublished_versions = natsorted(set(get_available_versions()) - set(get_published_vesions()))
109+
unpublished_versions = natsorted(get_available_versions() - get_published_vesions())
107110

108111
if len(unpublished_versions) == 0:
109112
print("[!] Nothing to be released.")

0 commit comments

Comments
 (0)