Cleanup: quiet mypy warnings in gitea_inactive_developers

Also add to the list of scripts to check with "make check_mypy".
This commit is contained in:
Campbell Barton 2023-04-16 16:52:19 +10:00
parent b827c8cd1e
commit 6722f90734
2 changed files with 14 additions and 8 deletions

@ -58,6 +58,7 @@ PATHS_EXCLUDE = set(
"tools/utils/git_log.py", "tools/utils/git_log.py",
"tools/utils/git_log_review_commits.py", "tools/utils/git_log_review_commits.py",
"tools/utils/git_log_review_commits_advanced.py", "tools/utils/git_log_review_commits_advanced.py",
"tools/utils/gitea_inactive_developers.py",
"tools/utils/make_cursor_gui.py", "tools/utils/make_cursor_gui.py",
"tools/utils/make_gl_stipple_from_xpm.py", "tools/utils/make_gl_stipple_from_xpm.py",
"tools/utils/make_shape_2d_from_blend.py", "tools/utils/make_shape_2d_from_blend.py",

@ -31,7 +31,9 @@ from typing import (
Tuple, Tuple,
Type, Type,
TypeVar, TypeVar,
Union,
) )
from requests.structures import CaseInsensitiveDict
logger = logging.getLogger(__file__) logger = logging.getLogger(__file__)
@ -43,7 +45,7 @@ class TeamMember():
full_name: str full_name: str
last_login: datetime.datetime last_login: datetime.datetime
def __str__(self): def __str__(self) -> str:
return "{id};{login};{full_name};{last_login};{url}\n".format( return "{id};{login};{full_name};{last_login};{url}\n".format(
id=self.id, id=self.id,
login=self.login, login=self.login,
@ -64,22 +66,25 @@ retry: Callable[[F], F] = retry_decorator(
def assert_cast(typ: Type[T], obj: object) -> T: def assert_cast(typ: Type[T], obj: object) -> T:
assert isinstance(obj, typ), f'object is not of type {typ}: {obj}' assert isinstance(obj, typ), f'object is not of type {typ}: {obj}'
return cast(T, obj) # NOTE: MYPY warns the cast is redundant, we might consider removing it.
return cast(T, obj) # type: ignore
def get_date_object(date_string: str) -> datetime.datetime: def get_date_object(date_string: str) -> datetime.datetime:
return iso8601.parse_date(date_string) result = iso8601.parse_date(date_string)
assert isinstance(result, datetime.datetime)
return result
results_per_page = 25 results_per_page = 25
def get_next_page(headers: Dict, page: int) -> int: def get_next_page(headers: CaseInsensitiveDict[str], page: Optional[Page]) -> Optional[Page]:
""" """
Parse the header looking for reference to next. Parse the header looking for reference to next.
""" """
total_count = int(assert_cast(str, headers.get('X-Total-Count'))) total_count = int(assert_cast(str, headers.get('X-Total-Count')))
next_page = page + 1 if page else 1 next_page = Page(page + 1 if page else 1)
if next_page * results_per_page > total_count: if next_page * results_per_page > total_count:
return None return None
@ -105,7 +110,7 @@ def fetch_single(
'Authorization': 'token ' + api_token, 'Authorization': 'token ' + api_token,
} }
params = { params: Dict[str, Union[str, int]] = {
'limit': results_per_page, 'limit': results_per_page,
**data, **data,
} }
@ -119,7 +124,7 @@ def fetch_single(
response_json = response.json() response_json = response.json()
next_page = get_next_page(response.headers, page) next_page = get_next_page(response.headers, page)
return response_json, None if next_page is None else Page(next_page) return response_json, None if next_page is None else next_page
def fetch_all( def fetch_all(
@ -226,7 +231,7 @@ api_url = yarl.URL(gitea_domain + 'api/v1/')
organization_name = "blender" organization_name = "blender"
def main(): def main() -> None:
for team_name in teams: for team_name in teams:
logger.warning(team_name) logger.warning(team_name)
members = fetch_team_members( members = fetch_team_members(