Skip to content

Commit

Permalink
Ruff v0.2.2に対応する (#1155)
Browse files Browse the repository at this point in the history
* update poetry

* update makefile

* format

* format

* "PERF401"をnoqaにする

* "RUF015"にnoqaを付ける

* RUF012をnoqaにする

* E501をnoqaにする

* B023をnoaqにする

* B024などに対応

* PYI041に対応する

* Aに対応

* ANN401をnoqaにする

* B017をnoqaにする

* update pyproject.toml

* pylintの修正
  • Loading branch information
yuji38kwmt authored Feb 21, 2024
1 parent 52170da commit 7900cbd
Show file tree
Hide file tree
Showing 165 changed files with 1,089 additions and 2,363 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ endif
.PHONY: docs lint test format publish_test publish

format:
poetry run black ${SOURCE_FILES} ${TEST_FILES}
poetry run ruff format ${SOURCE_FILES} ${TEST_FILES}
poetry run ruff check ${SOURCE_FILES} ${TEST_FILES} --fix-only --exit-zero

lint:
Expand All @@ -22,7 +22,7 @@ lint:
test:
# 更新の競合が発生する可能性があるので、並列実行しない
# skip対象のmakersを実行しないように"-m"で指定する
poetry run pytest --cov=${SOURCE_FILES} --cov-report=html ${TEST_FILES} -m "not submitting_job and not depending_on_annotation_specs"
poetry run pytest --cov=${SOURCE_FILES} --cov-report=html ${TEST_FILES} -m "not submitting_job and not depending_on_annotation_specs"

publish:
poetry publish --build
Expand Down
4 changes: 1 addition & 3 deletions annofabcli/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,7 @@ def main(arguments: Optional[list[str]] = None) -> None:


def create_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
description="Command Line Interface for Annofab", formatter_class=annofabcli.common.cli.PrettyHelpFormatter
)
parser = argparse.ArgumentParser(description="Command Line Interface for Annofab", formatter_class=annofabcli.common.cli.PrettyHelpFormatter)
parser.add_argument("--version", action="version", version=f"annofabcli {annofabcli.__version__}")
parser.set_defaults(command_help=parser.print_help)

Expand Down
13 changes: 3 additions & 10 deletions annofabcli/annotation/annotation_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,7 @@ def get_attribute_name(additional_data: dict[str, Any]) -> str:
AdditionalDataDefinitionType.SELECT.value,
]:
# 排他選択の場合、属性値に選択肢IDが入っているため、対象の選択肢を探す
choice_info = more_itertools.first_true(
additional_data["choices"], pred=lambda e: get_message_for_i18n(e["name"]) == attribute_value
)
choice_info = more_itertools.first_true(additional_data["choices"], pred=lambda e: get_message_for_i18n(e["name"]) == attribute_value)
tmp = [e for e in additional_data["choices"] if get_message_for_i18n(e["name"]) == attribute_value]

if len(tmp) == 0:
Expand Down Expand Up @@ -107,18 +105,13 @@ def get_label_name(label_info: dict[str, Any]) -> str:
raise ValueError(f"アノテーション仕様に、label_id='{label_id}' であるラベルは存在しません。")

tmp_additional_data_definition_ids = set(label_info["additional_data_definitions"])
tmp_additionals = [
e
for e in annotation_specs["additionals"]
if e["additional_data_definition_id"] in tmp_additional_data_definition_ids
]
tmp_additionals = [e for e in annotation_specs["additionals"] if e["additional_data_definition_id"] in tmp_additional_data_definition_ids]

attributes_for_webapi: list[AdditionalDataV1] = []
for attribute_name, attribute_value in attributes.items():
additional_data = more_itertools.first_true(
tmp_additionals,
pred=lambda e: get_message_for_i18n(e["name"])
== attribute_name, # noqa: function-uses-loop-variable # pylint: disable=cell-var-from-loop
pred=lambda e: get_message_for_i18n(e["name"]) == attribute_name, # noqa: B023 # pylint: disable=cell-var-from-loop
)
tmp = [e for e in tmp_additionals if get_message_for_i18n(e["name"]) == attribute_name]
if len(tmp) == 0:
Expand Down
37 changes: 15 additions & 22 deletions annofabcli/annotation/change_annotation_attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,7 @@ def _to_request_body_elm(annotation: Dict[str, Any]) -> Dict[str, Any]:
request_body = [_to_request_body_elm(annotation) for annotation in annotation_list]
return self.service.api.batch_update_annotations(self.project_id, request_body=request_body)[0]

def get_annotation_list_for_task(
self, task_id: str, annotation_query: AnnotationQueryForAPI
) -> list[dict[str, Any]]:
def get_annotation_list_for_task(self, task_id: str, annotation_query: AnnotationQueryForAPI) -> list[dict[str, Any]]:
"""
タスク内のアノテーション一覧を取得する。
Expand All @@ -108,9 +106,7 @@ def get_annotation_list_for_task(
"""
dict_query = annotation_query.to_dict()
dict_query.update({"task_id": task_id, "exact_match_task_id": True})
annotation_list = self.service.wrapper.get_all_annotation_list(
self.project_id, query_params={"query": dict_query}
)
annotation_list = self.service.wrapper.get_all_annotation_list(self.project_id, query_params={"query": dict_query})
return annotation_list

