Skip to content

Commit 72954ed

Browse files
authored
get_labor_control_worktime関数の修正 (#356)
* get_labor_control_worktime: 502 errorが発生しても処理が継続できるようにする * format * update swagger * auto saveを辞める * update * version up
1 parent 42ded10 commit 72954ed

File tree

8 files changed

+79
-26
lines changed

8 files changed

+79
-26
lines changed

.vscode/settings.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,6 @@
3939
".venv/lib/python3.8/site-packages/"
4040
],
4141
"python.analysis.completeFunctionParens": true,
42-
"[python]": {
43-
"editor.formatOnSave": true,
44-
"editor.codeActionsOnSave": {
45-
"source.organizeImports": true
46-
},
47-
},
4842
"python.testing.autoTestDiscoverOnSaveEnabled": false,
4943

5044
}

annofabapi/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.47.0"
1+
__version__ = "0.47.1"

annofabapi/dataclass/annotation.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -173,51 +173,51 @@ class FullAnnotationAdditionalData(DataClassJsonMixin):
173173
class FullAnnotationDetail(DataClassJsonMixin):
174174
""" """
175175

176-
annotation_id: Optional[str]
176+
annotation_id: str
177177
"""アノテーションID。[値の制約についてはこちら。](#section/API-Convention/APIID)<br> annotation_type が classification の場合は label_id と同じ値が格納されます。 """
178178

179-
user_id: Optional[str]
179+
user_id: str
180180
""""""
181181

182-
label_id: Optional[str]
182+
label_id: str
183183
""""""
184184

185-
label_name: Optional[InternationalizationMessage]
185+
label_name: InternationalizationMessage
186186
""""""
187187

188-
annotation_type: Optional[AnnotationType]
188+
annotation_type: AnnotationType
189189
""""""
190190

191-
data_holding_type: Optional[AnnotationDataHoldingType]
191+
data_holding_type: AnnotationDataHoldingType
192192
""""""
193193

194194
data: FullAnnotationData
195195
""""""
196196

197-
additional_data_list: Optional[List[FullAnnotationAdditionalData]]
197+
additional_data_list: List[FullAnnotationAdditionalData]
198198
""""""
199199

200200

201201
@dataclass
202202
class FullAnnotation(DataClassJsonMixin):
203203
""" """
204204

205-
project_id: Optional[str]
205+
project_id: str
206206
"""プロジェクトID。[値の制約についてはこちら。](#section/API-Convention/APIID) """
207207

208-
task_id: Optional[str]
208+
task_id: str
209209
"""タスクID。[値の制約についてはこちら。](#section/API-Convention/APIID) """
210210

211-
task_phase: Optional[TaskPhase]
211+
task_phase: TaskPhase
212212
""""""
213213

214-
task_phase_stage: Optional[int]
214+
task_phase_stage: int
215215
""""""
216216

217-
task_status: Optional[TaskStatus]
217+
task_status: TaskStatus
218218
""""""
219219

220-
input_data_id: Optional[str]
220+
input_data_id: str
221221
"""入力データID。[値の制約についてはこちら。](#section/API-Convention/APIID) """
222222

223223
input_data_name: Optional[str]
@@ -229,7 +229,7 @@ class FullAnnotation(DataClassJsonMixin):
229229
updated_datetime: Optional[str]
230230
""""""
231231

232-
annotation_format_version: Optional[str]
232+
annotation_format_version: str
233233
"""アノテーションフォーマットのバージョンです。 アノテーションフォーマットとは、プロジェクト個別のアノテーション仕様ではなく、AnnoFabのアノテーション構造のことです。 したがって、アノテーション仕様を更新しても、このバージョンは変化しません。 バージョンの読み方と更新ルールは、業界慣習の[Semantic Versioning](https://semver.org/)にもとづきます。 JSONに出力されるアノテーションフォーマットのバージョンは、アノテーションZIPが作成される時点のものが使われます。 すなわち、`1.0.0`の時点のタスクで作成したアノテーションであっても、フォーマットが `1.0.1` に上がった次のZIP作成時では `1.0.1` となります。 バージョンを固定してZIPを残しておきたい場合は、プロジェクトが完了した時点でZIPをダウンロードして保管しておくか、またはプロジェクトを「停止中」にします。 """
234234

235235

annofabapi/wrapper.py

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# pylint: disable=too-many-lines
22
import asyncio
33
import copy
4+
import datetime
45
import logging
56
import mimetypes
67
import time
@@ -2025,6 +2026,7 @@ def _get_working_description_from_labor(labor: Dict[str, Any]) -> Optional[str]:
20252026

