Skip to content

Commit

Permalink
utils.pyに多言語化メッセージを取得するためのget_message関数を追加しました。 (#458)
Browse files Browse the repository at this point in the history
* poetry update

* format

* format

* version up
  • Loading branch information
yuji38kwmt committed May 15, 2022
1 parent 840b0d5 commit 84fb968
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 62 deletions.
2 changes: 1 addition & 1 deletion annofabapi/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.59.0"
__version__ = "0.60.0"
19 changes: 18 additions & 1 deletion annofabapi/utils.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import datetime
import logging
from typing import List, Optional
from typing import Any, Dict, List, Optional

import dateutil
import dateutil.tz
import more_itertools

from annofabapi.models import Task, TaskHistory, TaskHistoryShort, TaskPhase

Expand Down Expand Up @@ -159,3 +160,19 @@ def can_put_annotation(task: Task, my_account_id: str) -> bool:
"""
# ログインユーザはプロジェクトオーナであること前提
return len(task["histories_by_phase"]) == 0 or task["account_id"] == my_account_id


def get_message(internationalization_message: Dict[str, Any], lang: str = "en-US") -> Optional[str]:
"""
アノテーション仕様で使われている`InternalizationMessage`クラスの値から、指定された言語のメッセージを取得する。
Args:
internationalization_message: 多言語化されたメッセージ
lang: 取得したいメッセージに対応する言語
Returns:
指定した言語に対応するメッセージ。見つからない場合はNoneを返します。
"""

messages = internationalization_message["messages"]
return more_itertools.first_true(messages, pred=lambda e: e["lang"] == lang)
26 changes: 15 additions & 11 deletions annofabapi/wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from pathlib import Path
from typing import Any, Callable, Dict, List, Optional, Tuple, Union

import more_itertools
import requests
from dateutil.relativedelta import relativedelta

Expand Down Expand Up @@ -73,10 +74,6 @@ class AnnotationSpecsRelation:
choice_id: Dict[ChoiceKey, ChoiceKey]


def _first_true(iterable, default=None, pred=None):
return next(filter(pred, iterable), default)


_JOB_CONCURRENCY_LIMIT = {
ProjectJobType.COPY_PROJECT: {
ProjectJobType.GEN_INPUTS,
Expand Down Expand Up @@ -529,7 +526,7 @@ def __get_additional_data_from_attribute_name(
return None

def _get_choice_id_from_name(self, name: str, choices: List[Dict[str, Any]]) -> Optional[str]:
choice_info = _first_true(choices, pred=lambda e: self.__get_choice_name_en(e) == name)
choice_info = more_itertools.first_true(choices, pred=lambda e: self.__get_choice_name_en(e) == name)
if choice_info is not None:
return choice_info["choice_id"]
else:
Expand Down Expand Up @@ -672,7 +669,7 @@ def __convert_annotation_specs_labels_v2_to_v1(
"""

def get_additional(additional_data_definition_id: str) -> Optional[Dict[str, Any]]:
return _first_true(
return more_itertools.first_true(
additionals_v2, pred=lambda e: e["additional_data_definition_id"] == additional_data_definition_id
)

Expand Down Expand Up @@ -813,7 +810,9 @@ def __get_dest_additional(
dest_label_contains_dest_additional = False
break

dest_label = _first_true(dest_labels, pred=lambda e, f=dest_label_id: e["label_id"] == f)
dest_label = more_itertools.first_true(
dest_labels, pred=lambda e: e["label_id"] == dest_label_id # pylint: disable=cell-var-from-loop
)
if dest_label is None:
dest_label_contains_dest_additional = False
break
Expand Down Expand Up @@ -852,7 +851,10 @@ def get_annotation_specs_relation(self, src_project_id: str, dest_project_id: st
dict_label_id: Dict[str, str] = {}
for src_label in src_annotation_specs["labels"]:
src_label_name_en = self.__get_label_name_en(src_label)
dest_label = _first_true(dest_labels, pred=lambda e, f=src_label_name_en: self.__get_label_name_en(e) == f)
dest_label = more_itertools.first_true(
dest_labels,
pred=lambda e: self.__get_label_name_en(e) == src_label_name_en, # pylint: disable=cell-var-from-loop
)
if dest_label is not None:
dict_label_id[src_label["label_id"]] = dest_label["label_id"]

Expand All @@ -876,8 +878,10 @@ def get_annotation_specs_relation(self, src_project_id: str, dest_project_id: st
dest_choices = dest_additional["choices"]
for src_choice in src_additional["choices"]:
src_choice_name_en = self.__get_choice_name_en(src_choice)
dest_choice = _first_true(
dest_choices, pred=lambda e, f=src_choice_name_en: self.__get_choice_name_en(e) == f
dest_choice = more_itertools.first_true(
dest_choices,
pred=lambda e: self.__get_choice_name_en(e)
== src_choice_name_en, # pylint: disable=cell-var-from-loop
)
if dest_choice is not None:
dict_choice_id[
Expand Down Expand Up @@ -2314,7 +2318,7 @@ def get_latest_job() -> Optional[ProjectJobInfo]:
def get_job_from_job_id(arg_job_id: str) -> Optional[ProjectJobInfo]:
content, _ = self.api.get_project_job(project_id, query_params={"type": job_type.value})
job_list = content["list"]
return _first_true(job_list, pred=lambda e: e["job_id"] == arg_job_id)
return more_itertools.first_true(job_list, pred=lambda e: e["job_id"] == arg_job_id)

job_access_count = 0
while True:
Expand Down

0 comments on commit 84fb968

Please sign in to comment.