def change_attributes_for_task(
Expand All @@ -135,7 +131,7 @@ def change_attributes_for_task(
Returns:
アノテーションの属性を変更するAPI ``change_annotation_attributes`` を実行したか否か
"""
logger_prefix = f"{str(task_index+1)} 件目: " if task_index is not None else ""
logger_prefix = f"{task_index+1!s} 件目: " if task_index is not None else ""
dict_task = self.service.wrapper.get_task_or_none(self.project_id, task_id)
if dict_task is None:
logger.warning(f"task_id = '{task_id}' は存在しません。")
Expand Down Expand Up @@ -252,9 +248,7 @@ def validate(self, args: argparse.Namespace) -> bool:
return True

@classmethod
def get_annotation_query_for_api(
cls, str_annotation_query: str, annotation_specs: dict[str, Any]
) -> AnnotationQueryForAPI:
def get_annotation_query_for_api(cls, str_annotation_query: str, annotation_specs: dict[str, Any]) -> AnnotationQueryForAPI:
"""
CLIから受け取った`--annotation_query`の値から、APIに渡すクエリー情報を返す。
"""
Expand All @@ -263,9 +257,7 @@ def get_annotation_query_for_api(
return annotation_query_for_cli.to_query_for_api(annotation_specs)

@classmethod
def get_attributes_for_api(
cls, str_attributes: str, annotation_specs: dict[str, Any], label_id: str
) -> list[AdditionalDataV1]:
def get_attributes_for_api(cls, str_attributes: str, annotation_specs: dict[str, Any], label_id: str) -> list[AdditionalDataV1]:
"""
CLIから受け取った`--attributes`の値から、APIに渡す属性情報を返す。
"""
Expand All @@ -290,15 +282,16 @@ def main(self) -> None:
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)

try:
attributes = self.get_attributes_for_api(
args.attributes, annotation_specs, label_id=annotation_query.label_id
)
attributes = self.get_attributes_for_api(args.attributes, annotation_specs, label_id=annotation_query.label_id)
except ValueError as e:
print(f"{self.COMMON_MESSAGE} argument '--attributes' の値が不正です。 :: {e}", file=sys.stderr)
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)

if args.backup is None:
print("間違えてアノテーションを変更してしまっときに復元できるようにするため、'--backup'でバックアップ用のディレクトリを指定することを推奨します。", file=sys.stderr)
print(
"間違えてアノテーションを変更してしまっときに復元できるようにするため、'--backup'でバックアップ用のディレクトリを指定することを推奨します。",
file=sys.stderr,
)
if not self.confirm_processing("復元用のバックアップディレクトリが指定されていません。処理を続行しますか?"):
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
backup_dir = None
Expand All @@ -307,9 +300,7 @@ def main(self) -> None:

super().validate_project(project_id, [ProjectMemberRole.OWNER])

main_obj = ChangeAnnotationAttributesMain(
self.service, project_id=project_id, is_force=args.force, all_yes=args.yes
)
main_obj = ChangeAnnotationAttributesMain(self.service, project_id=project_id, is_force=args.force, all_yes=args.yes)
main_obj.change_annotation_attributes_for_task_list(
task_id_list,
annotation_query=annotation_query,
Expand Down Expand Up @@ -347,7 +338,9 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
"--attributes",
type=str,
required=True,
help="変更後の属性をJSON形式で指定します。" "``file://`` を先頭に付けると、JSON形式のファイルを指定できます。" f"(ex): ``{EXAMPLE_ATTRIBUTES}``",
help="変更後の属性をJSON形式で指定します。"
"``file://`` を先頭に付けると、JSON形式のファイルを指定できます。"
f"(ex): ``{EXAMPLE_ATTRIBUTES}``",
)

parser.add_argument("--force", action="store_true", help="完了状態のタスクのアノテーション属性も変更します。")
Expand All @@ -356,7 +349,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
"--backup",
type=str,
required=False,
help="アノテーションのバックアップを保存するディレクトリを指定してください。アノテーションの復元は ``annotation restore`` コマンドで実現できます。",
help="アノテーションのバックアップを保存するディレクトリを指定してください。アノテーションの復元は ``annotation restore`` コマンドで実現できます。", # noqa: E501
)
parser.add_argument(
"--parallelism",
Expand Down
35 changes: 17 additions & 18 deletions annofabcli/annotation/change_annotation_properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,7 @@ def change_annotation_properties(

now_datetime = str_now()

def to_properties_from_cli(
annotation_list: List[SingleAnnotation], properties: AnnotationDetailForCli
) -> List[Dict[str, Any]]:
def to_properties_from_cli(annotation_list: List[SingleAnnotation], properties: AnnotationDetailForCli) -> List[Dict[str, Any]]:
annotations_for_api = []
annotation_details_by_input_data: Dict[str, List[Dict[str, Any]]] = {}

Expand Down Expand Up @@ -113,9 +111,7 @@ def _to_request_body_elm(annotation: Dict[str, Any]):
for annotation in annotations:
_to_request_body_elm(annotation)

def get_annotation_list_for_task(
self, task_id: str, annotation_query: Optional[AnnotationQueryForAPI]
) -> list[dict[str, Any]]:
def get_annotation_list_for_task(self, task_id: str, annotation_query: Optional[AnnotationQueryForAPI]) -> list[dict[str, Any]]:
"""
タスク内のアノテーション一覧を取得する。
Expand All @@ -131,9 +127,7 @@ def get_annotation_list_for_task(
if annotation_query is not None:
dict_query.update(annotation_query.to_dict())

annotation_list = self.service.wrapper.get_all_annotation_list(
self.project_id, query_params={"query": dict_query}
)
annotation_list = self.service.wrapper.get_all_annotation_list(self.project_id, query_params={"query": dict_query})
return annotation_list

def change_properties_for_task( # pylint: disable=too-many-return-statements
Expand All @@ -154,7 +148,7 @@ def change_properties_for_task( # pylint: disable=too-many-return-statements
backup_dir: アノテーションをバックアップとして保存するディレクトリ。指定しない場合は、バックアップを取得しない。
"""
logger_prefix = f"{str(task_index+1)} 件目: " if task_index is not None else ""
logger_prefix = f"{task_index+1!s} 件目: " if task_index is not None else ""
dict_task = self.service.wrapper.get_task_or_none(self.project_id, task_id)
if dict_task is None:
logger.warning(f"task_id = '{task_id}' は存在しません。")
Expand All @@ -166,7 +160,9 @@ def change_properties_for_task( # pylint: disable=too-many-return-statements
)

if dict_task["status"] in [TaskStatus.WORKING.value, TaskStatus.COMPLETE.value]:
logger.info(f"タスク'{task_id}'は作業中または受入完了状態のため、アノテーションプロパティの変更をスキップします。 status={dict_task['status']}")
logger.info(
f"タスク'{task_id}'は作業中または受入完了状態のため、アノテーションプロパティの変更をスキップします。 status={dict_task['status']}"
)
return False

old_account_id: Optional[str] = dict_task["account_id"]
Expand Down Expand Up @@ -328,7 +324,10 @@ def main(self) -> None:
properties_for_cli = AnnotationDetailForCli.from_dict(properties_of_dict)

if args.backup is None:
print("間違えてアノテーションを変更してしまっときに復元できるようにするため、'--backup'でバックアップ用のディレクトリを指定することを推奨します。", file=sys.stderr)
print(
"間違えてアノテーションを変更してしまっときに復元できるようにするため、'--backup'でバックアップ用のディレクトリを指定することを推奨します。",
file=sys.stderr,
)
if not self.confirm_processing("復元用のバックアップディレクトリが指定されていません。処理を続行しますか?"):
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
backup_dir = None
Expand All @@ -337,9 +336,7 @@ def main(self) -> None:

super().validate_project(project_id, [ProjectMemberRole.OWNER])

main_obj = ChangePropertiesOfAnnotationMain(
self.service, project_id=project_id, is_force=args.force, all_yes=args.yes
)
main_obj = ChangePropertiesOfAnnotationMain(self.service, project_id=project_id, is_force=args.force, all_yes=args.yes)
main_obj.change_annotation_properties_task_list(
task_id_list,
properties=properties_for_cli,
Expand Down Expand Up @@ -382,14 +379,16 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
)

parser.add_argument(
"--force", action="store_true", help="過去に割り当てられていて現在の担当者が自分自身でない場合、タスクの担当者を自分自身に変更してからアノテーションプロパティを変更します。"
"--force",
action="store_true",
help="過去に割り当てられていて現在の担当者が自分自身でない場合、タスクの担当者を自分自身に変更してからアノテーションプロパティを変更します。",
)

parser.add_argument(
"--backup",
type=str,
required=False,
help="アノテーションのバックアップを保存するディレクトリを指定してください。アノテーションの復元は ``annotation restore`` コマンドで実現できます。",
help="アノテーションのバックアップを保存するディレクトリを指定してください。アノテーションの復元は ``annotation restore`` コマンドで実現できます。", # noqa: E501
)

parser.add_argument(
Expand All @@ -406,7 +405,7 @@ def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argpa
subcommand_help = "アノテーションのプロパティを変更します。"
description = (
"アノテーションのプロパティを一括で変更します。ただし、作業中状態のタスクのアノテーションのプロパティは変更できません。"
"間違えてアノテーションのプロパティを変更したときに復元できるようにするため、 ``--backup`` でバックアップ用のディレクトリを指定することを推奨します。"
"間違えてアノテーションのプロパティを変更したときに復元できるようにするため、 ``--backup`` でバックアップ用のディレクトリを指定することを推奨します。" # noqa: E501
)
epilog = "オーナロールを持つユーザで実行してください。"

Expand Down
Loading

0 comments on commit 7900cbd

Please sign in to comment.