Source code for archivist.appidp

"""Appidp interface

   Access to the Appidp endpoint.

   The user is not expected to use this class directly. It is an attribute of the
   :class:`Archivist` class.

   For example instantiate an Archivist instance and execute the methods of the class:

   .. code-block:: python

      with open(".auth_token", mode="r", encoding="utf-8") as tokenfile:
          authtoken = tokenfile.read().strip()

      # Initialize connection to Archivist
      arch = Archivist(
          "https://app.datatrails.ai",
          authtoken,
      )
      appidp = arch.appidp.token(...)

"""

from logging import getLogger
from typing import TYPE_CHECKING

# pylint:disable=cyclic-import      # but pylint doesn't understand this feature
# pylint:disable=too-few-public-methods

# pylint:disable=cyclic-import      # but pylint doesn't understand this feature
if TYPE_CHECKING:
    from .archivist import Archivist

from .constants import (
    APPIDP_LABEL,
    APPIDP_SUBPATH,
    APPIDP_TOKEN,
)

LOGGER = getLogger(__name__)


[docs] class AppIDP(dict): """Appidp object"""
[docs] class _AppIDPClient: """AppIDP Client Access to appidp entities. This class is usually accessed as an attribute of the Archivist class. Args: archivist (Archivist): :class:`Archivist` instance """ def __init__(self, archivist_instance: "Archivist"): self._archivist = archivist_instance self._subpath = f"{archivist_instance.root}/{APPIDP_SUBPATH}" self._label = f"{self._subpath}/{APPIDP_LABEL}" def __str__(self) -> str: return f"AppIDPClient({self._archivist.url})"
[docs] def token(self, client_id: str, client_secret: str) -> AppIDP: """Create access token from client id and secret Args: client_id (str): client id client_secret (str): client_secret Returns: :class:`AppIDP` instance """ return AppIDP( **self._archivist.post( f"{self._label}/{APPIDP_TOKEN}", { "grant_type": "client_credentials", "client_id": client_id, "client_secret": client_secret, }, data=True, no_auth=True, ) )