Module jumpscale.clients.github.github

Expand source code
from gevent import sleep
from jumpscale.clients.base import Client
from jumpscale.core.base import Base, fields
from jumpscale.loader import j

from github import Github, GithubObject

from .repo import GithubRepo
from .helper import retry

NotSet = GithubObject.NotSet


class GithubClient(Client):
    username = fields.String()
    password = fields.String()
    accesstoken = fields.String()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__client = None

    @property
    def github_client(self):
        if not self.__client:
            if self.accesstoken:
                self.__client = Github(self.accesstoken)
            else:
                self.__client = Github(login_or_token=self.username, password=self.password)
        return self.__client

    @retry
    def get_repo(self, repo_full_name):
        return GithubRepo(self.github_client, repo_full_name)

    @retry
    def get_repos(self):
        l = []
        for r in self.github_client.get_user().get_repos():
            l.append(GithubRepo(self.github_client, r.full_name))
        return l

    @retry
    def get_orgs(self):
        l = []
        for o in self.github_client.get_user().get_orgs():
            l.append(o.login)
        return l

    @retry
    def get_userdata(self):
        u = self.github_client.get_user()
        el = []
        for e in u.get_emails():
            el.append(e)
        return {"name": u.name, "emails": el, "id": u.id, "avatar_url": u.avatar_url}

    @retry
    def create_repo(
        self,
        name,
        description=NotSet,
        homepage=NotSet,
        private=NotSet,
        has_issues=NotSet,
        has_wiki=NotSet,
        has_downloads=NotSet,
        auto_init=NotSet,
        gitignore_template=NotSet,
    ):

        return self.github_client.get_user().create_repo(
            name,
            description=description,
            homepage=homepage,
            private=private,
            has_issues=has_issues,
            has_wiki=has_wiki,
            has_downloads=has_downloads,
            auto_init=auto_init,
            gitignore_template=gitignore_template,
        )

    @retry
    def delete_repo(self, repo_name):
        return self.github_client.get_user().get_repo(repo_name).delete()

Classes

class GithubClient (*args, **kwargs)

A simple attribute-based namespace.

SimpleNamespace(**kwargs)

base class implementation for any class with fields which supports getting/setting raw data for any instance fields.

any instance can have an optional name and a parent.

class Person(Base):
    name = fields.String()
    age = fields.Float()

p = Person(name="ahmed", age="19")
print(p.name, p.age)

Args

parent_ : Base, optional
parent instance. Defaults to None.
instance_name_ : str, optional
instance name. Defaults to None.
**values
any given field values to initiate the instance with
Expand source code
class GithubClient(Client):
    username = fields.String()
    password = fields.String()
    accesstoken = fields.String()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__client = None

    @property
    def github_client(self):
        if not self.__client:
            if self.accesstoken:
                self.__client = Github(self.accesstoken)
            else:
                self.__client = Github(login_or_token=self.username, password=self.password)
        return self.__client

    @retry
    def get_repo(self, repo_full_name):
        return GithubRepo(self.github_client, repo_full_name)

    @retry
    def get_repos(self):
        l = []
        for r in self.github_client.get_user().get_repos():
            l.append(GithubRepo(self.github_client, r.full_name))
        return l

    @retry
    def get_orgs(self):
        l = []
        for o in self.github_client.get_user().get_orgs():
            l.append(o.login)
        return l

    @retry
    def get_userdata(self):
        u = self.github_client.get_user()
        el = []
        for e in u.get_emails():
            el.append(e)
        return {"name": u.name, "emails": el, "id": u.id, "avatar_url": u.avatar_url}

    @retry
    def create_repo(
        self,
        name,
        description=NotSet,
        homepage=NotSet,
        private=NotSet,
        has_issues=NotSet,
        has_wiki=NotSet,
        has_downloads=NotSet,
        auto_init=NotSet,
        gitignore_template=NotSet,
    ):

        return self.github_client.get_user().create_repo(
            name,
            description=description,
            homepage=homepage,
            private=private,
            has_issues=has_issues,
            has_wiki=has_wiki,
            has_downloads=has_downloads,
            auto_init=auto_init,
            gitignore_template=gitignore_template,
        )

    @retry
    def delete_repo(self, repo_name):
        return self.github_client.get_user().get_repo(repo_name).delete()

