Source code for octomachinery.github.entities.action

"""GitHub Action wrapper."""

from __future__ import annotations

import logging
import typing

import attr

# pylint: disable=relative-beyond-top-level
from ..api.app_client import GitHubApp
# pylint: disable=relative-beyond-top-level
from ..api.raw_client import RawGitHubAPI
# pylint: disable=relative-beyond-top-level
from ..api.tokens import GitHubOAuthToken
# pylint: disable=relative-beyond-top-level,import-error
from ..models.events import GidgetHubActionEvent


if typing.TYPE_CHECKING:
    # pylint: disable=relative-beyond-top-level
    from ...app.action.config import GitHubActionConfig


logger = logging.getLogger(__name__)


[docs]@attr.dataclass class GitHubAction(GitHubApp): """GitHub Action API wrapper.""" _metadata: GitHubActionConfig = attr.ib(default=None) """A GitHub Action metadata from envronment vars.""" @_metadata.validator def _verify_metadata_is_set(self, attribute, value): if value is None: raise ValueError(f'{attribute} must be set.') @property def event(self): # noqa: D401 """Parsed GitHub Action event data.""" return GidgetHubActionEvent.from_file( self._metadata.event_name, # pylint: disable=no-member self._metadata.event_path, # pylint: disable=no-member ) @property def token(self): """Return GitHub Action access token.""" return GitHubOAuthToken( self._metadata.token, # pylint: disable=no-member ) @property def api_client(self): # noqa: D401 """The GitHub App client.""" return RawGitHubAPI( token=self.token, session=self._http_session, user_agent=self._config.user_agent, )