Skip to content

Commit 1439b5c

Browse files
derekbekoetroydai
authored andcommitted
Handle dashes in extension names better (#4839)
1 parent f061602 commit 1439b5c

4 files changed

Lines changed: 18 additions & 3 deletions

File tree

src/azure-cli-core/azure/cli/core/extension.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def get_metadata(self):
9898
metadata.update(azext_metadata)
9999
for dist_info_dirname in dist_info_dirs:
100100
parsed_dist_info_dir = WHEEL_INFO_RE(dist_info_dirname)
101-
if parsed_dist_info_dir and parsed_dist_info_dir.groupdict().get('name') == self.name:
101+
if parsed_dist_info_dir and parsed_dist_info_dir.groupdict().get('name') == self.name.replace('-', '_'):
102102
whl_metadata_filepath = os.path.join(ext_dir, dist_info_dirname, WHL_METADATA_FILENAME)
103103
if os.path.isfile(whl_metadata_filepath):
104104
with open(whl_metadata_filepath) as f:

src/command_modules/azure-cli-extension/azure/cli/command_modules/extension/custom.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ def _add_whl_ext(source, ext_sha256=None): # pylint: disable=too-many-statement
9292
logger.debug('Extension source is url? %s', is_url)
9393
whl_filename = os.path.basename(url_parse_result.path) if is_url else os.path.basename(source)
9494
parsed_filename = WHEEL_INFO_RE(whl_filename)
95-
extension_name = parsed_filename.groupdict().get('name') if parsed_filename else None
95+
# Extension names can have - but .whl format changes it to _ (PEP 0427). Undo this.
96+
extension_name = parsed_filename.groupdict().get('name').replace('_', '-') if parsed_filename else None
9697
if not extension_name:
9798
raise CLIError('Unable to determine extension name from {}. Is the file name correct?'.format(source))
9899
if extension_exists(extension_name):

src/command_modules/azure-cli-extension/azure/cli/command_modules/extension/tests/test_extension_commands.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from azure.cli.core.util import CLIError
1313
from azure.cli.command_modules.extension.custom import (list_extensions, add_extension, show_extension,
1414
remove_extension, update_extension,
15-
list_available_extensions, OUT_KEY_NAME, OUT_KEY_VERSION)
15+
list_available_extensions, OUT_KEY_NAME, OUT_KEY_VERSION, OUT_KEY_METADATA)
1616
from azure.cli.command_modules.extension._resolve import NoExtensionCandidatesError
1717

1818

@@ -30,6 +30,8 @@ def _compute_file_hash(filename):
3030
MY_EXT_NAME = 'myfirstcliextension'
3131
MY_EXT_SOURCE = _get_test_data_file('myfirstcliextension-0.0.3+dev-py2.py3-none-any.whl')
3232
MY_BAD_EXT_SOURCE = _get_test_data_file('notanextension.txt')
33+
MY_SECOND_EXT_NAME_DASHES = 'my-second-cli-extension'
34+
MY_SECOND_EXT_SOURCE_DASHES = _get_test_data_file('my_second_cli_extension-0.0.1+dev-py2.py3-none-any.whl')
3335

3436

3537
class TestExtensionCommands(unittest.TestCase):
@@ -62,6 +64,18 @@ def test_add_list_show_remove_extension(self):
6264
num_exts = len(list_extensions())
6365
self.assertEqual(num_exts, 0)
6466

67+
def test_add_list_show_remove_extension_with_dashes(self):
68+
add_extension(MY_SECOND_EXT_SOURCE_DASHES)
69+
actual = list_extensions()
70+
self.assertEqual(len(actual), 1)
71+
ext = show_extension(MY_SECOND_EXT_NAME_DASHES)
72+
self.assertEqual(ext[OUT_KEY_NAME], MY_SECOND_EXT_NAME_DASHES)
73+
self.assertIn(OUT_KEY_NAME, ext[OUT_KEY_METADATA], "Unable to get full metadata")
74+
self.assertEqual(ext[OUT_KEY_METADATA][OUT_KEY_NAME], MY_SECOND_EXT_NAME_DASHES)
75+
remove_extension(MY_SECOND_EXT_NAME_DASHES)
76+
num_exts = len(list_extensions())
77+
self.assertEqual(num_exts, 0)
78+
6579
def test_add_extension_twice(self):
6680
add_extension(MY_EXT_SOURCE)
6781
num_exts = len(list_extensions())

0 commit comments

Comments
 (0)