66import shutil
77import subprocess
88from pathlib import Path
9- from typing import TYPE_CHECKING
109from urllib .request import urlopen
1110
1211from natsort import natsorted
1312
14- if TYPE_CHECKING :
15- from collections .abc import KeysView
16-
1713MVN_BASE_URL = "https://search.maven.org"
14+ MVN_CENTRAL_BASE_URL = "https://central.sonatype.com"
1815
1916
2017def convert_pre_release_version (version : str ) -> str :
@@ -35,9 +32,8 @@ def convert_pre_release_version(version: str) -> str:
3532def 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
8386def 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