Skip to content

Commit 85ae08b

Browse files
Read from json pypypackage
1 parent db2e264 commit 85ae08b

File tree

1 file changed

+36
-5
lines changed

1 file changed

+36
-5
lines changed

noxfile.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,21 +97,27 @@ def install_bundled_libs(session):
9797
target = os.environ.get("VSCETARGET", "")
9898
print("target:", target)
9999
if "darwin" in target:
100-
download_url(DEBUGPY_WHEEL_URLS["macOS"])
100+
# download_url(DEBUGPY_WHEEL_URLS["macOS"])
101+
_get_debugpy_url("1.7.0", "macosx")
101102
elif "win32-ia32" == target:
102-
download_url(DEBUGPY_WHEEL_URLS["win32"])
103+
_get_debugpy_url("1.7.0", "win32")
104+
# download_url(DEBUGPY_WHEEL_URLS["win32"])
103105
elif "win32-x64" == target:
104-
download_url(DEBUGPY_WHEEL_URLS["win64"])
106+
_get_debugpy_url("1.7.0", "win_amd64")
107+
# download_url(DEBUGPY_WHEEL_URLS["win64"])
105108
elif "linux-x64" == target:
106-
download_url(DEBUGPY_WHEEL_URLS["linux"])
109+
_get_debugpy_url("1.7.0", "manylinux")
110+
# download_url(DEBUGPY_WHEEL_URLS["linux"])
107111
else:
108-
download_url(DEBUGPY_WHEEL_URLS["any"])
112+
_get_debugpy_url("1.7.0")
113+
# download_url(DEBUGPY_WHEEL_URLS["any"])
109114

110115

111116
def download_url(value):
112117
with url_lib.urlopen(value["url"]) as response:
113118
data = response.read()
114119
hash_algorithm, hash_digest = value["hash"]
120+
print(hash_digest)
115121
if hashlib.new(hash_algorithm, data).hexdigest() != hash_digest:
116122
raise ValueError("Failed hash verification for {}.".format(value["url"]))
117123
print("Download: ", value["url"])
@@ -143,3 +149,28 @@ def update_build_number(session: nox.Session) -> None:
143149
session.log(f"Updating version from {package_json['version']} to {version}")
144150
package_json["version"] = version
145151
package_json_path.write_text(json.dumps(package_json, indent=4), encoding="utf-8")
152+
153+
def _get_pypi_package_data(package_name):
154+
json_uri = "https://pypi.org/pypi/{0}/json".format(package_name)
155+
# Response format: https://warehouse.readthedocs.io/api-reference/json/#project
156+
# Release metadata format: https://github.com/pypa/interoperability-peps/blob/master/pep-0426-core-metadata.rst
157+
with url_lib.urlopen(json_uri) as response:
158+
return json.loads(response.read())
159+
160+
def _get_debugpy_url(version="latest", platform="none-any", cp="cp311"):
161+
from packaging.version import parse as version_parser
162+
163+
data = _get_pypi_package_data('debugpy')
164+
165+
if version == "latest":
166+
use_version = max(data["releases"].keys(), key=version_parser)
167+
else:
168+
use_version = version
169+
170+
data = list(
171+
{"url": r["url"], "hash": ("sha256", r["digests"]["sha256"])} for r in data["releases"][use_version] if _contains(r["filename"], ("{}-{}".format(cp, platform),))
172+
)[0]
173+
download_url(data)
174+
175+
def _contains(s, parts=()):
176+
return any(p for p in parts if p in s)

0 commit comments

Comments
 (0)