diff --git a/annofabapi/__version__.py b/annofabapi/__version__.py index 5684ec75..faa966d1 100644 --- a/annofabapi/__version__.py +++ b/annofabapi/__version__.py @@ -1 +1 @@ -__version__ = "0.60.0" +__version__ = "0.60.3" diff --git a/annofabapi/utils.py b/annofabapi/utils.py index 855d35b2..050bea54 100644 --- a/annofabapi/utils.py +++ b/annofabapi/utils.py @@ -162,17 +162,23 @@ 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]: +def get_message_for_i18n(internationalization_message: Dict[str, Any], lang: str = "en-US") -> str: """ アノテーション仕様で使われている`InternalizationMessage`クラスの値から、指定された言語のメッセージを取得する。 Args: internationalization_message: 多言語化されたメッセージ - lang: 取得したいメッセージに対応する言語 + lang: 取得したいメッセージに対応する言語コード。`en-US`または`ja-JP`のみサポートしています。 Returns: - 指定した言語に対応するメッセージ。見つからない場合はNoneを返します。 - """ + 指定した言語に対応するメッセージ。 - messages = internationalization_message["messages"] - return more_itertools.first_true(messages, pred=lambda e: e["lang"] == lang) + Raises: + ValueError: 引数langに対応するメッセージが見つからない場合 + """ + messages: List[Dict[str, str]] = internationalization_message["messages"] + result = more_itertools.first_true(messages, pred=lambda e: e["lang"] == lang) + if result is not None: + return result["message"] + else: + raise ValueError(f"lang='{lang}'であるメッセージは見つかりませんでした。") diff --git a/pyproject.toml b/pyproject.toml index 98d582f6..cfb5d001 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "annofabapi" -version = "0.60.0" +version = "0.60.3" description = "Python Clinet Library of AnnoFab WebAPI (https://annofab.com/docs/api/)" authors = ["yuji38kwmt"] license = "MIT" diff --git a/tests/test_local_utils.py b/tests/test_local_utils.py index 36478764..2557ef2d 100644 --- a/tests/test_local_utils.py +++ b/tests/test_local_utils.py @@ -1,5 +1,8 @@ +import pytest + from annofabapi.models import TaskPhase from annofabapi.utils import ( + get_message_for_i18n, get_number_of_rejections, get_task_history_index_skipped_acceptance, get_task_history_index_skipped_inspection, @@ -612,3 +615,20 @@ def test_get_task_history_index_skipped_inspection_検査1回_教師付で提出 actual = get_task_history_index_skipped_inspection(task_history_list) expected = [] assert all([a == b for a, b in zip(actual, expected)]) + + +def test_get_message_for_i18n(): + i18n_message = { + "messages": [{"lang": "ja-JP", "message": "自動車"}, {"lang": "en-US", "message": "car"}], + "default_lang": "ja-JP", + } + assert get_message_for_i18n(i18n_message) == "car" + assert get_message_for_i18n(i18n_message, lang="ja-JP") == "自動車" + + i18n_message2 = { + "messages": [{"lang": "ja-JP", "message": "自動車"}], + "default_lang": "ja-JP", + } + + with pytest.raises(ValueError): + get_message_for_i18n(i18n_message2, lang="en-US")