Module ogr.services.forgejo.flag

Classes

class ForgejoCommitFlag (raw_commit_flag: Any | None = None,
project: ForwardRef('GitProject') | None = None,
commit: str | None = None,
state: CommitStatus | None = None,
context: str | None = None,
comment: str | None = None,
uid: str | None = None,
url: str | None = None)
Expand source code
class ForgejoCommitFlag(BaseCommitFlag):
    _states: ClassVar[dict[str, CommitStatus]] = {
        "pending": CommitStatus.pending,
        "success": CommitStatus.success,
        "failure": CommitStatus.failure,
        "canceled": CommitStatus.error,
        "warning": CommitStatus.warning,
    }

    @staticmethod
    def _state_from_enum(state: CommitStatus) -> str:
        return state.name

    def __str__(self) -> str:
        return (
            f"ForgejoCommitFlag("
            f"state='{self.state.name}', "
            f"context='{self.context}', "
            f"uid='{self.uid}', "
            f"comment='{self.comment}', "
            f"url='{self.url}', "
            f"created='{self.created}')"
        )

    def _from_raw_commit_flag(self):
        self.state = self._state_from_str(self._raw_commit_flag.status)
        self.context = self._raw_commit_flag.context
        self.comment = self._raw_commit_flag.description
        self.uid = self._raw_commit_flag.id
        self.url = self._raw_commit_flag.target_url

    @staticmethod
    def get(
        project: "ogr_forgejo.ForgejoProject",
        commit: str,
    ) -> Iterable["ForgejoCommitFlag"]:

        try:
            return (
                ForgejoCommitFlag(
                    raw_commit_flag=status,
                    project=project,
                    commit=commit,
                )
                for status in paginate(
                    partial(
                        project.api.repo_list_statuses,
                        owner=project.namespace,
                        repo=project.repo,
                        sha=commit,
                    ),
                )
            )
        except pyforgejo.NotFoundError as ex:  # 404 error
            logger.error(f"Commit {commit} was not found.")
            raise ForgejoAPIException(f"Commit {commit} was not found.") from ex

    @staticmethod
    def set(
        project: "ogr_forgejo.ForgejoProject",
        commit: str,
        state: Union[CommitStatus, str],
        target_url: str,
        description: str,
        context: str,
        trim: bool = False,
    ) -> "ForgejoCommitFlag":

        if isinstance(state, str):
            state = ForgejoCommitFlag._state_from_str(state)

        state = ForgejoCommitFlag._validate_state(state)

        if trim:
            description = description[:140]

        owner = project.forgejo_repo.owner.login
        forgejo_repo = project.forgejo_repo

        try:
            status = project.api.repo_create_status(
                owner=owner,
                repo=forgejo_repo.name,
                sha=commit,
                context=context,
                description=description,
                state=ForgejoCommitFlag._state_from_enum(state),
                target_url=target_url,
                request_options=None,
            )

        except pyforgejo.NotFoundError as ex:  # 404 error
            logger.error(f"Commit {commit} was not found.")
            raise ForgejoAPIException(f"Commit {commit} was not found.") from ex

        return ForgejoCommitFlag(project=project, raw_commit_flag=status, commit=commit)

    @property
    def created(self) -> datetime.datetime:
        return self._raw_commit_flag.created_at

    @property
    def edited(self) -> datetime.datetime:
        return self._raw_commit_flag.updated_at

Ancestors

Inherited members