20262027
def get_labor_control_worktime(
20272028
self,
2029+
*,
20282030
organization_id: Optional[str] = None,
20292031
project_id: Optional[str] = None,
20302032
account_id: Optional[str] = None,
@@ -2070,8 +2072,47 @@ def _to_new_data(labor: Dict[str, Any]) -> Dict[str, Any]:
20702072
"from": from_date,
20712073
"to": to_date,
20722074
}
2073-
labor_list, _ = self.api.get_labor_control(query_params)
2074-
return [_to_new_data(e) for e in labor_list]
2075+
try:
2076+
labor_list, _ = self.api.get_labor_control(query_params)
2077+
return [_to_new_data(e) for e in labor_list]
2078+
except requests.HTTPError as e:
2079+
# "502 Server Error"が発生するときは、取得するレスポンスが大きすぎる可能性があるので、取得期間を分割する。
2080+
# ただし、取得する期間が指定されている場合のみ
2081+
# 注意:5XX系のエラーだと、backoffでリトライがタイムアウトしてから、この関数で処理される
2082+
DATE_FORMAT = "%Y-%m-%d"
2083+
if e.response.status_code == requests.codes.bad_gateway and from_date is not None and to_date is not None:
2084+
dt_from_date = datetime.datetime.strptime(from_date, DATE_FORMAT)
2085+
dt_to_date = datetime.datetime.strptime(to_date, DATE_FORMAT)
2086+
diff_days = (dt_to_date - dt_from_date).days
2087+
2088+
dt_new_to_date = dt_from_date + datetime.timedelta(days=diff_days // 2)
2089+
dt_new_from_date = dt_new_to_date + datetime.timedelta(days=1)
2090+
logger.debug(
2091+
"取得対象の期間が広すぎるため、データを取得できませんでした。"
2092+
f"取得対象の期間を{from_date}~{dt_new_to_date.strftime(DATE_FORMAT)}, "
2093+
f"{dt_new_from_date.strftime(DATE_FORMAT)}~{to_date}に分割して、再度取得します。"
2094+
)
2095+
tmp_list = []
2096+
tmp1 = self.get_labor_control_worktime(
2097+
organization_id=organization_id,
2098+
project_id=project_id,
2099+
account_id=account_id,
2100+
from_date=from_date,
2101+
to_date=dt_new_to_date.strftime(DATE_FORMAT),
2102+
)
2103+
tmp_list.extend(tmp1)
2104+
2105+
tmp2 = self.get_labor_control_worktime(
2106+
organization_id=organization_id,
2107+
project_id=project_id,
2108+
account_id=account_id,
2109+
from_date=dt_new_from_date.strftime(DATE_FORMAT),
2110+
to_date=to_date,
2111+
)
2112+
tmp_list.extend(tmp2)
2113+
return tmp_list
2114+
2115+
raise e
20752116

20762117
def get_labor_control_availability(
20772118
self, account_id: str, from_date: Optional[str] = None, to_date: Optional[str] = None

generate/swagger/swagger-api-components.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4162,6 +4162,15 @@ components:
41624162
is_foo_bar_buz: true
41634163
FullAnnotation:
41644164
type: object
4165+
required:
4166+
- project_id
4167+
- task_id
4168+
- task_phase
4169+
- task_phase_stage
4170+
- task_status
4171+
- input_data_id
4172+
- details
4173+
- annotation_format_version
41654174
properties:
41664175
project_id:
41674176
$ref: "#/components/schemas/ProjectId"
@@ -4190,6 +4199,15 @@ components:
41904199
$ref: "#/components/schemas/AnnotationFormatVersion"
41914200
FullAnnotationDetail:
41924201
type: object
4202+
required:
4203+
- annotation_id
4204+
- user_id
4205+
- label_id
4206+
- label_name
4207+
- annotation_type
4208+
- data_holding_type
4209+
- data
4210+
- additional_data_list
41934211
properties:
41944212
annotation_id:
41954213
$ref: "#/components/schemas/AnnotationId"

generate/swagger/swagger.v2.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ info:
115115
116116
上記例 `account_id_count` は、タスクのフィールド `account_id` でタスクを分類したところ「`account_id` が `c5eee002` であるタスクが9件、`9f110e48` であるタスクが5件、`b25dfeb3` であるタスクが1件」だったという結果を表しています。
117117
118-
version: 0.120.0
118+
version: 0.121.0
119119
title: AnnoFab Web API
120120
x-logo:
121121
url: "https://annofab.com/resource/images/logo_landscape.png"

generate/swagger/swagger.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ info:
116116
上記例 `account_id_count` は、タスクのフィールド `account_id` でタスクを分類したところ「`account_id` が `c5eee002` であるタスクが9件、`9f110e48` であるタスクが5件、`b25dfeb3` であるタスクが1件」だったという結果を表しています。
117117
また、AggregationResultの集約の件数は、合計で10000件以下に制限されており、それを超える件数がある場合は上位10000件が取得されます。もし、省略された部分を取得したい場合は、検索条件を縛って結果に上る集約の数を減らしてください。
118118
119-
version: 0.120.0
119+
version: 0.121.0
120120
title: AnnoFab Web API
121121
x-logo:
122122
url: "https://annofab.com/resource/images/logo_landscape.png"

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "annofabapi"
3-
version = "0.47.0"
3+
version = "0.47.1"
44
description = "Python Clinet Library of AnnoFab WebAPI (https://annofab.com/docs/api/)"
55
authors = ["yuji38kwmt"]
66
license = "MIT"

0 commit comments

Comments
 (0)