From 62e9b545ae255b39569c831a570b7d1854dd8926 Mon Sep 17 00:00:00 2001 From: prnav Date: Sun, 13 Apr 2025 23:26:02 +0530 Subject: [PATCH 1/2] resolved 56 of the 94 errors --- .pre-commit-config.yaml | 2 +- ogr/abstract.py | 10 +++++++--- ogr/parsing.py | 2 +- ogr/services/base.py | 10 ++++++++-- ogr/services/forgejo/project.py | 13 +++++++++++++ .../github/auth_providers/github_app.py | 12 ++++++++---- ogr/services/github/auth_providers/token.py | 2 +- ogr/services/github/project.py | 17 +++++++++++++++++ ogr/services/gitlab/comments.py | 2 ++ ogr/services/gitlab/project.py | 12 ++++++++++++ ogr/services/pagure/project.py | 17 +++++++++++++++++ ogr/services/pagure/pull_request.py | 10 ++++++++-- ogr/services/pagure/release.py | 4 ++-- 13 files changed, 97 insertions(+), 16 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 40551712..ad2a7c81 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,7 +29,7 @@ repos: rev: v1.14.1 hooks: - id: mypy - args: [--no-strict-optional, --ignore-missing-imports] + args: [--ignore-missing-imports] additional_dependencies: [types-setuptools, types-requests, types-Deprecated] - repo: https://github.com/teemtee/tmt.git diff --git a/ogr/abstract.py b/ogr/abstract.py index 91e716f7..65b60a17 100644 --- a/ogr/abstract.py +++ b/ogr/abstract.py @@ -228,7 +228,7 @@ def body(self, new_body: str) -> None: @property def id(self) -> int: - return self._id + return self._id if self._id is not None else -1 @property def author(self) -> str: @@ -238,12 +238,12 @@ def author(self) -> str: @property def created(self) -> datetime.datetime: """Datetime of creation of the comment.""" - return self._created + return self._created if self._created is not None else datetime.datetime.min @property def edited(self) -> datetime.datetime: """Datetime of last edit of the comment.""" - return self._edited + return self._edited if self._edited is not None else datetime.datetime.min def get_reactions(self) -> Union[list[Reaction], Iterable[Reaction]]: """Returns list of reactions.""" @@ -268,6 +268,8 @@ class IssueComment(Comment): @property def issue(self) -> "Issue": """Issue of issue comment.""" + if self._parent is None: + raise ValueError("Issue comment must always have a parent issue.") return self._parent def __str__(self) -> str: @@ -278,6 +280,8 @@ class PRComment(Comment): @property def pull_request(self) -> "PullRequest": """Pull request of pull request comment.""" + if self._parent is None: + raise ValueError("PullRequest comment must always have a parent issue.") return self._parent def __str__(self) -> str: diff --git a/ogr/parsing.py b/ogr/parsing.py index 17923780..700f1803 100644 --- a/ogr/parsing.py +++ b/ogr/parsing.py @@ -186,7 +186,7 @@ def parse(cls, potential_url: str) -> Optional["RepoUrl"]: if not potential_url: return None - repo = RepoUrl(None) + repo = RepoUrl(potential_url if potential_url is not None else "") parsed_url = cls._prepare_url(potential_url) if not parsed_url: return None diff --git a/ogr/services/base.py b/ogr/services/base.py index 8af7cfc5..f8a398cc 100644 --- a/ogr/services/base.py +++ b/ogr/services/base.py @@ -34,7 +34,9 @@ def cached_property(func): # type: ignore class BaseGitService(GitService): @cached_property def hostname(self) -> Optional[str]: - parsed_url = parse_git_repo(potential_url=self.instance_url) + parsed_url = parse_git_repo( + potential_url=self.instance_url if self.instance_url is not None else "", + ) return parsed_url.hostname if parsed_url else None def get_project_from_url(self, url: str) -> "GitProject": @@ -53,7 +55,11 @@ def full_repo_name(self) -> str: class BasePullRequest(PullRequest): @property def target_branch_head_commit(self) -> str: - return self.target_project.get_sha_from_branch(self.target_branch) + return ( + self.target_project.get_sha_from_branch(self.target_branch) + if self.target_project.get_sha_from_branch(self.target_branch) is not None + else "" + ) def get_comments( self, diff --git a/ogr/services/forgejo/project.py b/ogr/services/forgejo/project.py index 8f03689d..a1d3c1ba 100644 --- a/ogr/services/forgejo/project.py +++ b/ogr/services/forgejo/project.py @@ -307,6 +307,7 @@ def remove_group(self, group: str) -> None: raise NotImplementedError() @indirect(ForgejoIssue.get_list) + # type: ignore def get_issue_list( self, status: IssueStatus = IssueStatus.open, @@ -317,10 +318,12 @@ def get_issue_list( pass @indirect(ForgejoIssue.get) + # type: ignore def get_issue(self, issue_id: int) -> "Issue": pass @indirect(ForgejoIssue.create) + # type: ignore def create_issue( self, title: str, @@ -332,13 +335,16 @@ def create_issue( pass @indirect(ForgejoPullRequest.get_list) + # type: ignore def get_pr_list(self, status: PRStatus = PRStatus.open) -> list["PullRequest"]: pass @indirect(ForgejoPullRequest.get) + # type: ignore def get_pr(self, pr_id: int) -> "PullRequest": pass + # type: ignore def get_pr_files_diff( self, pr_id: int, @@ -374,6 +380,7 @@ def get_sha_from_tag(self, tag_name: str) -> str: )().commit.sha @indirect(ForgejoRelease.get) + # type: ignore def get_release( self, identifier: Optional[int] = None, @@ -383,14 +390,17 @@ def get_release( pass @indirect(ForgejoRelease.get_latest) + # type: ignore def get_latest_release(self) -> Optional[Release]: pass @indirect(ForgejoRelease.get_list) + # type: ignore def get_releases(self) -> list[Release]: pass @indirect(ForgejoRelease.create) + # type: ignore def create_release( self, tag: str, @@ -401,6 +411,7 @@ def create_release( pass @indirect(ForgejoPullRequest.create) + # type: ignore def create_pr( self, title: str, @@ -427,6 +438,7 @@ def get_commit_comment(self, commit_sha: str, comment_id: int) -> CommitComment: raise OperationNotSupported("Forgejo doesn't support commit comments") @indirect(ForgejoCommitFlag.set) + # type: ignore def set_commit_status( self, commit: str, @@ -439,6 +451,7 @@ def set_commit_status( pass @indirect(ForgejoCommitFlag.get) + # type: ignore def get_commit_statuses(self, commit: str) -> list[CommitFlag]: pass diff --git a/ogr/services/github/auth_providers/github_app.py b/ogr/services/github/auth_providers/github_app.py index 25633540..39d59411 100644 --- a/ogr/services/github/auth_providers/github_app.py +++ b/ogr/services/github/auth_providers/github_app.py @@ -58,7 +58,7 @@ def private_key(self) -> str: ) return Path(self._private_key_path).read_text() - return None + return "" @property def pygithub_instance(self) -> Optional[github.Github]: @@ -73,7 +73,7 @@ def integration(self) -> github.GithubIntegration: def get_token(self, namespace: str, repo: str) -> str: if not self.private_key: - return None + return "" # PyGithub 1.58 deprecated get_installation() in favor of get_repo_installation() # that raises an exception on error rather than returning None @@ -112,8 +112,12 @@ def try_create( return ( GithubApp( github_app_id, - github_app_private_key, - github_app_private_key_path, + github_app_private_key if github_app_private_key is not None else "", + ( + github_app_private_key_path + if github_app_private_key_path is not None + else "" + ), ) if github_app_id else None diff --git a/ogr/services/github/auth_providers/token.py b/ogr/services/github/auth_providers/token.py index 392d255c..08386e7b 100644 --- a/ogr/services/github/auth_providers/token.py +++ b/ogr/services/github/auth_providers/token.py @@ -38,4 +38,4 @@ def try_create( max_retries: Union[int, Retry] = 0, **_, ) -> Optional["TokenAuthentication"]: - return TokenAuthentication(token, max_retries=max_retries) + return TokenAuthentication(token if token is not None else "", max_retries=max_retries) diff --git a/ogr/services/github/project.py b/ogr/services/github/project.py index dd1cf1e8..58ebf6f5 100644 --- a/ogr/services/github/project.py +++ b/ogr/services/github/project.py @@ -266,6 +266,7 @@ def _get_collaborators_with_permission(self) -> dict: return collaborators @indirect(GithubIssue.get_list) + # type: ignore def get_issue_list( self, status: IssueStatus = IssueStatus.open, @@ -276,10 +277,12 @@ def get_issue_list( pass @indirect(GithubIssue.get) + # type: ignore def get_issue(self, issue_id: int) -> Issue: pass @indirect(GithubIssue.create) + # type: ignore def create_issue( self, title: str, @@ -290,14 +293,17 @@ def create_issue( ) -> Issue: pass + # type: ignore def delete(self) -> None: self.github_repo.delete() @indirect(GithubPullRequest.get_list) + # type: ignore def get_pr_list(self, status: PRStatus = PRStatus.open) -> list[PullRequest]: pass @indirect(GithubPullRequest.get) + # type: ignore def get_pr(self, pr_id: int) -> PullRequest: pass @@ -327,6 +333,7 @@ def get_tag_from_tag_name(self, tag_name: str) -> Optional[GitTag]: @if_readonly(return_function=GitProjectReadOnly.create_pr) @indirect(GithubPullRequest.create) + # type: ignore def create_pr( self, title: str, @@ -385,6 +392,7 @@ def get_commit_comment(self, commit_sha: str, comment_id: int) -> CommitComment: log_message="Create a status on a commit", ) @indirect(GithubCommitFlag.set) + # type: ignore def set_commit_status( self, commit: str, @@ -397,10 +405,12 @@ def set_commit_status( pass @indirect(GithubCommitFlag.get) + # type: ignore def get_commit_statuses(self, commit: str) -> list[CommitFlag]: pass @indirect(GithubCheckRun.get) + # type: ignore def get_check_run( self, check_run_id: Optional[int] = None, @@ -409,6 +419,7 @@ def get_check_run( pass @indirect(GithubCheckRun.create) + # type: ignore def create_check_run( self, name: str, @@ -425,6 +436,7 @@ def create_check_run( pass @indirect(GithubCheckRun.get_list) + # type: ignore def get_check_runs( self, commit_sha: str, @@ -448,6 +460,7 @@ def fork_create(self, namespace: Optional[str] = None) -> "GithubProject": logger.debug(f"Forked to {fork.namespace}/{fork.repo}") return fork + # type: ignore def change_token(self, new_token: str): raise OperationNotSupported @@ -535,18 +548,22 @@ def _normalize_label_color(color): return color @indirect(GithubRelease.get) + # type: ignore def get_release(self, identifier=None, name=None, tag_name=None) -> GithubRelease: pass @indirect(GithubRelease.get_latest) + # type: ignore def get_latest_release(self) -> Optional[GithubRelease]: pass @indirect(GithubRelease.get_list) + # type: ignore def get_releases(self) -> list[Release]: pass @indirect(GithubRelease.create) + # type: ignore def create_release(self, tag: str, name: str, message: str) -> GithubRelease: pass diff --git a/ogr/services/gitlab/comments.py b/ogr/services/gitlab/comments.py index e9136120..22c88348 100644 --- a/ogr/services/gitlab/comments.py +++ b/ogr/services/gitlab/comments.py @@ -76,6 +76,8 @@ def add_reaction(self, reaction: str) -> GitlabReaction: raise GitlabAPIException() from ex # Take project from the parent (PR's don't have project) + if self._parent is None: + raise ValueError("No parent instance") login = ( getattr(self._parent, "_target_project", None) or self._parent.project ).service.user.get_username() diff --git a/ogr/services/gitlab/project.py b/ogr/services/gitlab/project.py index c18dd3f4..706e2c9a 100644 --- a/ogr/services/gitlab/project.py +++ b/ogr/services/gitlab/project.py @@ -257,6 +257,7 @@ def request_access(self) -> None: raise GitlabAPIException("Unable to request access") from e @indirect(GitlabPullRequest.get_list) + # type: ignore def get_pr_list(self, status: PRStatus = PRStatus.open) -> list["PullRequest"]: pass @@ -269,6 +270,7 @@ def get_sha_from_tag(self, tag_name: str) -> str: raise GitlabAPIException(f"Tag {tag_name} was not found.") from ex @indirect(GitlabPullRequest.create) + # type: ignore def create_pr( self, title: str, @@ -352,6 +354,7 @@ def get_commit_comment(self, commit_sha: str, comment_id: int) -> CommitComment: return self._commit_comment_from_gitlab_object(comment, commit_sha) @indirect(GitlabCommitFlag.set) + # type: ignore def set_commit_status( self, commit: str, @@ -364,6 +367,7 @@ def set_commit_status( pass @indirect(GitlabCommitFlag.get) + # type: ignore def get_commit_statuses(self, commit: str) -> list[CommitFlag]: pass @@ -439,6 +443,7 @@ def get_files( return paths @indirect(GitlabIssue.get_list) + # type: ignore def get_issue_list( self, status: IssueStatus = IssueStatus.open, @@ -449,10 +454,12 @@ def get_issue_list( pass @indirect(GitlabIssue.get) + # type: ignore def get_issue(self, issue_id: int) -> Issue: pass @indirect(GitlabIssue.create) + # type: ignore def create_issue( self, title: str, @@ -464,6 +471,7 @@ def create_issue( pass @indirect(GitlabPullRequest.get) + # type: ignore def get_pr(self, pr_id: int) -> PullRequest: pass @@ -476,14 +484,17 @@ def _git_tag_from_tag_name(self, tag_name: str) -> GitTag: return GitTag(name=git_tag.name, commit_sha=git_tag.commit["id"]) @indirect(GitlabRelease.get_list) + # type: ignore def get_releases(self) -> list[Release]: pass @indirect(GitlabRelease.get) + # type: ignore def get_release(self, identifier=None, name=None, tag_name=None) -> GitlabRelease: pass @indirect(GitlabRelease.create) + # type: ignore def create_release( self, tag: str, @@ -494,6 +505,7 @@ def create_release( pass @indirect(GitlabRelease.get_latest) + # type: ignore def get_latest_release(self) -> Optional[GitlabRelease]: pass diff --git a/ogr/services/pagure/project.py b/ogr/services/pagure/project.py index 4555b26f..05b0efdf 100644 --- a/ogr/services/pagure/project.py +++ b/ogr/services/pagure/project.py @@ -255,6 +255,7 @@ def request_access(self): raise OperationNotSupported("Not possible on Pagure") @indirect(PagureIssue.get_list) + # type: ignore def get_issue_list( self, status: IssueStatus = IssueStatus.open, @@ -265,13 +266,16 @@ def get_issue_list( pass @indirect(PagureIssue.get) + # type: ignore def get_issue(self, issue_id: int) -> Issue: pass + # type: ignore def delete(self) -> None: self._call_project_api_raw("delete", method="POST") @indirect(PagureIssue.create) + # type: ignore def create_issue( self, title: str, @@ -283,6 +287,7 @@ def create_issue( pass @indirect(PagurePullRequest.get_list) + # type: ignore def get_pr_list( self, status: PRStatus = PRStatus.open, @@ -291,11 +296,13 @@ def get_pr_list( ) -> list[PullRequest]: pass + # type: ignore @indirect(PagurePullRequest.get) def get_pr(self, pr_id: int) -> PullRequest: pass @indirect(PagurePullRequest.get_files_diff) + # type: ignore def get_pr_files_diff( self, pr_id: int, @@ -306,6 +313,7 @@ def get_pr_files_diff( @if_readonly(return_function=GitProjectReadOnly.create_pr) @indirect(PagurePullRequest.create) + # type: ignore def create_pr( self, title: str, @@ -498,11 +506,13 @@ def commit_comment( def get_commit_comments(self, commit: str) -> list[CommitComment]: raise OperationNotSupported("Commit comments are not supported on Pagure.") + # type: ignore def get_commit_comment(self, commit_sha: str, comment_id: int) -> CommitComment: raise OperationNotSupported("Commit comments are not supported on Pagure.") @if_readonly(return_function=GitProjectReadOnly.set_commit_status) @indirect(PagureCommitFlag.set) + # type: ignore def set_commit_status( self, commit: str, @@ -517,30 +527,37 @@ def set_commit_status( pass @indirect(PagureCommitFlag.get) + # type: ignore def get_commit_statuses(self, commit: str) -> list[CommitFlag]: pass + # type: ignore def get_tags(self) -> list[GitTag]: response = self._call_project_api("git", "tags", params={"with_commits": True}) return [GitTag(name=n, commit_sha=c) for n, c in response["tags"].items()] + # type: ignore def get_tags_dict(self) -> dict[str, GitTag]: response = self._call_project_api("git", "tags", params={"with_commits": True}) return {n: GitTag(name=n, commit_sha=c) for n, c in response["tags"].items()} @indirect(PagureRelease.get_list) + # type: ignore def get_releases(self) -> list[Release]: pass + # type: ignore @indirect(PagureRelease.get) def get_release(self, identifier=None, name=None, tag_name=None) -> PagureRelease: pass @indirect(PagureRelease.get_latest) + # type: ignore def get_latest_release(self) -> Optional[PagureRelease]: pass @indirect(PagureRelease.create) + # type: ignore def create_release( self, tag: str, diff --git a/ogr/services/pagure/pull_request.py b/ogr/services/pagure/pull_request.py index fa66bc1c..55498216 100644 --- a/ogr/services/pagure/pull_request.py +++ b/ogr/services/pagure/pull_request.py @@ -26,7 +26,9 @@ class PagurePullRequest(BasePullRequest): _target_project: "ogr_pagure.PagureProject" - _source_project: "ogr_pagure.PagureProject" = None + if ogr_pagure.PagureProject is None: + _source_project = "" + _source_project: "ogr_pagure.PagureProject" def __init__(self, raw_pr, project): super().__init__(raw_pr, project) @@ -59,7 +61,11 @@ def status(self) -> PRStatus: def url(self) -> str: return "/".join( [ - self.target_project.service.instance_url, + ( + self.target_project.service.instance_url + if self.target_project.service.instance_url is not None + else "" + ), self._raw_pr["project"]["url_path"], "pull-request", str(self.id), diff --git a/ogr/services/pagure/release.py b/ogr/services/pagure/release.py index 98360099..ed6a372e 100644 --- a/ogr/services/pagure/release.py +++ b/ogr/services/pagure/release.py @@ -35,7 +35,7 @@ def url(self) -> Optional[str]: @property def created_at(self) -> datetime.datetime: - return None + return datetime.datetime.now @property def tarball_url(self) -> str: @@ -82,7 +82,7 @@ def create( if not response["tag_created"]: raise PagureAPIException("Release has not been created") - return PagureRelease(GitTag(tag, ref), project) + return PagureRelease(GitTag(tag, ref if ref is not None else ""), project) def edit_release(self, name: str, message: str) -> None: raise OperationNotSupported("edit_release not supported on Pagure") From bf9a9b5e96e00fc035f6d9bcefb64c09491af198 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 13 Apr 2025 17:58:26 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- ogr/services/github/auth_providers/token.py | 4 +++- ogr/services/gitlab/comments.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ogr/services/github/auth_providers/token.py b/ogr/services/github/auth_providers/token.py index 08386e7b..6724e296 100644 --- a/ogr/services/github/auth_providers/token.py +++ b/ogr/services/github/auth_providers/token.py @@ -38,4 +38,6 @@ def try_create( max_retries: Union[int, Retry] = 0, **_, ) -> Optional["TokenAuthentication"]: - return TokenAuthentication(token if token is not None else "", max_retries=max_retries) + return TokenAuthentication( + token if token is not None else "", max_retries=max_retries, + ) diff --git a/ogr/services/gitlab/comments.py b/ogr/services/gitlab/comments.py index 22c88348..a98e0e2f 100644 --- a/ogr/services/gitlab/comments.py +++ b/ogr/services/gitlab/comments.py @@ -76,7 +76,7 @@ def add_reaction(self, reaction: str) -> GitlabReaction: raise GitlabAPIException() from ex # Take project from the parent (PR's don't have project) - if self._parent is None: + if self._parent is None: raise ValueError("No parent instance") login = ( getattr(self._parent, "_target_project", None) or self._parent.project