From 251bdcb3c12b0f5d7b6042eb7deeaa10aedd4d0c Mon Sep 17 00:00:00 2001 From: BJ Dierkes Date: Wed, 17 Jul 2024 17:13:53 -0500 Subject: [PATCH] Type Annotations: ext.scrub - Resolves Issue #724 - Related to PR #628 --- CHANGELOG.md | 1 + cement/ext/ext_scrub.py | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64d1390e..312fbd9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ Refactoring: - `[ext.plugin]` [Issue #721](https://github.com/datafolklabs/cement/issues/721) - `[ext.print]` [Issue #722](https://github.com/datafolklabs/cement/issues/722) - `[ext.redis]` [Issue #723](https://github.com/datafolklabs/cement/issues/723) + - `[ext.scrub]` [Issue #724](https://github.com/datafolklabs/cement/issues/724) - `[utils.fs]` [Issue #688](https://github.com/datafolklabs/cement/issues/688) - `[utils.misc]` [Issue #689](https://github.com/datafolklabs/cement/issues/689) - `[utils.shell]` [Issue #690](https://github.com/datafolklabs/cement/issues/690) diff --git a/cement/ext/ext_scrub.py b/cement/ext/ext_scrub.py index c56857bc..c58fc33e 100644 --- a/cement/ext/ext_scrub.py +++ b/cement/ext/ext_scrub.py @@ -2,21 +2,26 @@ Cement scrub extension module. """ +from __future__ import annotations import re +from typing import TYPE_CHECKING from .. import Controller from ..utils.misc import minimal_logger +if TYPE_CHECKING: + from ..core.foundation import App # pragma: nocover + LOG = minimal_logger(__name__) -def scrub_output(app, text): +def scrub_output(app: App, text: str) -> str: if app.pargs.scrub: text = app.scrub(text) return text -def extend_scrub(app): - def scrub(text): +def extend_scrub(app: App) -> None: + def scrub(text: str) -> str: if not hasattr(app._meta, 'scrub') or app._meta.scrub is None: return text # pragma: nocover elif isinstance(text, str): @@ -34,7 +39,7 @@ class ScrubController(Controller): Add embedded options to the base controller to support scrubbing output. """ - class Meta: + class Meta(Controller.Meta): #: Controller label label = 'scrub' @@ -50,7 +55,9 @@ class ScrubController(Controller): #: Command line argument options help argument_help = 'obfuscate sensitive data from rendered output' - def _pre_argument_parsing(self): + _meta: Meta # type: ignore + + def _pre_argument_parsing(self) -> None: if self._meta.argument_options is not None: assert isinstance(self._meta.argument_options, list), \ "ScrubController.Meta.argument_options must be a list" @@ -60,7 +67,7 @@ class ScrubController(Controller): dest='scrub') -def load(app): +def load(app: App) -> None: app.handler.register(ScrubController) app.hook.register('post_render', scrub_output) app.hook.register('pre_argument_parsing', extend_scrub)