diff --git a/src/azure-cli-core/azure/cli/core/extension/__init__.py b/src/azure-cli-core/azure/cli/core/extension/__init__.py index 368fa9b5778..b286daf2e24 100644 --- a/src/azure-cli-core/azure/cli/core/extension/__init__.py +++ b/src/azure-cli-core/azure/cli/core/extension/__init__.py @@ -144,18 +144,11 @@ def get_metadata(self): metadata.update(azext_metadata) for dist_info_dirname in info_dirs: - parsed_dist_info_dir = WHEEL_INFO_RE(dist_info_dirname) - if not parsed_dist_info_dir: - continue - - parsed_dist_info_dir = parsed_dist_info_dir.groupdict().get('name') - if os.path.split(parsed_dist_info_dir)[-1] == self.name.replace('-', '_'): - whl_metadata_filepath = os.path.join(dist_info_dirname, WHL_METADATA_FILENAME) - if os.path.isfile(whl_metadata_filepath): - with open(whl_metadata_filepath) as f: - metadata.update(json.loads(f.read())) - elif os.path.isfile(os.path.join(dist_info_dirname, 'PKG-INFO')): - metadata.update(pkginfo.Develop(dist_info_dirname).__dict__) + try: + ext_whl_metadata = pkginfo.Wheel(dist_info_dirname) + metadata.update(vars(ext_whl_metadata)) + except ValueError: + logger.warning('extension % contains invalid metadata for Python Package', self.name) return metadata @@ -214,27 +207,13 @@ def get_metadata(self): if azext_metadata: metadata.update(azext_metadata) - def _apply_egginfo_metadata(filename): - # extract version info for dev extensions from PKG-INFO - if os.path.isfile(filename): - with open(filename) as f: - for line in f.readlines(): - try: - key, val = line.split(':', 1) - key = key.lower() - if key == 'version': - metadata[key] = '{}'.format(val.strip()) - elif key == 'name': - # temporary fix extension name is None - # until wheel upgrade and metadata structure in azure-cli-extensions has upgraded too. - # https://github.com/Azure/azure-cli/pull/12583 - metadata[key] = val.strip() - except ValueError: - continue - for egg_info_dirname in egg_info_dirs: - egg_metadata_filepath = os.path.join(ext_dir, egg_info_dirname, EGG_INFO_METADATA_FILE_NAME) - _apply_egginfo_metadata(egg_metadata_filepath) + egg_metadata_path = os.path.join(ext_dir, egg_info_dirname, ) + try: + ext_whl_metadata = pkginfo.Develop(egg_metadata_path) + metadata.update(vars(ext_whl_metadata)) + except ValueError: + logger.warning('extension % contains invalid metadata for Python Package', self.name) return metadata diff --git a/src/azure-cli-core/setup.py b/src/azure-cli-core/setup.py index ea6d1b40b85..e3b8f526189 100644 --- a/src/azure-cli-core/setup.py +++ b/src/azure-cli-core/setup.py @@ -65,7 +65,8 @@ 'pyopenssl>=17.1.0', # https://github.com/pyca/pyopenssl/pull/612 'requests~=2.20', 'six~=1.12', - 'wheel==0.30.0', + 'wheel>=0.30.0', + 'pkginfo>=1.5.0.1', 'azure-mgmt-resource==9.0.0', 'azure-mgmt-core==1.0.0' ]