Skip to content

Commit

Permalink
Adopt the custom_injectors callback
Browse files Browse the repository at this point in the history
  • Loading branch information
chrismeyersfsu committed Nov 18, 2024
1 parent 2b29da6 commit bdeaf88
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
8 changes: 8 additions & 0 deletions _type_stubs/awx/main/models/credential.pyi
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
from typing import Callable

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


class ManagedCredentialType:
def __init__(
self,
Expand All @@ -7,4 +14,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, bool | str | int | float | None], str], str | None] | None = None,
): ...
54 changes: 54 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,52 @@
The hope is that it will be refactored into something more standardized.
"""

from collections.abc import Callable


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

def __init__(self: 'Credential') -> None:
self.inputs: dict[str, bool | str | int | float | None] = {}

def get_input(
self: 'Credential',
field_name: str,
default: bool | str | int | float | None = None,
) -> bool | str | int | float | None:
"""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..
:type field_name: str
:param default: Value to return if a value was not supplied by
the user
:type default: bool | str | int | float | None
:returns: True if user supplied a value, False otherwise.
:rtype: bool
"""
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..
:type field_name: str
:returns: True if user supplied a value, False otherwise.
:rtype: bool
"""
return field_name in self.inputs and self.inputs[field_name] not in {
'', None,
}


try:
# pylint: disable-next=unused-import
Expand Down Expand Up @@ -35,5 +81,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, bool | str | int | float | None], str,
], str | None,
] | None = None
"""Function to call as an alternative to the templated injection."""


__all__ = () # noqa: WPS410

0 comments on commit bdeaf88

Please sign in to comment.