Source code for IGitt.factory
"""
Factory function for returning new repository objects
"""
from typing import List, Union
from giturlparse import parse
from IGitt.GitHub import GitHubToken
from IGitt.GitHub import GitHubInstallationToken
from IGitt.GitHub.GitHubRepository import GitHubRepository
from IGitt.GitLab import GitLabOAuthToken
from IGitt.GitLab import GitLabPrivateToken
from IGitt.GitLab.GitLabRepository import GitLabRepository
[docs]def get_repo (URL: str,
wallet: List[Union[GitHubToken, GitHubInstallationToken,
GitLabOAuthToken, GitLabPrivateToken]]
) -> Union[GitHubRepository, GitLabRepository]:
"""
:param URL: URL of the repository.
:param wallet: Wallet; contains tokens. A list containing the tokens.
"""
url = parse(URL)
assert (url.resource == 'github.com' or url.resource == 'gitlab.com'), \
'Only GitHub and GitLab supported.'
fullname = url.owner + '/' + url.name
if url.resource == 'github.com':
token = None
for Token in wallet:
if isinstance(Token, GitHubToken):
token = Token
break
elif isinstance(Token, GitHubInstallationToken):
token = Token
break
assert token is not None, 'GitHub token not found.'
return GitHubRepository(token, fullname)
elif url.resource == 'gitlab.com':
token = None
for Token in wallet:
if isinstance(Token, GitLabOAuthToken):
token = Token
break
elif isinstance(Token, GitLabPrivateToken):
token = Token
break
assert token is not None, 'GitLab token not found.'
return GitLabRepository(token, fullname)