Module brevettiai.io.credentials

Expand source code
import logging
from abc import ABC, abstractmethod
from typing import List

from dataclasses import dataclass, field

log = logging.getLogger(__name__)


class LoginError(Exception):
    pass


class Credentials(ABC):
    """
    Abstract class for credential managers
    """

    @abstractmethod
    def get_credentials(self, resource_id, resource_type="dataset", mode="r"):
        pass

    @abstractmethod
    def set_credentials(self, type, user, secret, **kwargs):
        pass


@dataclass
class CredentialsChain(Credentials):
    """
    Credentials chain grouping a number of credentials into one trying all of them in order
    """
    chain: List[Credentials] = field(default_factory=list)

    def get_credentials(self, resource_id, resource_type="dataset", mode="r"):
        if not self.chain:
            raise LoginError("Credentials chain empty")

        exceptions = []
        for credentials in self.chain:
            try:
                return credentials.get_credentials(resource_id, resource_type, mode)
            except LoginError as ex:
                exceptions.append(ex)
        raise LoginError(f"Error logging in with credentials chain", exceptions)

    def set_credentials(self, type, user, secret, **kwargs):
        for cred in self.chain:
            cred.set_credentials(type, user, secret, **kwargs)

Classes

class Credentials

Abstract class for credential managers

Expand source code
class Credentials(ABC):
    """
    Abstract class for credential managers
    """

    @abstractmethod
    def get_credentials(self, resource_id, resource_type="dataset", mode="r"):
        pass

    @abstractmethod
    def set_credentials(self, type, user, secret, **kwargs):
        pass

Ancestors

  • abc.ABC

Subclasses

Methods

def get_credentials(self, resource_id, resource_type='dataset', mode='r')
Expand source code
@abstractmethod
def get_credentials(self, resource_id, resource_type="dataset", mode="r"):
    pass
def set_credentials(self, type, user, secret, **kwargs)
Expand source code
@abstractmethod
def set_credentials(self, type, user, secret, **kwargs):
    pass
class CredentialsChain (chain: List[Credentials] = <factory>)

Credentials chain grouping a number of credentials into one trying all of them in order

Expand source code
class CredentialsChain(Credentials):
    """
    Credentials chain grouping a number of credentials into one trying all of them in order
    """
    chain: List[Credentials] = field(default_factory=list)

    def get_credentials(self, resource_id, resource_type="dataset", mode="r"):
        if not self.chain:
            raise LoginError("Credentials chain empty")

        exceptions = []
        for credentials in self.chain:
            try:
                return credentials.get_credentials(resource_id, resource_type, mode)
            except LoginError as ex:
                exceptions.append(ex)
        raise LoginError(f"Error logging in with credentials chain", exceptions)

    def set_credentials(self, type, user, secret, **kwargs):
        for cred in self.chain:
            cred.set_credentials(type, user, secret, **kwargs)

Ancestors

Subclasses

Class variables

var chain : List[Credentials]

Methods

def get_credentials(self, resource_id, resource_type='dataset', mode='r')
Expand source code
def get_credentials(self, resource_id, resource_type="dataset", mode="r"):
    if not self.chain:
        raise LoginError("Credentials chain empty")

    exceptions = []
    for credentials in self.chain:
        try:
            return credentials.get_credentials(resource_id, resource_type, mode)
        except LoginError as ex:
            exceptions.append(ex)
    raise LoginError(f"Error logging in with credentials chain", exceptions)
def set_credentials(self, type, user, secret, **kwargs)
Expand source code
def set_credentials(self, type, user, secret, **kwargs):
    for cred in self.chain:
        cred.set_credentials(type, user, secret, **kwargs)
class LoginError (*args, **kwargs)

Common base class for all non-exit exceptions.

Expand source code
class LoginError(Exception):
    pass

Ancestors

  • builtins.Exception
  • builtins.BaseException