Source code for IGitt.GitHub.GitHubInstallation
"""
This module contains the GitHubInstallation class which provides
properties and actions related to GitHub App installations.
"""
from functools import lru_cache
from typing import List
from typing import Set
from IGitt.GitHub import GitHubMixin
from IGitt.GitHub import GitHubInstallationToken
from IGitt.GitHub.GitHubRepository import GitHubRepository
from IGitt.Interfaces import get
from IGitt.Interfaces.Installation import Installation
[docs]class GitHubInstallation(GitHubMixin, Installation):
"""
Represents a GitHub App installation.
"""
def __init__(self, token: GitHubInstallationToken, installation_id: int):
"""
Creates a GitHubInstallation object with given credentials.
"""
self._id = installation_id
# jwt token is used to retrieve all properties
self._token = token.jwt
# installation token is used only for the api
self._api_token = token
self._url = '/app/installations/{}'.format(self._id)
@property
def identifier(self) -> int:
"""
Returns the identifier of the installation.
"""
return self._id
@property
def app_id(self) -> int:
"""
The application which was installed.
"""
return self.data['app_id']
@property
def webhooks(self) -> List[str]:
"""
Returns the list of webhooks registered by installing the application.
"""
return self.data['events']
@property
def permissions(self):
"""
The permissions granted to this installation.
"""
return self.data['permissions']
@property
@lru_cache(None)
def repositories(self) -> Set[GitHubRepository]:
"""
Returns the set of repositories this installation has access to.
"""
data = get(self._api_token,
self.absolute_url('/installation/repositories'))
return {GitHubRepository.from_data(repo,
self._api_token,
repo['id'])
for repo in data['repositories']}