Skip to content

Commit

Permalink
Stabilize resource module. (Azure#4945)
Browse files Browse the repository at this point in the history
  • Loading branch information
tjprescott authored Nov 21, 2017
1 parent 644e9f8 commit bddabbf
Show file tree
Hide file tree
Showing 10 changed files with 610 additions and 388 deletions.
24 changes: 18 additions & 6 deletions src/azure-cli-core/azure/cli/core/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,26 +247,33 @@ def _apply_doc_string(self, dest, command_kwargs):
raise CLIError("command authoring error: source '{}' not found.".format(doc_string_source))
dest.__doc__ = model.__doc__

def _get_resource_type(self):
resource_type = self.module_kwargs.get('resource_type', None)
if not resource_type:
command_type = self.module_kwargs.get('command_type', None)
resource_type = command_type.settings.get('resource_type', None) if command_type else None
return resource_type

def get_api_version(self, resource_type=None):
from azure.cli.core.profiles import get_api_version
resource_type = resource_type or self.module_kwargs.get('resource_type', None)
resource_type = resource_type or self._get_resource_type()
return get_api_version(self.cli_ctx, resource_type)

def supported_api_version(self, resource_type=None, min_api=None, max_api=None):
from azure.cli.core.profiles import supported_api_version, PROFILE_TYPE
return supported_api_version(
cli_ctx=self.cli_ctx,
resource_type=resource_type or PROFILE_TYPE,
resource_type=resource_type or self._get_resource_type() or PROFILE_TYPE,
min_api=min_api or self.min_profile,
max_api=max_api or self.max_profile)

def get_sdk(self, *attr_args, **kwargs):
from azure.cli.core.profiles import get_sdk
return get_sdk(self.cli_ctx, kwargs.pop('resource_type', self.module_kwargs['resource_type']),
return get_sdk(self.cli_ctx, kwargs.pop('resource_type', self._get_resource_type()),
*attr_args, **kwargs)

def get_models(self, *attr_args, **kwargs):
resource_type = kwargs.get('resource_type', self.module_kwargs.get('resource_type', None))
resource_type = kwargs.get('resource_type', self._get_resource_type())
from azure.cli.core.profiles import get_sdk
return get_sdk(self.cli_ctx, resource_type, *attr_args, mod='models')

Expand All @@ -293,15 +300,20 @@ def _cli_command(self, name, operation=None, handler=None, argument_loader=None,

name = ' '.join(name.split())

client_factory = kwargs.get('client_factory', None)
command_type = kwargs.get('command_type', None)
client_factory = command_type.settings.get('client_factory', None) if command_type \
else kwargs.get('client_factory', None)

def default_command_handler(command_args):
from azure.cli.core.util import get_arg_list
op = handler or self.get_op_handler(operation)
op_args = get_arg_list(op)

client = client_factory(self.cli_ctx, command_args) if client_factory else None
if client:
client_arg_name = 'client' if operation.startswith('azure.cli') else 'self'
command_args[client_arg_name] = client
if client_arg_name in op_args:
command_args[client_arg_name] = client
result = op(**command_args)
return result

Expand Down
23 changes: 15 additions & 8 deletions src/azure-cli-core/azure/cli/core/commands/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,16 +187,23 @@ def __call__(self, *args, **kwargs):

return self.handler(*args, **kwargs)

def _get_resource_type(self):
resource_type = self.command_kwargs.get('resource_type', None)
if not resource_type:
command_type = self.command_kwargs.get('command_type', None)
resource_type = command_type.settings.get('resource_type', None) if command_type else None
return resource_type

def get_api_version(self, resource_type=None):
resource_type = resource_type or self.command_kwargs.get('resource_type', None)
resource_type = resource_type or self._get_resource_type()
return self.loader.get_api_version(resource_type=resource_type)

def supported_api_version(self, resource_type=None, min_api=None, max_api=None):
resource_type = resource_type or self.command_kwargs.get('resource_type', None)
resource_type = resource_type or self._get_resource_type()
return self.loader.supported_api_version(resource_type=resource_type, min_api=min_api, max_api=max_api)

def get_models(self, *attr_args, **kwargs):
resource_type = kwargs.get('resource_type', self.command_kwargs.get('resource_type', None))
resource_type = kwargs.get('resource_type', self._get_resource_type())
return self.loader.get_sdk(*attr_args, resource_type=resource_type, mod='models')


Expand Down Expand Up @@ -336,14 +343,14 @@ def execute(self, args):
is_query_active=self.data['query_active'])

def _build_kwargs(self, func, ns): # pylint: disable=no-self-use
import inspect
arg_spec = inspect.getargspec(func).args # pylint: disable=deprecated-method
from azure.cli.core.util import get_arg_list
arg_list = get_arg_list(func)
kwargs = {}
if 'cmd' in arg_spec:
if 'cmd' in arg_list:
kwargs['cmd'] = ns._cmd # pylint: disable=protected-access
if 'namespace' in arg_spec:
if 'namespace' in arg_list:
kwargs['namespace'] = ns
if 'ns' in arg_spec:
if 'ns' in arg_list:
kwargs['ns'] = ns
return kwargs

Expand Down
12 changes: 12 additions & 0 deletions src/azure-cli-core/azure/cli/core/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,15 @@ def hash_string(value, length=16, force_lower=False):
def in_cloud_console():
import os
return os.environ.get('ACC_CLOUD', None)


def get_arg_list(op):
import inspect

try:
# only supported in python3 - falling back to argspec if not available
sig = inspect.signature(op)
return sig.parameters
except AttributeError:
sig = inspect.getargspec(operation) # pylint: disable=deprecated-method
return sig.args
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

from azure.cli.core.help_files import helps
from knack.help_files import helps

helps['reservations'] = """
type: group
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ def __init__(self, cli_ctx=None):
from azure.cli.core.sdk.util import CliCommandType
resource_custom = CliCommandType(operations_tmpl='azure.cli.command_modules.resource.custom#{}')
super(ResourceCommandsLoader, self).__init__(cli_ctx=cli_ctx,
resource_type=ResourceType.MGMT_RESOURCE_RESOURCES,
custom_command_type=resource_custom)
self.module_name = __name__

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,14 @@ def load_command_table(self, _):

resource_group_sdk = CliCommandType(
operations_tmpl='azure.mgmt.resource.resources.operations.resource_groups_operations#ResourceGroupsOperations.{}',
client_factory=cf_resource_groups
client_factory=cf_resource_groups,
resource_type=ResourceType.MGMT_RESOURCE_RESOURCES
)

resource_provider_sdk = CliCommandType(
operations_tmpl='azure.mgmt.resource.resources.operations.providers_operations#ProvidersOperations.{}',
client_factory=cf_providers
client_factory=cf_providers,
resource_type=ResourceType.MGMT_RESOURCE_RESOURCES
)

resource_feature_sdk = CliCommandType(
Expand All @@ -66,17 +68,20 @@ def load_command_table(self, _):

resource_tag_sdk = CliCommandType(
operations_tmpl='azure.mgmt.resource.resources.operations.tags_operations#TagsOperations.{}',
client_factory=cf_tags
client_factory=cf_tags,
resource_type=ResourceType.MGMT_RESOURCE_RESOURCES
)

resource_deployment_sdk = CliCommandType(
operations_tmpl='azure.mgmt.resource.resources.operations.deployments_operations#DeploymentsOperations.{}',
client_factory=cf_deployments
client_factory=cf_deployments,
resource_type=ResourceType.MGMT_RESOURCE_RESOURCES
)

resource_deployment_operation_sdk = CliCommandType(
operations_tmpl='azure.mgmt.resource.resources.operations.deployment_operations#DeploymentOperations.{}',
client_factory=cf_deployment_operations
client_factory=cf_deployment_operations,
resource_type=ResourceType.MGMT_RESOURCE_RESOURCES
)

resource_policy_definitions_sdk = CliCommandType(
Expand All @@ -103,12 +108,14 @@ def load_command_table(self, _):
)
resource_managedapp_sdk = CliCommandType(
operations_tmpl='azure.mgmt.resource.managedapplications.operations#ApplicationsOperations.{}',
client_factory=cf_resource_managedapplications
client_factory=cf_resource_managedapplications,
resource_type=ResourceType.MGMT_RESOURCE_RESOURCES
)

resource_managedapp_def_sdk = CliCommandType(
operations_tmpl='azure.mgmt.resource.managedapplications.operations#ApplicationDefinitionsOperations.{}',
client_factory=cf_resource_managedappdefinitions
client_factory=cf_resource_managedappdefinitions,
resource_type=ResourceType.MGMT_RESOURCE_RESOURCES
)

with self.command_group('account lock', resource_lock_sdk) as g:
Expand Down
Loading

0 comments on commit bddabbf

Please sign in to comment.