From f4d5b6a3227b91bda39f5c1cc7d5d08824d2362f Mon Sep 17 00:00:00 2001 From: Jianhui Harold Date: Mon, 30 Mar 2020 00:40:35 +0800 Subject: [PATCH 1/2] use pkginfo to query and dump metadata of Python Package --- azdev/operations/extensions/__init__.py | 4 ++-- azdev/operations/extensions/util.py | 28 +++++++++++++++---------- setup.py | 3 ++- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/azdev/operations/extensions/__init__.py b/azdev/operations/extensions/__init__.py index 458d22956..1efff7f17 100644 --- a/azdev/operations/extensions/__init__.py +++ b/azdev/operations/extensions/__init__.py @@ -220,7 +220,7 @@ def update_extension_index(extensions): ext_dir = tempfile.mkdtemp(dir=extensions_dir) whl_cache_dir = tempfile.mkdtemp() whl_cache = {} - ext_file = get_whl_from_url(ext_path, extension_name, whl_cache_dir, whl_cache) + ext_file = get_whl_from_url(ext_path, extension_name + '.whl', whl_cache_dir, whl_cache) with open(index_path, 'r') as infile: curr_index = json.loads(infile.read()) @@ -229,7 +229,7 @@ def update_extension_index(extensions): 'downloadUrl': ext_path, 'sha256Digest': _get_sha256sum(ext_file), 'filename': ext_path.split('/')[-1], - 'metadata': get_ext_metadata(ext_dir, ext_file, extension_name) + 'metadata': get_ext_metadata(ext_dir, ext_file) } if extension_name not in curr_index['extensions'].keys(): diff --git a/azdev/operations/extensions/util.py b/azdev/operations/extensions/util.py index 4955b0017..1a9fb979c 100644 --- a/azdev/operations/extensions/util.py +++ b/azdev/operations/extensions/util.py @@ -9,6 +9,7 @@ import re import zipfile +from pkginfo import Wheel from knack.util import CLIError from azdev.utilities import EXTENSION_PREFIX @@ -43,28 +44,33 @@ def _get_azext_metadata(ext_dir): return azext_metadata -def get_ext_metadata(ext_dir, ext_file, ext_name): - # Modification of https://github.com/Azure/azure-cli/blob/dev/src/azure-cli-core/azure/cli/core/extension.py#L89 - WHL_METADATA_FILENAME = 'metadata.json' +def get_ext_metadata(ext_dir, ext_file): zip_ref = zipfile.ZipFile(ext_file, 'r') zip_ref.extractall(ext_dir) zip_ref.close() metadata = {} - dist_info_dirs = [f for f in os.listdir(ext_dir) if f.endswith('.dist-info')] azext_metadata = _get_azext_metadata(ext_dir) if azext_metadata: metadata.update(azext_metadata) - for dist_info_dirname in dist_info_dirs: - parsed_dist_info_dir = WHEEL_INFO_RE(dist_info_dirname) - if parsed_dist_info_dir and parsed_dist_info_dir.groupdict().get('name') == ext_name.replace('-', '_'): - whl_metadata_filepath = os.path.join(ext_dir, dist_info_dirname, WHL_METADATA_FILENAME) - if os.path.isfile(whl_metadata_filepath): - with open(whl_metadata_filepath) as f: - metadata.update(json.load(f)) + + try: + ext_wheel = Wheel(ext_file) + + t = vars(ext_wheel) + del t['filename'] + del t['description'] # del as line too long + + metadata.update(vars(ext_wheel)) + except ValueError: + raise CLIError('{} is not a valid wheel'.format(ext_file)) + return metadata def get_whl_from_url(url, filename, tmp_dir, whl_cache=None): + print('-' * 20, 'get_whl_from_url', '-' * 20) + print(filename) + if not whl_cache: whl_cache = {} if url in whl_cache: diff --git a/setup.py b/setup.py index 096863366..610b6660e 100644 --- a/setup.py +++ b/setup.py @@ -72,8 +72,9 @@ 'requests', 'sphinx==1.6.7', 'tox', - 'wheel==0.30.0', + 'wheel>=0.30.0', 'azure-storage-blob>=1.3.1,<2.0.0', + 'pkginfo>=1.5.0.1', ], extras_require={ ":python_version<'3.0'": ['pylint==1.9.2', 'futures'], From e3ad5ed3dc771081576c4928768d22a346c8d5a7 Mon Sep 17 00:00:00 2001 From: Jianhui Harold Date: Mon, 30 Mar 2020 00:44:36 +0800 Subject: [PATCH 2/2] typo and bug fix --- azdev/operations/extensions/util.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/azdev/operations/extensions/util.py b/azdev/operations/extensions/util.py index 1a9fb979c..470d46cbf 100644 --- a/azdev/operations/extensions/util.py +++ b/azdev/operations/extensions/util.py @@ -58,9 +58,9 @@ def get_ext_metadata(ext_dir, ext_file): t = vars(ext_wheel) del t['filename'] - del t['description'] # del as line too long + del t['description'] # del as description is trivial - metadata.update(vars(ext_wheel)) + metadata.update(t) except ValueError: raise CLIError('{} is not a valid wheel'.format(ext_file)) @@ -68,8 +68,6 @@ def get_ext_metadata(ext_dir, ext_file): def get_whl_from_url(url, filename, tmp_dir, whl_cache=None): - print('-' * 20, 'get_whl_from_url', '-' * 20) - print(filename) if not whl_cache: whl_cache = {}