Ancestors

Instance variables

var accesstoken

getter method this property

will call _get_value, which would if the value is already defined and will get the default value if not

Returns

any
the field value
Expand source code
def getter(self):
    """
    getter method this property

    will call `_get_value`, which would if the value is already defined
    and will get the default value if not

    Returns:
        any: the field value
    """
    return self._get_value(name, field)
var github_client
Expand source code
@property
def github_client(self):
    if not self.__client:
        if self.accesstoken:
            self.__client = Github(self.accesstoken)
        else:
            self.__client = Github(login_or_token=self.username, password=self.password)
    return self.__client
var password

getter method this property

will call _get_value, which would if the value is already defined and will get the default value if not

Returns

any
the field value
Expand source code
def getter(self):
    """
    getter method this property

    will call `_get_value`, which would if the value is already defined
    and will get the default value if not

    Returns:
        any: the field value
    """
    return self._get_value(name, field)
var username

getter method this property

will call _get_value, which would if the value is already defined and will get the default value if not

Returns

any
the field value
Expand source code
def getter(self):
    """
    getter method this property

    will call `_get_value`, which would if the value is already defined
    and will get the default value if not

    Returns:
        any: the field value
    """
    return self._get_value(name, field)

Methods

def create_repo(self, *args, **kwargs)
Expand source code
def wrapper(self, *args, **kwargs):
    for _ in range(6):
        try:
            result = function(self, *args, **kwargs)
            break
        except Exception as e:
            j.logger.warning(f"Failed to execute {function.__name__} due to error: {str(e)}")
            sleep(1)
    else:
        raise j.exceptions.Runtime(f"Failed to execute {function.__name__} after multiple retries")
    return result
def delete_repo(self, *args, **kwargs)
Expand source code
def wrapper(self, *args, **kwargs):
    for _ in range(6):
        try:
            result = function(self, *args, **kwargs)
            break
        except Exception as e:
            j.logger.warning(f"Failed to execute {function.__name__} due to error: {str(e)}")
            sleep(1)
    else:
        raise j.exceptions.Runtime(f"Failed to execute {function.__name__} after multiple retries")
    return result
def get_orgs(self, *args, **kwargs)
Expand source code
def wrapper(self, *args, **kwargs):
    for _ in range(6):
        try:
            result = function(self, *args, **kwargs)
            break
        except Exception as e:
            j.logger.warning(f"Failed to execute {function.__name__} due to error: {str(e)}")
            sleep(1)
    else:
        raise j.exceptions.Runtime(f"Failed to execute {function.__name__} after multiple retries")
    return result
def get_repo(self, *args, **kwargs)
Expand source code
def wrapper(self, *args, **kwargs):
    for _ in range(6):
        try:
            result = function(self, *args, **kwargs)
            break
        except Exception as e:
            j.logger.warning(f"Failed to execute {function.__name__} due to error: {str(e)}")
            sleep(1)
    else:
        raise j.exceptions.Runtime(f"Failed to execute {function.__name__} after multiple retries")
    return result
def get_repos(self, *args, **kwargs)
Expand source code
def wrapper(self, *args, **kwargs):
    for _ in range(6):
        try:
            result = function(self, *args, **kwargs)
            break
        except Exception as e:
            j.logger.warning(f"Failed to execute {function.__name__} due to error: {str(e)}")
            sleep(1)
    else:
        raise j.exceptions.Runtime(f"Failed to execute {function.__name__} after multiple retries")
    return result
def get_userdata(self, *args, **kwargs)
Expand source code
def wrapper(self, *args, **kwargs):
    for _ in range(6):
        try:
            result = function(self, *args, **kwargs)
            break
        except Exception as e:
            j.logger.warning(f"Failed to execute {function.__name__} due to error: {str(e)}")
            sleep(1)
    else:
        raise j.exceptions.Runtime(f"Failed to execute {function.__name__} after multiple retries")
    return result

Inherited members