From f8d15aca328526905e31b551cb6a8632dbe35442 Mon Sep 17 00:00:00 2001 From: changlong-liu <59815250+changlong-liu@users.noreply.github.com> Date: Thu, 23 Apr 2020 15:43:05 +0800 Subject: [PATCH] fix #325: An action doesn't exist in RP databox (#331) * allow muli hyphen in extensionName * fix #325: An action doesn't exist in RP databox --- src/plugins/azgenerator/Generator.ts | 2 +- .../azgenerator/TemplateAzureCliActions.ts | 34 +++++++++---------- .../datafactory/input/datafactory.json | 16 +++++++++ .../azext_datafactory/generated/_params.py | 5 ++- .../azext_datafactory/generated/action.py | 23 +++++++++++++ .../azext_datafactory/generated/custom.py | 3 +- .../_factory_operations_async.py | 5 ++- .../datafactory/models/__init__.py | 3 ++ .../datafactory/models/_models.py | 29 ++++++++++++++++ .../datafactory/models/_models_py3.py | 32 +++++++++++++++++ .../operations/_factory_operations.py | 5 ++- .../output/src/datafactory/report.md | 1 + 12 files changed, 136 insertions(+), 22 deletions(-) diff --git a/src/plugins/azgenerator/Generator.ts b/src/plugins/azgenerator/Generator.ts index a7f9d5cd6..e223429fc 100644 --- a/src/plugins/azgenerator/Generator.ts +++ b/src/plugins/azgenerator/Generator.ts @@ -35,7 +35,7 @@ export async function GenerateAll(model: CodeModelAz, do { let pathTop = ""; - let path = "azext_" + model.Extension_Name.replace("-", "_") + "/"; + let path = "azext_" + model.Extension_Name.split("-").join("_") + "/"; files[path + "generated/_params.py"] = GenerateAzureCliParams(model); files[path + "generated/commands.py"] = GenerateAzureCliCommands(model); diff --git a/src/plugins/azgenerator/TemplateAzureCliActions.ts b/src/plugins/azgenerator/TemplateAzureCliActions.ts index 4429956fb..30db70cdf 100644 --- a/src/plugins/azgenerator/TemplateAzureCliActions.ts +++ b/src/plugins/azgenerator/TemplateAzureCliActions.ts @@ -28,30 +28,30 @@ export function GenerateAzureCliActions(model: CodeModelAz): string[] { do { if (model.SelectFirstMethod()) { do { + let baseParam = null; if (model.SelectFirstMethodParameter()) { do { + if (baseParam && model.MethodParameter['polyBaseParam'] == baseParam) { + let keyToMatch = baseParam.schema?.['discriminator']?.property?.language['python']?.name; + let valueToMatch = model.MethodParameter.schema?.['discriminatorValue']; + let subActionName = model.Schema_ActionName(model.MethodParameter.schema); + if (isNullOrUndefined(subActionName) || allActions.has(subActionName)) { + continue; + } + output = output.concat(GetAction(model, subActionName, model.MethodParameter, keyToMatch, valueToMatch)) + } let actionName = model.Schema_ActionName(model.MethodParameter.schema); if (isNullOrUndefined(actionName)) { if (model.Parameter_IsPolyOfSimple(model.MethodParameter)) { - let baseParam = model.MethodParameter; - while (model.SelectNextMethodParameter() && model.MethodParameter['polyBaseParam'] == baseParam) { - let keyToMatch = baseParam.schema?.['discriminator']?.property?.language['python']?.name; - let valueToMatch = model.MethodParameter.schema?.['discriminatorValue']; - let subActionName = model.Schema_ActionName(model.MethodParameter.schema); - if (isNullOrUndefined(subActionName) || allActions.has(subActionName)) { - continue; - } - output = output.concat(GetAction(model, subActionName, model.MethodParameter, keyToMatch, valueToMatch)) - } - continue; - } - continue; + baseParam = model.MethodParameter; + } } - if (allActions.has(actionName)) { - continue; + else { + if (allActions.has(actionName)) { + continue; + } + output = output.concat(GetAction(model, actionName, model.MethodParameter)) } - output = output.concat(GetAction(model, actionName, model.MethodParameter)) - } while (model.SelectNextMethodParameter()); } } while (model.SelectNextMethod()); diff --git a/src/test/scenarios/datafactory/input/datafactory.json b/src/test/scenarios/datafactory/input/datafactory.json index d1a15f718..9a6122b95 100644 --- a/src/test/scenarios/datafactory/input/datafactory.json +++ b/src/test/scenarios/datafactory/input/datafactory.json @@ -754,6 +754,10 @@ "repoConfiguration": { "$ref": "#/definitions/FactoryRepoConfiguration", "description": "Git repo information of the factory." + }, + "fakeIdentity": { + "$ref": "#/definitions/FakeFactoryIdentity", + "description": "This is only for az test." } } }, @@ -826,6 +830,18 @@ "required": [ "type" ] + }, + "FakeFactoryIdentity": { + "description": "This is only for az test.", + "properties": { + "name": { + "type": "string", + "description": ".." + } + }, + "required": [ + "name" + ] } }, "parameters": { diff --git a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/_params.py b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/_params.py index 6e750cba4..22bbac37d 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/_params.py +++ b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/_params.py @@ -20,7 +20,8 @@ from azext_datafactory.action import ( AddIdentity, AddFactoryVstsConfiguration, - AddFactoryGitHubConfiguration + AddFactoryGitHubConfiguration, + AddFakeIdentity ) @@ -53,6 +54,8 @@ def load_arguments(self, _): 'itHub repo information. Expect value: KEY1=VALUE1 KEY2=VALUE2 ... , available KEYs are: host-name, ' 'account-name, repository-name, collaboration-branch, root-folder, last-commit-id.', arg_group='Repo' 'Configuration') + c.argument('fake_identity', action=AddFakeIdentity, nargs='+', help='This is only for az test. Expect value: na' + 'me=xx.') with self.argument_context('datafactory update') as c: c.argument('resource_group_name', resource_group_name_type) diff --git a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/action.py b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/action.py index 2a2d97597..6f24d3ccf 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/action.py +++ b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/action.py @@ -103,3 +103,26 @@ def get_action(self, values, option_string): # pylint: disable=no-self-use d['last_commit_id'] = v[0] d['type'] = 'FactoryGitHubConfiguration' return d + + +class AddFakeIdentity(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + action = self.get_action(values, option_string) + namespace.fake_identity = action + + + def get_action(self, values, option_string): # pylint: disable=no-self-use + try: + properties = defaultdict(list) + for (k, v) in (x.split('=', 1) for x in values): + properties[k].append(v) + properties = dict(properties) + except ValueError: + raise CLIError('usage error: {} [KEY=VALUE ...]'.format(option_string)) + d = {} + for k in properties: + kl = k.lower() + v = properties[k] + if kl == 'name': + d['name'] = v[0] + return d diff --git a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/custom.py b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/custom.py index d389cbe8d..793b2bed2 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/custom.py +++ b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/generated/custom.py @@ -36,7 +36,8 @@ def datafactory_create(cmd, client, tags=None, identity=None, factory_vsts_configuration=None, - factory_git_hub_configuration=None): + factory_git_hub_configuration=None, + fake_identity=None): all_repo_configuration = [] if factory_vsts_configuration is not None: all_repo_configuration.append(factory_vsts_configuration) diff --git a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/aio/operations_async/_factory_operations_async.py b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/aio/operations_async/_factory_operations_async.py index c305334dd..1391ab086 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/aio/operations_async/_factory_operations_async.py +++ b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/aio/operations_async/_factory_operations_async.py @@ -243,6 +243,7 @@ async def create_or_update( tags: Optional[Dict[str, str]] = None, identity: Optional["models.FactoryIdentity"] = None, repo_configuration: Optional["models.FactoryRepoConfiguration"] = None, + fake_identity: Optional["models.FakeFactoryIdentity"] = None, **kwargs ) -> "models.Factory": """Creates or updates a factory. @@ -262,6 +263,8 @@ async def create_or_update( :type identity: ~azure.mgmt.datafactory.models.FactoryIdentity :param repo_configuration: Git repo information of the factory. :type repo_configuration: ~azure.mgmt.datafactory.models.FactoryRepoConfiguration + :param fake_identity: This is only for az test. + :type fake_identity: ~azure.mgmt.datafactory.models.FakeFactoryIdentity :keyword callable cls: A custom type or function that will be passed the direct response :return: Factory or the result of cls(response) :rtype: ~azure.mgmt.datafactory.models.Factory @@ -270,7 +273,7 @@ async def create_or_update( cls = kwargs.pop('cls', None) # type: ClsType["models.Factory"] error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) - _factory = models.Factory(location=location, tags=tags, identity=identity, repo_configuration=repo_configuration) + _factory = models.Factory(location=location, tags=tags, identity=identity, repo_configuration=repo_configuration, fake_identity=fake_identity) api_version = "2018-06-01" content_type = kwargs.pop("content_type", "application/json") diff --git a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/__init__.py b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/__init__.py index 497e44735..a0649797b 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/__init__.py +++ b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/__init__.py @@ -17,6 +17,7 @@ from ._models_py3 import FactoryRepoUpdate from ._models_py3 import FactoryUpdateParameters from ._models_py3 import FactoryVstsConfiguration + from ._models_py3 import FakeFactoryIdentity from ._models_py3 import GitHubAccessTokenRequest from ._models_py3 import GitHubAccessTokenResponse from ._models_py3 import Resource @@ -32,6 +33,7 @@ from ._models import FactoryRepoUpdate # type: ignore from ._models import FactoryUpdateParameters # type: ignore from ._models import FactoryVstsConfiguration # type: ignore + from ._models import FakeFactoryIdentity # type: ignore from ._models import GitHubAccessTokenRequest # type: ignore from ._models import GitHubAccessTokenResponse # type: ignore from ._models import Resource # type: ignore @@ -48,6 +50,7 @@ 'FactoryRepoUpdate', 'FactoryUpdateParameters', 'FactoryVstsConfiguration', + 'FakeFactoryIdentity', 'GitHubAccessTokenRequest', 'GitHubAccessTokenResponse', 'Resource', diff --git a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/_models.py b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/_models.py index 130331ba8..cbae7d0f2 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/_models.py +++ b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/_models.py @@ -152,6 +152,8 @@ class Factory(Resource): :vartype version: str :param repo_configuration: Git repo information of the factory. :type repo_configuration: ~azure.mgmt.datafactory.models.FactoryRepoConfiguration + :param fake_identity: This is only for az test. + :type fake_identity: ~azure.mgmt.datafactory.models.FakeFactoryIdentity """ _validation = { @@ -177,6 +179,7 @@ class Factory(Resource): 'create_time': {'key': 'properties.createTime', 'type': 'iso-8601'}, 'version': {'key': 'properties.version', 'type': 'str'}, 'repo_configuration': {'key': 'properties.repoConfiguration', 'type': 'FactoryRepoConfiguration'}, + 'fake_identity': {'key': 'properties.fakeIdentity', 'type': 'FakeFactoryIdentity'}, } def __init__( @@ -190,6 +193,7 @@ def __init__( self.create_time = None self.version = None self.repo_configuration = kwargs.get('repo_configuration', None) + self.fake_identity = kwargs.get('fake_identity', None) class FactoryRepoConfiguration(msrest.serialization.Model): @@ -463,6 +467,31 @@ def __init__( self.tenant_id = kwargs.get('tenant_id', None) +class FakeFactoryIdentity(msrest.serialization.Model): + """This is only for az test. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. .. + :type name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(FakeFactoryIdentity, self).__init__(**kwargs) + self.name = kwargs['name'] + + class GitHubAccessTokenRequest(msrest.serialization.Model): """Get GitHub access token request definition. diff --git a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/_models_py3.py b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/_models_py3.py index d43068c9c..03ddf8b06 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/_models_py3.py +++ b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/models/_models_py3.py @@ -166,6 +166,8 @@ class Factory(Resource): :vartype version: str :param repo_configuration: Git repo information of the factory. :type repo_configuration: ~azure.mgmt.datafactory.models.FactoryRepoConfiguration + :param fake_identity: This is only for az test. + :type fake_identity: ~azure.mgmt.datafactory.models.FakeFactoryIdentity """ _validation = { @@ -191,6 +193,7 @@ class Factory(Resource): 'create_time': {'key': 'properties.createTime', 'type': 'iso-8601'}, 'version': {'key': 'properties.version', 'type': 'str'}, 'repo_configuration': {'key': 'properties.repoConfiguration', 'type': 'FactoryRepoConfiguration'}, + 'fake_identity': {'key': 'properties.fakeIdentity', 'type': 'FakeFactoryIdentity'}, } def __init__( @@ -201,6 +204,7 @@ def __init__( additional_properties: Optional[Dict[str, object]] = None, identity: Optional["FactoryIdentity"] = None, repo_configuration: Optional["FactoryRepoConfiguration"] = None, + fake_identity: Optional["FakeFactoryIdentity"] = None, **kwargs ): super(Factory, self).__init__(location=location, tags=tags, **kwargs) @@ -210,6 +214,7 @@ def __init__( self.create_time = None self.version = None self.repo_configuration = repo_configuration + self.fake_identity = fake_identity class FactoryRepoConfiguration(msrest.serialization.Model): @@ -513,6 +518,33 @@ def __init__( self.tenant_id = tenant_id +class FakeFactoryIdentity(msrest.serialization.Model): + """This is only for az test. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. .. + :type name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + **kwargs + ): + super(FakeFactoryIdentity, self).__init__(**kwargs) + self.name = name + + class GitHubAccessTokenRequest(msrest.serialization.Model): """Get GitHub access token request definition. diff --git a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/operations/_factory_operations.py b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/operations/_factory_operations.py index 9657f9607..9b29702e8 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/operations/_factory_operations.py +++ b/src/test/scenarios/datafactory/output/src/datafactory/azext_datafactory/vendored_sdks/datafactory/operations/_factory_operations.py @@ -250,6 +250,7 @@ def create_or_update( tags=None, # type: Optional[Dict[str, str]] identity=None, # type: Optional["models.FactoryIdentity"] repo_configuration=None, # type: Optional["models.FactoryRepoConfiguration"] + fake_identity=None, # type: Optional["models.FakeFactoryIdentity"] **kwargs # type: Any ): # type: (...) -> "models.Factory" @@ -270,6 +271,8 @@ def create_or_update( :type identity: ~azure.mgmt.datafactory.models.FactoryIdentity :param repo_configuration: Git repo information of the factory. :type repo_configuration: ~azure.mgmt.datafactory.models.FactoryRepoConfiguration + :param fake_identity: This is only for az test. + :type fake_identity: ~azure.mgmt.datafactory.models.FakeFactoryIdentity :keyword callable cls: A custom type or function that will be passed the direct response :return: Factory or the result of cls(response) :rtype: ~azure.mgmt.datafactory.models.Factory @@ -278,7 +281,7 @@ def create_or_update( cls = kwargs.pop('cls', None) # type: ClsType["models.Factory"] error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) - _factory = models.Factory(location=location, tags=tags, identity=identity, repo_configuration=repo_configuration) + _factory = models.Factory(location=location, tags=tags, identity=identity, repo_configuration=repo_configuration, fake_identity=fake_identity) api_version = "2018-06-01" content_type = kwargs.pop("content_type", "application/json") diff --git a/src/test/scenarios/datafactory/output/src/datafactory/report.md b/src/test/scenarios/datafactory/output/src/datafactory/report.md index f57a79edc..51995ae57 100644 --- a/src/test/scenarios/datafactory/output/src/datafactory/report.md +++ b/src/test/scenarios/datafactory/output/src/datafactory/report.md @@ -24,6 +24,7 @@ create a datafactory. |**--identity**|object|Managed service identity of the factory.|identity| |**--factory-vsts-configuration**|object|Factory's VSTS repo information.|factory_vsts_configuration| |**--factory-git-hub-configuration**|object|Factory's GitHub repo information.|factory_git_hub_configuration| +|**--fake-identity**|object|This is only for az test.|fake_identity| ### datafactory delete delete a datafactory.