Skip to content

Commit bea73d9

Browse files
authored
poetry update: ruff, mypyのバージョンアップ (#708)
* poetry update: ruff versionup * mypyのunreachbleを修正 * mypyの型間違いを修正 * mypy設定を追加
1 parent 9a03c97 commit bea73d9

File tree

6 files changed

+359
-280
lines changed

6 files changed

+359
-280
lines changed

annofabapi/api.py

+25-13
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from collections.abc import Collection
66
from functools import wraps
77
from json import JSONDecodeError
8-
from typing import Any, Callable, Optional, Union
8+
from typing import Any, Callable, Optional, TypeVar, Union, overload
99

1010
import backoff
1111
import requests
@@ -34,7 +34,7 @@ def _read_mfa_code_from_stdin() -> str:
3434
return inputted_mfa_code
3535

3636

37-
def _mask_senritive_value_for_dict(data: dict[str, Any], keys: Collection[str]) -> dict[str, Any]:
37+
def _mask_sensitive_value_for_dict(data: dict[str, Any], keys: Collection[str]) -> dict[str, Any]:
3838
"""
3939
dictに含まれているセンシティブな情報を"***"でマスクします。
4040
@@ -108,7 +108,7 @@ def mask_str_rquest_body(str_request_body: str) -> Any: # noqa: ANN401
108108

109109
if 400 <= response.status_code < 600:
110110
# logにAuthorizationを出力しないようにマスクする
111-
headers_for_logger = _mask_senritive_value_for_dict(dict(response.request.headers), {"Authorization"})
111+
headers_for_logger = _mask_sensitive_value_for_dict(dict(response.request.headers), {"Authorization"})
112112

113113
# request_bodyのpassword関係をマスクして、logに出力する
114114
request_body_for_logger: Optional[Any] = None
@@ -140,28 +140,40 @@ def mask_str_rquest_body(str_request_body: str) -> Any: # noqa: ANN401
140140
)
141141

142142

143-
def _create_request_body_for_logger(data: Any) -> Any: # noqa: ANN401
143+
T = TypeVar("T")
144+
145+
146+
@overload
147+
def _create_request_body_for_logger(data: bytes) -> str:
148+
pass
149+
150+
151+
@overload
152+
def _create_request_body_for_logger(data: T) -> T: ...
153+
154+
155+
def _create_request_body_for_logger(data: Any) -> Any:
144156
"""
145-
ログに出力するためのreqest_bodyを生成する
157+
ログに出力するためのrequest_bodyを生成する
146158
* パスワードやトークンなどの機密情報をマスクする
147159
* bytes型の場合は `(bytes)`と記載する。
148160
149-
150161
Args:
151162
data: request_body
152163
153164
Returns:
154165
ログ出力用のrequest_body
155166
"""
156-
if not isinstance(data, dict):
157-
return data
158-
elif isinstance(data, bytes):
167+
if isinstance(data, bytes):
159168
# bytes型のときは値を出力しても意味がないので、bytesであることが分かるようにする
160169
return "(bytes)"
161170

162-
return _mask_senritive_value_for_dict(
163-
data, keys={"password", "old_password", "new_password", "id_token", "refresh_token", "access_token", "session", "mfa_code"}
164-
)
171+
# dictの場合は機密情報をマスクする
172+
sensitive_keys = {"password", "old_password", "new_password", "id_token", "refresh_token", "access_token", "session", "mfa_code"}
173+
if isinstance(data, dict):
174+
return _mask_sensitive_value_for_dict(data, keys=sensitive_keys)
175+
176+
return data
165177

166178

167179
def _create_query_params_for_logger(params: dict[str, Any]) -> dict[str, Any]:
@@ -175,7 +187,7 @@ def _create_query_params_for_logger(params: dict[str, Any]) -> dict[str, Any]:
175187
Returns:
176188
ログ出力用のparams
177189
"""
178-
return _mask_senritive_value_for_dict(params, keys={"X-Amz-Security-Token", "X-Amz-Credential"})
190+
return _mask_sensitive_value_for_dict(params, keys={"X-Amz-Security-Token", "X-Amz-Credential"})
179191

180192

181193
def _should_retry_with_status(status_code: int) -> bool:

annofabapi/parser.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import abc # noqa: A005
1+
import abc
22
import json
33
import os
44
import zipfile
@@ -481,7 +481,7 @@ def lazy_parse_simple_annotation_dir(annotation_dir_path: Path) -> Iterator[Simp
481481
return __parse_annotation_dir(annotation_dir_path, SimpleAnnotationDirParser)
482482

483483

484-
def lazy_parse_full_annotation_dir(annotation_dir_path: Path) -> Iterator[SimpleAnnotationParser]:
484+
def lazy_parse_full_annotation_dir(annotation_dir_path: Path) -> Iterator[FullAnnotationParser]:
485485
"""Fullアノテーションzipを展開したディレクトリ内を探索し、各annotationをparse可能なオブジェクトの列を返します。
486486
487487
Args:

annofabapi/resource.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import logging # noqa: A005
1+
import logging
22
import netrc
33
import os
44
from typing import Optional, Union

annofabapi/wrapper.py

+5-11
Original file line numberDiff line numberDiff line change
@@ -1099,7 +1099,8 @@ def _get_statistics_daily_xxx(
10991099
def _get_from_and_to_date_for_statistics_webapi(
11001100
self, project_id: str, from_date: Optional[str], to_date: Optional[str]
11011101
) -> tuple[datetime.date, datetime.date]:
1102-
"""statistics webapi用に、from_date, to_dateを取得する。
1102+
"""statistics webapi用に、`datetime.date`型であるfrom_date, to_dateを取得する。
1103+
`from_date`または`to_date`がNoneならば、`get_statistics_available_dates` APIで取得した統計情報が存在する期間を参照して、`from_date`と`to_date`を決めます。
11031104
11041105
Args:
11051106
project_id (str): プロジェクトID。
@@ -1108,13 +1109,7 @@ def _get_from_and_to_date_for_statistics_webapi(
11081109
11091110
Returns:
11101111
tuple[datetime.date, datetime.date]: [description]
1111-
"""
1112-
if from_date is None:
1113-
project, _ = self.api.get_project(project_id)
1114-
from_date = project["created_datetime"][0:10] # "YYYY-MM-DD"の部分を抽出
1115-
if to_date is None:
1116-
to_date = str(datetime.datetime.now(tz=datetime.timezone(datetime.timedelta(hours=9))).date())
1117-
1112+
""" # noqa: E501
11181113
if from_date is None or to_date is None:
11191114
dates, _ = self.api.get_statistics_available_dates(project_id)
11201115
assert len(dates) > 0
@@ -1123,9 +1118,8 @@ def _get_from_and_to_date_for_statistics_webapi(
11231118
if to_date is None:
11241119
to_date = dates[-1]["to"]
11251120

1126-
DATE_FORMAT = "%Y-%m-%d"
1127-
dt_from_date = datetime.datetime.strptime(from_date, DATE_FORMAT).date() # noqa: DTZ007
1128-
dt_to_date = datetime.datetime.strptime(to_date, DATE_FORMAT).date() # noqa: DTZ007
1121+
dt_from_date = datetime.datetime.fromisoformat(from_date).date()
1122+
dt_to_date = datetime.datetime.fromisoformat(to_date).date()
11291123
return dt_from_date, dt_to_date
11301124

11311125
def get_account_daily_statistics(

0 commit comments

Comments
 (0)