Source code for IGitt.GitHub.GitHubUser

"""
Contains a representation of GitHub users.
"""
from typing import Optional

from IGitt.GitHub import GitHubMixin
from IGitt.GitHub import GitHubToken
from IGitt.GitHub import GitHubInstallationToken
from IGitt.Interfaces import get
from IGitt.Interfaces.User import User


PREVIEW_HEADER = {'Accept': 'application/vnd.github.machine-man-preview+json'}


[docs]class GitHubUser(GitHubMixin, User): """ A GitHub user, e.g. sils :) """ def __init__(self, token: GitHubToken, username: Optional[str]=None): """ Creates a GitHubUser with the given credentials. :param token: The Oauth token. :param username: The username of github user. Takes None, if it's the associated user's token. """ self._token = token self._url = '/users/' + username if username else '/user' self._username = username @property def username(self) -> str: """ Retrieves the login for the user. """ return self._username or self.data['login'] @property def identifier(self) -> int: """ Gets a unique id for the user that never changes. """ return self.data['id']
[docs] def installed_repositories(self, installation_id: int): """ List repositories that are accessible to the authenticated user for an installation. """ # Don't move to module code, causes circular dependencies from IGitt.GitHub.GitHubRepository import GitHubRepository repos = get(self._token, self.absolute_url( '/user/installations/{}/repositories'.format( installation_id ) ), headers=PREVIEW_HEADER)['repositories'] return {GitHubRepository.from_data(repo, self._token, repo['id']) for repo in repos}
[docs] def get_installations(self, jwt): """ Gets the installations this user has access to. :param jwt: The GitHubJsonWebToken required to fetch data. """ # Don't move to module code, causes circular dependencies from IGitt.GitHub.GitHubInstallation import GitHubInstallation resp = get(self._token, self.absolute_url('/user/installations'), headers=PREVIEW_HEADER) return { GitHubInstallation.from_data( i, GitHubInstallationToken(i['id'], jwt), i['id']) for i in resp['installations'] }