From 18421b668b25897de5d6ce5927034390c0be0815 Mon Sep 17 00:00:00 2001 From: Troy Dai Date: Wed, 15 Nov 2017 15:47:04 -0800 Subject: [PATCH] Delay load azure.cli.core.progress --- src/azure-cli-core/azure/cli/core/__init__.py | 8 +++++--- .../azure/cli/core/commands/__init__.py | 15 ++++++--------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/__init__.py b/src/azure-cli-core/azure/cli/core/__init__.py index dc2b8ac4545..abc5eabd7d4 100644 --- a/src/azure-cli-core/azure/cli/core/__init__.py +++ b/src/azure-cli-core/azure/cli/core/__init__.py @@ -30,7 +30,6 @@ def __init__(self, **kwargs): from azure.cli.core.commands.arm import add_id_parameters from azure.cli.core.cloud import get_active_cloud - import azure.cli.core.commands.progress as progress from azure.cli.core.extensions import register_extensions from azure.cli.core._session import ACCOUNT, CONFIG, SESSION @@ -49,13 +48,13 @@ def __init__(self, **kwargs): self.cloud = get_active_cloud(self) logger.debug('Current cloud config:\n%s', str(self.cloud.name)) - self.progress_controller = progress.ProgressHook() - register_extensions(self) self.register_event(events.EVENT_INVOKER_POST_CMD_TBL_CREATE, add_id_parameters) # TODO: Doesn't work because args get copied # self.register_event(events.EVENT_INVOKER_PRE_CMD_TBL_CREATE, _pre_command_table_create) + self.progress_controller = None + def refresh_request_id(self): """Assign a new random GUID as x-ms-client-request-id @@ -67,6 +66,9 @@ def refresh_request_id(self): def get_progress_controller(self, det=False): import azure.cli.core.commands.progress as progress + if not self.progress_controller: + self.progress_controller = progress.ProgressHook() + self.progress_controller.init_progress(progress.get_progress_view(det)) return self.progress_controller diff --git a/src/azure-cli-core/azure/cli/core/commands/__init__.py b/src/azure-cli-core/azure/cli/core/commands/__init__.py index dce333aaa38..e71f6a90839 100644 --- a/src/azure-cli-core/azure/cli/core/commands/__init__.py +++ b/src/azure-cli-core/azure/cli/core/commands/__init__.py @@ -328,15 +328,12 @@ def execute(self, args): class LongRunningOperation(object): # pylint: disable=too-few-public-methods - - def __init__(self, cli_ctx, start_msg='', finish_msg='', - poller_done_interval_ms=1000.0, progress_controller=None): + def __init__(self, cli_ctx, start_msg='', finish_msg='', poller_done_interval_ms=1000.0): self.cli_ctx = cli_ctx self.start_msg = start_msg self.finish_msg = finish_msg self.poller_done_interval_ms = poller_done_interval_ms - self.progress_controller = progress_controller or cli_ctx.get_progress_controller() self.deploy_dict = {} self.last_progress_report = datetime.datetime.now() @@ -409,13 +406,13 @@ def __call__(self, poller): from msrest.exceptions import ClientException correlation_message = '' - self.progress_controller.begin() + self.cli_ctx.get_progress_controller.begin() correlation_id = None is_verbose = any(handler.level <= logs.INFO for handler in logger.handlers) while not poller.done(): - self.progress_controller.add(message='Running') + self.cli_ctx.get_progress_controller.add(message='Running') try: # pylint: disable=protected-access correlation_id = json.loads( @@ -435,7 +432,7 @@ def __call__(self, poller): try: self._delay() except KeyboardInterrupt: - self.progress_controller.stop() + self.cli_ctx.get_progress_controller.stop() logger.error('Long running operation wait cancelled. %s', correlation_message) raise @@ -443,10 +440,10 @@ def __call__(self, poller): result = poller.result() except ClientException as client_exception: from azure.cli.core.commands.arm import handle_long_running_operation_exception - self.progress_controller.stop() + self.cli_ctx.get_progress_controller.stop() handle_long_running_operation_exception(client_exception) - self.progress_controller.end() + self.cli_ctx.get_progress_controller.end() return result