From 658760576eea59984555f1b36fe6f2fcc604c706 Mon Sep 17 00:00:00 2001 From: Jon Bristow Date: Tue, 18 Mar 2025 09:49:00 -0700 Subject: [PATCH] fix: clean up kwargs and lowercase any --- nodestream_github/client/githubclient.py | 3 +- nodestream_github/orgs.py | 3 +- nodestream_github/repos.py | 9 +++--- nodestream_github/teams.py | 3 +- nodestream_github/transformer/repo.py | 3 +- nodestream_github/types/enums.py | 4 +-- nodestream_github/users.py | 3 +- tests/data/orgs.py | 4 ++- tests/data/repos.py | 6 ++-- tests/data/teams.py | 6 ++-- tests/data/users.py | 9 +++++- tests/mocks/githubrest.py | 38 +++++++++++++----------- 12 files changed, 57 insertions(+), 34 deletions(-) diff --git a/nodestream_github/client/githubclient.py b/nodestream_github/client/githubclient.py index b13ea5b..0723749 100644 --- a/nodestream_github/client/githubclient.py +++ b/nodestream_github/client/githubclient.py @@ -7,6 +7,7 @@ import logging from collections.abc import AsyncGenerator from enum import Enum +from typing import Any import httpx from limits import RateLimitItem, RateLimitItemPerMinute @@ -82,7 +83,7 @@ def __init__( max_retries: int | None = None, rate_limit_per_minute: int | None = None, max_retry_wait_seconds: int | None = None, - **_kwargs: any, + **_kwargs: dict[str, Any], ): if per_page is None: per_page = DEFAULT_PAGE_SIZE diff --git a/nodestream_github/orgs.py b/nodestream_github/orgs.py index 14eff7c..3a0dfa2 100644 --- a/nodestream_github/orgs.py +++ b/nodestream_github/orgs.py @@ -6,6 +6,7 @@ """ from collections.abc import AsyncGenerator +from typing import Any from nodestream.pipeline import Extractor @@ -25,7 +26,7 @@ def __init__( *, include_members: bool | None = True, include_repositories: bool | None = True, - **kwargs: any, + **kwargs: dict[str, Any], ): self.include_members = include_members is True diff --git a/nodestream_github/repos.py b/nodestream_github/repos.py index ba92a82..b95308a 100644 --- a/nodestream_github/repos.py +++ b/nodestream_github/repos.py @@ -7,6 +7,7 @@ from collections.abc import AsyncGenerator from dataclasses import dataclass +from typing import Any from nodestream.pipeline import Extractor @@ -19,7 +20,7 @@ logger = get_plugin_logger(__name__) -def _dict_val_to_bool(d: dict[str, any], key: str) -> bool: +def _dict_val_to_bool(d: dict[str, Any], key: str) -> bool: value = d.get(key) if value is None: return False @@ -46,7 +47,7 @@ def user_any(self) -> bool: return self.user_public or self.user_private @staticmethod - def from_dict(raw_dict: dict[str, any]) -> "CollectWhichRepos": + def from_dict(raw_dict: dict[str, Any]) -> "CollectWhichRepos": org_all = _dict_val_to_bool(raw_dict, "org_all") user_all = _dict_val_to_bool(raw_dict, "user_all") @@ -62,8 +63,8 @@ def from_dict(raw_dict: dict[str, any]) -> "CollectWhichRepos": class GithubReposExtractor(Extractor): def __init__( self, - collecting: CollectWhichRepos | dict[str, any] | None = None, - **kwargs: any, + collecting: CollectWhichRepos | dict[str, Any] | None = None, + **kwargs: dict[str, Any], ): if isinstance(collecting, CollectWhichRepos): self.collecting = collecting diff --git a/nodestream_github/teams.py b/nodestream_github/teams.py index cd2201a..63fecc9 100644 --- a/nodestream_github/teams.py +++ b/nodestream_github/teams.py @@ -6,6 +6,7 @@ """ from collections.abc import AsyncGenerator +from typing import Any from nodestream.pipeline import Extractor @@ -20,7 +21,7 @@ class GithubTeamsExtractor(Extractor): - def __init__(self, **github_client_kwargs: any): + def __init__(self, **github_client_kwargs: dict[str, Any]): self.client = GithubRestApiClient(**github_client_kwargs) async def extract_records(self) -> AsyncGenerator[TeamRecord]: diff --git a/nodestream_github/transformer/repo.py b/nodestream_github/transformer/repo.py index 296b588..b668757 100644 --- a/nodestream_github/transformer/repo.py +++ b/nodestream_github/transformer/repo.py @@ -1,5 +1,6 @@ import logging from collections.abc import AsyncGenerator +from typing import Any from nodestream.pipeline import Transformer @@ -17,7 +18,7 @@ def __init__( self, *, full_name_key: str = "full_name", - **kwargs: any, + **kwargs: dict[str, Any], ): self.client = GithubRestApiClient(**kwargs) self.full_name_key = full_name_key diff --git a/nodestream_github/types/enums.py b/nodestream_github/types/enums.py index 4526132..5378c8b 100644 --- a/nodestream_github/types/enums.py +++ b/nodestream_github/types/enums.py @@ -23,13 +23,13 @@ class UserRepoType(StrEnum): MEMBER = "member" -class OrgMemberRole: +class OrgMemberRole(StrEnum): ALL = "all" ADMIN = "admin" MEMBER = "member" -class TeamMemberRole: +class TeamMemberRole(StrEnum): ALL = "all" MAINTAINER = "maintainer" MEMBER = "member" diff --git a/nodestream_github/users.py b/nodestream_github/users.py index 435fa48..4942d9e 100644 --- a/nodestream_github/users.py +++ b/nodestream_github/users.py @@ -6,6 +6,7 @@ """ from collections.abc import AsyncGenerator +from typing import Any from nodestream.pipeline import Extractor @@ -19,7 +20,7 @@ class GithubUserExtractor(Extractor): - def __init__(self, **github_client_kwargs: any): + def __init__(self, **github_client_kwargs: dict[str, Any]): self.client = GithubRestApiClient(**github_client_kwargs) async def extract_records(self) -> AsyncGenerator[UserRecord]: diff --git a/tests/data/orgs.py b/tests/data/orgs.py index e45782b..37417fe 100644 --- a/tests/data/orgs.py +++ b/tests/data/orgs.py @@ -1,9 +1,11 @@ +from typing import Any + from nodestream_github.types import GithubOrg, GithubOrgSummary from tests.data.util import encode_as_node_id def org_summary( - *, org_login: str = "github", org_id: int = 1, **kwargs: any + *, org_login: str = "github", org_id: int = 1, **kwargs: dict[str, Any] ) -> GithubOrgSummary: return { "login": org_login, diff --git a/tests/data/repos.py b/tests/data/repos.py index ca9b68f..3326976 100644 --- a/tests/data/repos.py +++ b/tests/data/repos.py @@ -1,3 +1,5 @@ +from typing import Any + from nodestream_github.types import GithubRepo from tests.data.users import OCTOCAT_USER from tests.data.util import encode_as_node_id @@ -5,10 +7,10 @@ def repo( *, - owner: dict[str, any] | None = None, + owner: dict[str, Any] | None = None, repo_name: str = "Hello-World", repo_id: int = 1296269, - **kwargs: any, + **kwargs: dict[str, Any], ) -> GithubRepo: repo_owner = OCTOCAT_USER if owner is None else owner diff --git a/tests/data/teams.py b/tests/data/teams.py index 376d47b..34c91b7 100644 --- a/tests/data/teams.py +++ b/tests/data/teams.py @@ -1,3 +1,5 @@ +from typing import Any + from nodestream_github.types import GithubOrgSummary, GithubTeam, GithubTeamSummary from tests.data.orgs import GITHUB_ORG from tests.data.util import encode_as_node_id @@ -8,7 +10,7 @@ def team_summary( team_id: int = 1, slug: str = "justice-league", org_login: str = "github", - **kwargs: any, + **kwargs: dict[str, Any], ) -> GithubTeamSummary: return { "id": team_id, @@ -32,7 +34,7 @@ def team( team_id: int = 1, organization: GithubOrgSummary | None = None, slug: str = "justice-league", - **kwargs: any, + **kwargs: dict[str, Any], ) -> GithubTeam: org = organization if organization else GITHUB_ORG summary = team_summary(team_id=team_id, org_login=org["login"], slug=slug) diff --git a/tests/data/users.py b/tests/data/users.py index 3882a16..7a7babc 100644 --- a/tests/data/users.py +++ b/tests/data/users.py @@ -1,8 +1,15 @@ +from typing import Any + from nodestream_github.types import GithubUser from tests.data.util import encode_as_node_id -def user(*, user_login: str = "octocat", user_id: int = 1, **kwargs: any) -> GithubUser: +def user( + *, + user_login: str = "octocat", + user_id: int = 1, + **kwargs: dict[str, Any], +) -> GithubUser: return { "login": f"{user_login}", diff --git a/tests/mocks/githubrest.py b/tests/mocks/githubrest.py index 74bbc99..76370c8 100644 --- a/tests/mocks/githubrest.py +++ b/tests/mocks/githubrest.py @@ -1,5 +1,5 @@ # noinspection PyProtectedMember -from typing import Optional +from typing import Any, Optional from pytest_httpx import HTTPXMock @@ -41,7 +41,7 @@ def per_page(self) -> int: def httpx_mock(self) -> HTTPXMock: return self._httpx_mock - def add_exception(self, *, exception: Exception, **matchers: any): + def add_exception(self, *, exception: Exception, **matchers: dict[str, Any]): self.httpx_mock.add_exception(exception, **matchers) def add_response( @@ -55,7 +55,7 @@ def add_response( html: str | None = None, stream: Optional[any] = None, json: Optional[any] = None, - **matchers: any, + **matchers: dict[str, Any], ): self.httpx_mock.add_response( status_code=status_code, @@ -69,12 +69,12 @@ def add_response( **matchers, ) - def all_orgs(self, **kwargs: any) -> None: + def all_orgs(self, **kwargs: dict[str, Any]) -> None: self.add_response( url=f"{self.base_url}/organizations?per_page={self.per_page}", **kwargs ) - def get_org(self, *, org_name: str, **kwargs: any) -> None: + def get_org(self, *, org_name: str, **kwargs: dict[str, Any]) -> None: self.add_response(url=f"{self.base_url}/orgs/{org_name}", **kwargs) def get_members_for_org( @@ -82,7 +82,7 @@ def get_members_for_org( *, org_name: str, role: OrgMemberRole | None = None, - **kwargs: any, + **kwargs: dict[str, Any], ) -> None: actual_role = f"role={role}" if role else "" self.add_response( @@ -95,7 +95,7 @@ def get_repos_for_org( *, org_name: str, repo_type: OrgRepoType | None = None, - **kwargs: any, + **kwargs: dict[str, Any], ): type_param = f"&type={repo_type}" if repo_type else "" self.add_response( @@ -103,13 +103,13 @@ def get_repos_for_org( **kwargs, ) - def list_teams_for_org(self, *, org_login: str, **kwargs: any): + def list_teams_for_org(self, *, org_login: str, **kwargs: dict[str, Any]): self.add_response( url=f"{self.base_url}/orgs/{org_login}/teams?per_page={self.per_page}", **kwargs, ) - def get_team(self, *, org_login: str, team_slug: str, **kwargs: any): + def get_team(self, *, org_login: str, team_slug: str, **kwargs: dict[str, Any]): self.add_response( url=f"{self.base_url}/orgs/{org_login}/teams/{team_slug}", **kwargs ) @@ -119,20 +119,22 @@ def get_members_for_team( *, team_id: int, role: TeamMemberRole, - **kwargs: any, + **kwargs: dict[str, Any], ): self.add_response( url=f"{self.base_url}/teams/{team_id}/members?per_page={self.per_page}&role={role}", **kwargs, ) - def get_repos_for_team(self, *, org_login: str, slug: str, **kwargs: any): + def get_repos_for_team( + self, *, org_login: str, slug: str, **kwargs: dict[str, Any] + ): self.add_response( url=f"{self.base_url}/orgs/{org_login}/teams/{slug}/repos?per_page={self.per_page}", **kwargs, ) - def all_repos(self, **kwargs: any) -> None: + def all_repos(self, **kwargs: dict[str, Any]) -> None: self.add_response( url=f"{self.base_url}/repositories?per_page={self.per_page}", **kwargs ) @@ -142,14 +144,16 @@ def get_languages_for_repo( *, owner_login: str, repo_name: str, - **kwargs: any, + **kwargs: dict[str, Any], ) -> None: self.add_response( url=f"{self.base_url}/repos/{owner_login}/{repo_name}/languages?per_page={self.per_page}", **kwargs, ) - def get_webhooks_for_repo(self, *, owner_login: str, repo_name: str, **kwargs: any): + def get_webhooks_for_repo( + self, *, owner_login: str, repo_name: str, **kwargs: dict[str, Any] + ): self.add_response( url=f"{self.base_url}/repos/{owner_login}/{repo_name}/hooks?per_page={self.per_page}", **kwargs, @@ -161,14 +165,14 @@ def get_collaborators_for_repo( owner_login: str, repo_name: str, affiliation: CollaboratorAffiliation, - **kwargs: any, + **kwargs: dict[str, Any], ) -> None: self.add_response( url=f"{self.base_url}/repos/{owner_login}/{repo_name}/collaborators?per_page={self.per_page}&affiliation={affiliation}", **kwargs, ) - def all_users(self, **kwargs: any): + def all_users(self, **kwargs: dict[str, Any]): self.add_response( url=f"{self.base_url}/users?per_page={self.per_page}", **kwargs ) @@ -178,7 +182,7 @@ def get_repos_for_user( *, user_login: str, type_param: UserRepoType | None, - **kwargs: any, + **kwargs: dict[str, Any], ): type_param = f"&type={type_param}" if type_param else "" self.add_response(