Module tf.capable

Expand source code Browse git
from textwrap import dedent
from importlib import import_module

from .core.helpers import console


class Capable:
    def __init__(self, *extras):
        self.backendProviders = set()
        self.modules = {}
        self.tryImport(*extras)

    def tryImport(self, *extras):
        backendProviders = self.backendProviders
        modules = self.modules

        for kind in extras:
            if kind == "github":
                try:
                    import github

                    modules["github"] = github
                    backendProviders.add(kind)
                except Exception:
                    pass

            elif kind == "gitlab":
                try:
                    import gitlab

                    modules["gitlab"] = gitlab
                    backendProviders.add(kind)
                except Exception:
                    pass

    def load(self, module):
        modules = self.modules
        loaded = modules.get(module, None)

        if loaded:
            return loaded

        try:
            loaded = import_module(module)
        except Exception:
            pass

        return loaded

    def loadFrom(self, module, *members):
        loaded = self.load(module)

        result = (
            tuple(getattr(loaded, member, None) for member in members)
            if loaded
            else tuple(None for x in members)
        )
        return result[0] if len(result) == 1 else result

    def can(self, extra):
        if extra in {"github", "gitlab"}:
            backendProviders = self.backendProviders

            if extra in backendProviders:
                return True

            console(
                dedent(
                    f"""
                    Backend provider {extra} not supported.
                    Cannot reach online data on {extra}
                    Try installing text-fabric one of the following:
                    pip install text-fabric[{extra}]
                    pip install text-fabric[all]
            """
                )
            )
            return False

Classes

class Capable (*extras)
Expand source code Browse git
class Capable:
    def __init__(self, *extras):
        self.backendProviders = set()
        self.modules = {}
        self.tryImport(*extras)

    def tryImport(self, *extras):
        backendProviders = self.backendProviders
        modules = self.modules

        for kind in extras:
            if kind == "github":
                try:
                    import github

                    modules["github"] = github
                    backendProviders.add(kind)
                except Exception:
                    pass

            elif kind == "gitlab":
                try:
                    import gitlab

                    modules["gitlab"] = gitlab
                    backendProviders.add(kind)
                except Exception:
                    pass

    def load(self, module):
        modules = self.modules
        loaded = modules.get(module, None)

        if loaded:
            return loaded

        try:
            loaded = import_module(module)
        except Exception:
            pass

        return loaded

    def loadFrom(self, module, *members):
        loaded = self.load(module)

        result = (
            tuple(getattr(loaded, member, None) for member in members)
            if loaded
            else tuple(None for x in members)
        )
        return result[0] if len(result) == 1 else result

    def can(self, extra):
        if extra in {"github", "gitlab"}:
            backendProviders = self.backendProviders

            if extra in backendProviders:
                return True

            console(
                dedent(
                    f"""
                    Backend provider {extra} not supported.
                    Cannot reach online data on {extra}
                    Try installing text-fabric one of the following:
                    pip install text-fabric[{extra}]
                    pip install text-fabric[all]
            """
                )
            )
            return False

Methods

def can(self, extra)
Expand source code Browse git
def can(self, extra):
    if extra in {"github", "gitlab"}:
        backendProviders = self.backendProviders

        if extra in backendProviders:
            return True

        console(
            dedent(
                f"""
                Backend provider {extra} not supported.
                Cannot reach online data on {extra}
                Try installing text-fabric one of the following:
                pip install text-fabric[{extra}]
                pip install text-fabric[all]
        """
            )
        )
        return False
def load(self, module)
Expand source code Browse git
def load(self, module):
    modules = self.modules
    loaded = modules.get(module, None)

    if loaded:
        return loaded

    try:
        loaded = import_module(module)
    except Exception:
        pass

    return loaded
def loadFrom(self, module, *members)
Expand source code Browse git
def loadFrom(self, module, *members):
    loaded = self.load(module)

    result = (
        tuple(getattr(loaded, member, None) for member in members)
        if loaded
        else tuple(None for x in members)
    )
    return result[0] if len(result) == 1 else result
def tryImport(self, *extras)
Expand source code Browse git
def tryImport(self, *extras):
    backendProviders = self.backendProviders
    modules = self.modules

    for kind in extras:
        if kind == "github":
            try:
                import github

                modules["github"] = github
                backendProviders.add(kind)
            except Exception:
                pass

        elif kind == "gitlab":
            try:
                import gitlab

                modules["gitlab"] = gitlab
                backendProviders.add(kind)
            except Exception:
                pass