diff --git a/knack/deprecation.py b/knack/deprecation.py index dd8a814..bde3748 100644 --- a/knack/deprecation.py +++ b/knack/deprecation.py @@ -84,6 +84,7 @@ def _default_get_message(self): self.redirect = redirect self.hide = hide self.expiration = expiration + self._cli_version = cli_ctx.get_cli_version() super(Deprecated, self).__init__( cli_ctx=cli_ctx, @@ -103,8 +104,7 @@ def _version_less_than_or_equal_to(self, v1, v2): def expired(self): if self.expiration: - cli_version = self.cli_ctx.get_cli_version() - return self._version_less_than_or_equal_to(self.expiration, cli_version) + return self._version_less_than_or_equal_to(self.expiration, self._cli_version) return False def hidden(self): @@ -112,8 +112,7 @@ def hidden(self): if isinstance(self.hide, bool): hidden = self.hide elif isinstance(self.hide, STRING_TYPES): - cli_version = self.cli_ctx.get_cli_version() - hidden = self._version_less_than_or_equal_to(self.hide, cli_version) + hidden = self._version_less_than_or_equal_to(self.hide, self._cli_version) return hidden def show_in_help(self): diff --git a/knack/help.py b/knack/help.py index aab9200..c7778c2 100644 --- a/knack/help.py +++ b/knack/help.py @@ -153,7 +153,7 @@ def __init__(self, help_ctx, delimiters): # pylint: disable=too-many-statements help_ctx.cli_ctx.invocation.commands_loader.command_table else 'command group' del deprecate_kwargs['_get_tag'] del deprecate_kwargs['_get_message'] - self.deprecate_info = ImplicitDeprecated(**deprecate_kwargs) + self.deprecate_info = ImplicitDeprecated(cli_ctx=help_ctx.cli_ctx, **deprecate_kwargs) # resolve preview info direct_preview_info = resolve_preview_info(help_ctx.cli_ctx, delimiters) @@ -173,7 +173,7 @@ def __init__(self, help_ctx, delimiters): # pylint: disable=too-many-statements preview_kwargs['object_type'] = 'command' else: preview_kwargs['object_type'] = 'command group' - self.preview_info = ImplicitPreviewItem(**preview_kwargs) + self.preview_info = ImplicitPreviewItem(cli_ctx=help_ctx.cli_ctx, **preview_kwargs) # resolve experimental info direct_experimental_info = resolve_experimental_info(help_ctx.cli_ctx, delimiters) @@ -193,7 +193,7 @@ def __init__(self, help_ctx, delimiters): # pylint: disable=too-many-statements experimental_kwargs['object_type'] = 'command' else: experimental_kwargs['object_type'] = 'command group' - self.experimental_info = ImplicitExperimentalItem(**experimental_kwargs) + self.experimental_info = ImplicitExperimentalItem(cli_ctx=help_ctx.cli_ctx, **experimental_kwargs) def load(self, options): description = getattr(options, 'description', None) diff --git a/knack/invocation.py b/knack/invocation.py index ebc6b4b..314f0e9 100644 --- a/knack/invocation.py +++ b/knack/invocation.py @@ -188,7 +188,7 @@ def execute(self, args): deprecate_kwargs['object_type'] = 'command' del deprecate_kwargs['_get_tag'] del deprecate_kwargs['_get_message'] - deprecations.append(ImplicitDeprecated(**deprecate_kwargs)) + deprecations.append(ImplicitDeprecated(cli_ctx=self.cli_ctx, **deprecate_kwargs)) # search for implicit preview path_comps = cmd.name.split()[:-1] @@ -200,7 +200,7 @@ def execute(self, args): if implicit_preview_info: preview_kwargs = implicit_preview_info.__dict__.copy() preview_kwargs['object_type'] = 'command' - previews.append(ImplicitPreviewItem(**preview_kwargs)) + previews.append(ImplicitPreviewItem(cli_ctx=self.cli_ctx, **preview_kwargs)) # search for implicit experimental path_comps = cmd.name.split()[:-1] @@ -212,7 +212,7 @@ def execute(self, args): if implicit_experimental_info: experimental_kwargs = implicit_experimental_info.__dict__.copy() experimental_kwargs['object_type'] = 'command' - experimentals.append(ImplicitExperimentalItem(**experimental_kwargs)) + experimentals.append(ImplicitExperimentalItem(cli_ctx=self.cli_ctx, **experimental_kwargs)) if not self.cli_ctx.only_show_errors: for d in deprecations: diff --git a/knack/util.py b/knack/util.py index ae78ab1..2fed46c 100644 --- a/knack/util.py +++ b/knack/util.py @@ -59,29 +59,13 @@ class StatusTag(object): # pylint: disable=unused-argument def __init__(self, cli_ctx, object_type, target, tag_func, message_func, color, **kwargs): - self.cli_ctx = cli_ctx self.object_type = object_type self.target = target self._color = color + self._enable_color = cli_ctx.enable_color self._get_tag = tag_func self._get_message = message_func - def __deepcopy__(self, memo): - import copy - - cls = self.__class__ - result = cls.__new__(cls) - memo[id(self)] = result - for k, v in self.__dict__.items(): - try: - setattr(result, k, copy.deepcopy(v, memo)) - except TypeError: - if k == 'cli_ctx': - setattr(result, k, self.cli_ctx) - else: - raise - return result - # pylint: disable=no-self-use def hidden(self): return False @@ -92,12 +76,12 @@ def show_in_help(self): @property def tag(self): """ Returns a tag object. """ - return ColorizedString(self._get_tag(self), self._color) if self.cli_ctx.enable_color else self._get_tag(self) + return ColorizedString(self._get_tag(self), self._color) if self._enable_color else self._get_tag(self) @property def message(self): """ Returns a tuple with the formatted message string and the message length. """ - return ColorizedString(self._get_message(self), self._color) if self.cli_ctx.enable_color \ + return ColorizedString(self._get_message(self), self._color) if self._enable_color \ else "WARNING: " + self._get_message(self)