Type Annotations: ext.scrub

- Resolves Issue #724
    - Related to PR #628
This commit is contained in:
BJ Dierkes 2024-07-17 17:13:53 -05:00
parent b16b99a0cf
commit 251bdcb3c1
2 changed files with 14 additions and 6 deletions

View File

@ -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)

View File

@ -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)