33import os
44import urllib .request as url_lib
55import zipfile
6+ from packaging .version import parse as version_parser
67
78
89EXTENSION_ROOT = os .path .dirname (os .path .dirname (os .path .abspath (__file__ )))
910DEBUGGER_DEST = os .path .join (EXTENSION_ROOT , "pythonFiles" , "lib" , "python" , "new_ptvsd" , "wheels" )
1011DEBUGGER_PACKAGE = "ptvsd"
11- DEBUGGER_VERSION = "5.0.0a11"
1212DEBUGGER_PYTHON_VERSIONS = ("cp37" ,)
1313
1414
1515def _contains (s , parts = ()):
1616 return any (p for p in parts if p in s )
1717
1818
19- def _get_debugger_wheel_urls ():
19+ def _get_package_data ():
2020 json_uri = "https://pypi.org/pypi/{0}/json" .format (DEBUGGER_PACKAGE )
2121 # Response format: https://warehouse.readthedocs.io/api-reference/json/#project
2222 # Release metadata format: https://github.com/pypa/interoperability-peps/blob/master/pep-0426-core-metadata.rst
2323 with url_lib .urlopen (json_uri ) as response :
24- json_response = json .loads (response .read ())
25- return list (
26- r ["url" ]
27- for r in json_response ["releases" ][DEBUGGER_VERSION ]
28- if _contains (r ["url" ], DEBUGGER_PYTHON_VERSIONS )
29- )
24+ return json .loads (response .read ())
3025
3126
32- def _download_and_extract (root , url ):
27+ def _get_debugger_wheel_urls (data , version ):
28+ return list (
29+ r ["url" ]
30+ for r in data ["releases" ][version ]
31+ if _contains (r ["url" ], DEBUGGER_PYTHON_VERSIONS )
32+ )
33+
34+
35+ def _download_and_extract (root , url , version ):
3336 root = os .getcwd () if root is None or root == "." else root
34- prefix = os .path .join ("ptvsd-{0}.data" .format (DEBUGGER_VERSION ), "purelib" )
37+ prefix = os .path .join ("ptvsd-{0}.data" .format (version ), "purelib" )
3538 with url_lib .urlopen (url ) as response :
3639 # Extract only the contents of the purelib subfolder (parent folder of ptvsd),
3740 # since ptvsd files rely on the presence of a 'ptvsd' folder.
@@ -49,8 +52,11 @@ def _download_and_extract(root, url):
4952
5053
5154def main (root ):
52- for url in _get_debugger_wheel_urls ():
53- _download_and_extract (root , url )
55+ data = _get_package_data ()
56+ latest_version = max (data ["releases" ].keys (), key = version_parser )
57+
58+ for url in _get_debugger_wheel_urls (data , latest_version ):
59+ _download_and_extract (root , url , latest_version )
5460
5561
5662if __name__ == "__main__" :
0 commit comments