Skip to content

Commit

Permalink
Adopt the custom_injectors callback
Browse files Browse the repository at this point in the history
Co-Authored-By: Sviatoslav Sydorenko <webknjaz@redhat.com>
  • Loading branch information
chrismeyersfsu and webknjaz committed Nov 20, 2024
1 parent 70c3f2c commit 55d26d4
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
9 changes: 9 additions & 0 deletions _type_stubs/awx/main/models/credential.pyi
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
from typing import Callable

from awx_plugins.interfaces._temporary_private_credential_api import ( # noqa: WPS436
Credential,
GenericOptionalPrimitiveType,
)


class ManagedCredentialType:
def __init__(
self,
Expand All @@ -7,4 +15,5 @@ class ManagedCredentialType:
inputs: dict[str, list[dict[str, bool | str] | str]],
injectors: dict[str, dict[str, str]] | None = None,
managed: bool = False,
custom_injector: Callable[[Credential, dict[str, GenericOptionalPrimitiveType], str], str | None] | None = None,
): ...
15 changes: 15 additions & 0 deletions src/awx_plugins/interfaces/_temporary_private_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@
The hope is that it will be refactored into something more standardized.
"""

from collections.abc import Callable

from ._temporary_private_credential_api import ( # noqa: WPS436
Credential as Credential,
GenericOptionalPrimitiveType,
)


try:
# pylint: disable-next=unused-import
Expand Down Expand Up @@ -35,5 +42,13 @@ class ManagedCredentialType: # type: ignore[no-redef] # noqa: WPS440
managed: bool = False
"""Flag for whether this plugin instance is managed."""

custom_injectors: Callable[
[
Credential,
dict[str, GenericOptionalPrimitiveType], str,
], str | None,
] | None = None
"""Function to call as an alternative to the templated injection."""


__all__ = () # noqa: WPS410
51 changes: 51 additions & 0 deletions src/awx_plugins/interfaces/_temporary_private_credential_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
"""Shared stubs from ``awx`` credential.
The hope is that it will be refactored into something more standardized.
"""

GenericOptionalPrimitiveType = bool | str | int | float | None # noqa: WPS465
"""Generic type for input values."""


class Credential:
"""Input supplied by the user.
Satisfies :class:`~._temporary_private_api.ManagedCredentialType`
inputs want(s).
"""

def __init__(
self: 'Credential',
inputs: dict[str, GenericOptionalPrimitiveType] | None = None,
) -> None:
self._inputs: dict[str, GenericOptionalPrimitiveType] = inputs or {}

def get_input(
self: 'Credential',
field_name: str,
default: GenericOptionalPrimitiveType = None,
) -> GenericOptionalPrimitiveType:
"""Get the user supplied value for a given field.
Given the name of a field, return the user supplied value.
:param field_name: Input key to check if a value was supplied.
:param default: Value to return if a value was not supplied by
the user
:returns: True if user supplied a value, False otherwise.
"""
return self._inputs.get(field_name, default)

def has_input(self: 'Credential', field_name: str) -> bool:
"""Check if user supplied a value for a given field.
Given the name of a field, return True of False as to if a value
was provided for that field.
:param field_name: Input key to check if a value was supplied.
:returns: True if user supplied a value, False otherwise.
"""
return self._inputs.get(field_name, None) not in {'', None}


__all__ = () # noqa: WPS410

0 comments on commit 55d26d4

Please sign in to comment.