annofabcli 1.98.0__py3-none-any.whl → 1.99.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- annofabcli/__version__.py +1 -1
- annofabcli/annotation_specs/put_label_color.py +5 -0
- annofabcli/comment/delete_comment.py +3 -0
- annofabcli/comment/put_inspection_comment.py +3 -0
- annofabcli/comment/put_onhold_comment.py +3 -0
- annofabcli/input_data/change_input_data_name.py +4 -1
- annofabcli/input_data/put_input_data.py +4 -0
- annofabcli/statistics/list_annotation_attribute_filled_count.py +684 -0
- annofabcli/statistics/list_annotation_count.py +80 -37
- annofabcli/statistics/list_annotation_duration.py +18 -18
- annofabcli/statistics/subcommand_statistics.py +3 -0
- annofabcli/task/list_tasks_added_task_history.py +141 -156
- annofabcli/task/put_tasks.py +9 -4
- {annofabcli-1.98.0.dist-info → annofabcli-1.99.0.dist-info}/METADATA +1 -1
- {annofabcli-1.98.0.dist-info → annofabcli-1.99.0.dist-info}/RECORD +18 -17
- {annofabcli-1.98.0.dist-info → annofabcli-1.99.0.dist-info}/LICENSE +0 -0
- {annofabcli-1.98.0.dist-info → annofabcli-1.99.0.dist-info}/WHEEL +0 -0
- {annofabcli-1.98.0.dist-info → annofabcli-1.99.0.dist-info}/entry_points.txt +0 -0
|
@@ -9,7 +9,7 @@ import annofabapi
|
|
|
9
9
|
import more_itertools
|
|
10
10
|
import pandas
|
|
11
11
|
from annofabapi.models import Task, TaskHistory, TaskPhase, TaskStatus
|
|
12
|
-
from annofabapi.util.task_history import find_rejected_task_history_indices
|
|
12
|
+
from annofabapi.util.task_history import find_rejected_task_history_indices, get_task_creation_datetime
|
|
13
13
|
from annofabapi.utils import get_task_history_index_skipped_acceptance, get_task_history_index_skipped_inspection
|
|
14
14
|
|
|
15
15
|
import annofabcli
|
|
@@ -93,162 +93,165 @@ def get_post_rejection_acceptance_worktime_hour(task_histories: list[TaskHistory
|
|
|
93
93
|
)
|
|
94
94
|
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
"""
|
|
96
|
+
def get_completed_datetime(task: dict[str, Any], task_histories: list[TaskHistory]) -> Optional[str]:
|
|
97
|
+
"""受入完了状態になった日時を取得する。
|
|
98
98
|
|
|
99
99
|
Args:
|
|
100
|
-
|
|
101
|
-
project_id: プロジェクトID
|
|
100
|
+
task_histories (List[TaskHistory]): [description]
|
|
102
101
|
|
|
102
|
+
Returns:
|
|
103
|
+
str: 受入完了状態になった日時
|
|
103
104
|
"""
|
|
105
|
+
# 受入完了日時を設定
|
|
106
|
+
if task["phase"] == TaskPhase.ACCEPTANCE.value and task["status"] == TaskStatus.COMPLETE.value:
|
|
107
|
+
assert len(task_histories) > 0, (
|
|
108
|
+
f"task_id='{task['task_id']}'のタスク履歴が0件です。参照しているタスク履歴情報が古い可能性があります。 "
|
|
109
|
+
f":: phase='{task['phase']}', status='{task['status']}'"
|
|
110
|
+
)
|
|
111
|
+
return task_histories[-1]["ended_datetime"]
|
|
112
|
+
else:
|
|
113
|
+
return None
|
|
104
114
|
|
|
105
|
-
def __init__(self, service: annofabapi.Resource, project_id: str) -> None:
|
|
106
|
-
self.service = service
|
|
107
|
-
self.project_id = project_id
|
|
108
|
-
self.visualize = AddProps(self.service, project_id)
|
|
109
115
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
"""受入完了状態になった日時を取得する。
|
|
116
|
+
def get_first_acceptance_completed_datetime(task_histories: list[TaskHistory]) -> Optional[str]:
|
|
117
|
+
"""はじめて受入完了状態になった日時を取得する。
|
|
113
118
|
|
|
114
|
-
|
|
115
|
-
|
|
119
|
+
Args:
|
|
120
|
+
task_histories (List[TaskHistory]): [description]
|
|
116
121
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
assert len(task_histories) > 0, (
|
|
123
|
-
f"task_id='{task['task_id']}'のタスク履歴が0件です。参照しているタスク履歴情報が古い可能性があります。 "
|
|
124
|
-
f":: phase='{task['phase']}', status='{task['status']}'"
|
|
125
|
-
)
|
|
126
|
-
return task_histories[-1]["ended_datetime"]
|
|
127
|
-
else:
|
|
128
|
-
return None
|
|
122
|
+
Returns:
|
|
123
|
+
str: はじめて受入完了状態になった日時
|
|
124
|
+
"""
|
|
125
|
+
# 受入フェーズで完了日時がnot Noneの場合は、受入を合格したか差し戻したとき。
|
|
126
|
+
# したがって、後続のタスク履歴を見て、初めて受入完了状態になった日時を取得する。
|
|
129
127
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
for index, history in enumerate(task_histories):
|
|
129
|
+
if history["phase"] != TaskPhase.ACCEPTANCE.value or history["ended_datetime"] is None:
|
|
130
|
+
continue
|
|
133
131
|
|
|
134
|
-
|
|
135
|
-
|
|
132
|
+
if index == len(task_histories) - 1:
|
|
133
|
+
# 末尾履歴なら、受入完了状態
|
|
134
|
+
return history["ended_datetime"]
|
|
136
135
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
#
|
|
142
|
-
if len(task_histories) == 0:
|
|
143
|
-
return None
|
|
144
|
-
|
|
145
|
-
first_history = task_histories[0]
|
|
146
|
-
# 2020年以前は、先頭のタスク履歴はタスク作成ではなく、教師付けの履歴である。2020年以前はタスク作成日時を取得できないのでNoneを返す。
|
|
147
|
-
# https://annofab.com/docs/releases/2020.html#v01020
|
|
148
|
-
if (
|
|
149
|
-
first_history["account_id"] is None
|
|
150
|
-
and first_history["accumulated_labor_time_milliseconds"] == "PT0S"
|
|
151
|
-
and first_history["phase"] == TaskPhase.ANNOTATION.value
|
|
152
|
-
):
|
|
153
|
-
if len(task_histories) == 1:
|
|
154
|
-
# 一度も作業されていないタスクは、先頭のタスク履歴のstarted_datetimeはNoneである
|
|
155
|
-
# 替わりにタスクの`operation_updated_datetime`をタスク作成日時とする
|
|
156
|
-
return task["operation_updated_datetime"]
|
|
157
|
-
return first_history["started_datetime"]
|
|
158
|
-
return None
|
|
136
|
+
next_history = task_histories[index + 1]
|
|
137
|
+
if next_history["phase"] == TaskPhase.ACCEPTANCE.value:
|
|
138
|
+
# 受入完了後、受入取り消し実行
|
|
139
|
+
return history["ended_datetime"]
|
|
140
|
+
# そうでなければ、受入フェーズでの差し戻し
|
|
159
141
|
|
|
160
|
-
|
|
161
|
-
def get_first_acceptance_completed_datetime(task_histories: list[TaskHistory]) -> Optional[str]:
|
|
162
|
-
"""はじめて受入完了状態になった日時を取得する。
|
|
142
|
+
return None
|
|
163
143
|
|
|
164
|
-
Args:
|
|
165
|
-
task_histories (List[TaskHistory]): [description]
|
|
166
144
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
145
|
+
def get_first_acceptance_reached_datetime(task_histories: list[TaskHistory]) -> Optional[str]:
|
|
146
|
+
"""
|
|
147
|
+
はじめて受入フェーズに到達した日時を取得する。
|
|
148
|
+
受入フェーズを着手した日時とは異なる。
|
|
149
|
+
必ず`first_acceptance_started_datetime`よりも前の日時になる。
|
|
172
150
|
|
|
173
|
-
|
|
174
|
-
if history["phase"] != TaskPhase.ACCEPTANCE.value or history["ended_datetime"] is None:
|
|
175
|
-
continue
|
|
151
|
+
たとえば教師付フェーズで提出して受入フェーズに到達した場合、教師付フェーズを提出した日時が「受入フェーズに到達した日時」になる。
|
|
176
152
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
153
|
+
"""
|
|
154
|
+
for index, history in enumerate(task_histories):
|
|
155
|
+
if history["phase"] != TaskPhase.ACCEPTANCE.value:
|
|
156
|
+
continue
|
|
180
157
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
# そうでなければ、受入フェーズでの差し戻し
|
|
158
|
+
first_acceptance_reached_datetime = task_histories[index - 1]["ended_datetime"]
|
|
159
|
+
assert first_acceptance_reached_datetime is not None
|
|
160
|
+
return first_acceptance_reached_datetime
|
|
161
|
+
return None
|
|
186
162
|
|
|
187
|
-
return None
|
|
188
163
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
"""はじめて受入フェーズに到達した日時を取得する。
|
|
192
|
-
受入フェーズを着手した日時とは異なる。
|
|
193
|
-
必ず`first_acceptance_started_datetime`よりも前の日時になる。
|
|
164
|
+
def is_acceptance_phase_skipped(task_histories: list[TaskHistory]) -> bool:
|
|
165
|
+
"""抜取受入によって、受入フェーズでスキップされたことがあるかを取得する。
|
|
194
166
|
|
|
195
|
-
|
|
196
|
-
|
|
167
|
+
Args:
|
|
168
|
+
task_histories (List[TaskHistory]): タスク履歴
|
|
197
169
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
170
|
+
Returns:
|
|
171
|
+
bool: 受入フェーズでスキップされたことがあるかどうか
|
|
172
|
+
"""
|
|
173
|
+
task_history_index_list = get_task_history_index_skipped_acceptance(task_histories)
|
|
174
|
+
if len(task_history_index_list) == 0:
|
|
175
|
+
return False
|
|
176
|
+
|
|
177
|
+
# スキップされた履歴より後に受入フェーズがなければ、受入がスキップされたタスクとみなす
|
|
178
|
+
# ただし、スキップされた履歴より後で、「アノテーション一覧で修正された」受入フェーズがある場合(account_id is None)は、スキップされた受入とみなす。 # noqa: E501
|
|
179
|
+
last_task_history_index = task_history_index_list[-1]
|
|
180
|
+
return (
|
|
181
|
+
more_itertools.first_true(
|
|
182
|
+
task_histories[last_task_history_index + 1 :],
|
|
183
|
+
pred=lambda e: e["phase"] == TaskPhase.ACCEPTANCE.value and e["account_id"] is not None,
|
|
184
|
+
)
|
|
185
|
+
is None
|
|
186
|
+
)
|
|
202
187
|
|
|
203
|
-
first_acceptance_reached_datetime = task_histories[index - 1]["ended_datetime"]
|
|
204
|
-
assert first_acceptance_reached_datetime is not None
|
|
205
|
-
return first_acceptance_reached_datetime
|
|
206
|
-
return None
|
|
207
188
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
"""抜取受入によって、受入フェーズでスキップされたことがあるかを取得する。
|
|
189
|
+
def calculate_total_worktime_in_phase(task_histories: list[TaskHistory], phase: TaskPhase) -> float:
|
|
190
|
+
"""指定したフェーズの合計作業時間を計算する。
|
|
211
191
|
|
|
212
|
-
|
|
213
|
-
|
|
192
|
+
Args:
|
|
193
|
+
task_histories: タスク履歴
|
|
194
|
+
phase: 計算対象のフェーズ
|
|
214
195
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if len(task_history_index_list) == 0:
|
|
220
|
-
return False
|
|
196
|
+
Returns:
|
|
197
|
+
合計作業時間
|
|
198
|
+
"""
|
|
199
|
+
return sum(isoduration_to_hour(history["accumulated_labor_time_milliseconds"]) for history in task_histories if history["phase"] == phase.value)
|
|
221
200
|
|
|
222
|
-
# スキップされた履歴より後に受入フェーズがなければ、受入がスキップされたタスクとみなす
|
|
223
|
-
# ただし、スキップされた履歴より後で、「アノテーション一覧で修正された」受入フェーズがある場合(account_id is None)は、スキップされた受入とみなす。 # noqa: E501
|
|
224
|
-
last_task_history_index = task_history_index_list[-1]
|
|
225
|
-
return (
|
|
226
|
-
more_itertools.first_true(
|
|
227
|
-
task_histories[last_task_history_index + 1 :],
|
|
228
|
-
pred=lambda e: e["phase"] == TaskPhase.ACCEPTANCE.value and e["account_id"] is not None,
|
|
229
|
-
)
|
|
230
|
-
is None
|
|
231
|
-
)
|
|
232
201
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
202
|
+
def get_first_task_history(task_histories: list[TaskHistory], phase: TaskPhase) -> Optional[TaskHistory]:
|
|
203
|
+
"""
|
|
204
|
+
指定したフェーズの最初に作業したタスク履歴を取得します。
|
|
205
|
+
取得したタスク履歴には、account_idはnot Noneで、作業時間は0より大きいです。
|
|
236
206
|
|
|
237
|
-
|
|
238
|
-
|
|
207
|
+
Args:
|
|
208
|
+
task_histories: タスク履歴
|
|
209
|
+
phase: フェーズ
|
|
239
210
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
if
|
|
245
|
-
|
|
211
|
+
Returns:
|
|
212
|
+
最初のタスク履歴
|
|
213
|
+
"""
|
|
214
|
+
for history in task_histories:
|
|
215
|
+
if (
|
|
216
|
+
history["phase"] == phase.value
|
|
217
|
+
and history["account_id"] is not None
|
|
218
|
+
and isoduration_to_hour(history["accumulated_labor_time_milliseconds"]) > 0
|
|
219
|
+
):
|
|
220
|
+
return history
|
|
221
|
+
return None
|
|
246
222
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
223
|
+
|
|
224
|
+
def is_inspection_phase_skipped(task_histories: list[TaskHistory]) -> bool:
|
|
225
|
+
"""抜取検査によって、検査フェーズでスキップされたことがあるかを取得する。
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
task_histories (List[TaskHistory]): タスク履歴
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
bool: 検査フェーズでスキップされたことがあるかどうか
|
|
232
|
+
"""
|
|
233
|
+
task_history_index_list = get_task_history_index_skipped_inspection(task_histories)
|
|
234
|
+
if len(task_history_index_list) == 0:
|
|
235
|
+
return False
|
|
236
|
+
|
|
237
|
+
# スキップされた履歴より後に検査フェーズがなければ、検査がスキップされたタスクとみなす
|
|
238
|
+
last_task_history_index = task_history_index_list[-1]
|
|
239
|
+
return more_itertools.first_true(task_histories[last_task_history_index + 1 :], pred=lambda e: e["phase"] == TaskPhase.INSPECTION.value) is None
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
class AddingAdditionalInfoToTask:
|
|
243
|
+
"""タスクに付加的な情報を追加するためのクラス
|
|
244
|
+
|
|
245
|
+
Args:
|
|
246
|
+
service: annofabapiにアクセスするためのインスタンス
|
|
247
|
+
project_id: プロジェクトID
|
|
248
|
+
|
|
249
|
+
"""
|
|
250
|
+
|
|
251
|
+
def __init__(self, service: annofabapi.Resource, project_id: str) -> None:
|
|
252
|
+
self.service = service
|
|
253
|
+
self.project_id = project_id
|
|
254
|
+
self.visualize = AddProps(self.service, project_id)
|
|
252
255
|
|
|
253
256
|
def _add_task_history_info(self, task: Task, task_history: Optional[TaskHistory], column_prefix: str) -> Task:
|
|
254
257
|
"""
|
|
@@ -294,26 +297,6 @@ class AddingAdditionalInfoToTask:
|
|
|
294
297
|
|
|
295
298
|
return task
|
|
296
299
|
|
|
297
|
-
def _add_task_history_info_by_phase(self, task: dict[str, Any], task_histories: list[TaskHistory], phase: TaskPhase) -> Task:
|
|
298
|
-
task_history_by_phase = [
|
|
299
|
-
e
|
|
300
|
-
for e in task_histories
|
|
301
|
-
if e["phase"] == phase.value
|
|
302
|
-
and e["account_id"] is not None
|
|
303
|
-
and annofabcli.common.utils.isoduration_to_hour(e["accumulated_labor_time_milliseconds"]) > 0
|
|
304
|
-
]
|
|
305
|
-
|
|
306
|
-
# 最初の対象フェーズに関する情報を設定
|
|
307
|
-
first_task_history = task_history_by_phase[0] if len(task_history_by_phase) > 0 else None
|
|
308
|
-
self._add_task_history_info(task, first_task_history, column_prefix=f"first_{phase.value}")
|
|
309
|
-
|
|
310
|
-
# 作業時間に関する情報を設定
|
|
311
|
-
task[f"{phase.value}_worktime_hour"] = sum(
|
|
312
|
-
annofabcli.common.utils.isoduration_to_hour(e["accumulated_labor_time_milliseconds"]) for e in task_history_by_phase
|
|
313
|
-
)
|
|
314
|
-
|
|
315
|
-
return task
|
|
316
|
-
|
|
317
300
|
def add_additional_info_to_task(self, task: dict[str, Any]) -> None:
|
|
318
301
|
"""タスクの付加的情報を、タスクに追加する。
|
|
319
302
|
以下の列を追加する。
|
|
@@ -351,23 +334,25 @@ class AddingAdditionalInfoToTask:
|
|
|
351
334
|
|
|
352
335
|
"""
|
|
353
336
|
# タスク作成日時
|
|
354
|
-
task["created_datetime"] =
|
|
337
|
+
task["created_datetime"] = get_task_creation_datetime(task, task_histories)
|
|
355
338
|
|
|
356
339
|
# フェーズごとのタスク履歴情報を追加する
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
340
|
+
for phase in TaskPhase:
|
|
341
|
+
# タスク履歴から取得した作業時間を設定
|
|
342
|
+
task[f"{phase.value}_worktime_hour"] = calculate_total_worktime_in_phase(task_histories, phase)
|
|
343
|
+
first_task_history = get_first_task_history(task_histories, phase)
|
|
344
|
+
self._add_task_history_info(task, first_task_history, column_prefix=f"first_{phase.value}")
|
|
360
345
|
|
|
361
346
|
# 初めて受入が完了した日時
|
|
362
|
-
task["first_acceptance_reached_datetime"] =
|
|
363
|
-
task["first_acceptance_completed_datetime"] =
|
|
347
|
+
task["first_acceptance_reached_datetime"] = get_first_acceptance_reached_datetime(task_histories)
|
|
348
|
+
task["first_acceptance_completed_datetime"] = get_first_acceptance_completed_datetime(task_histories)
|
|
364
349
|
|
|
365
350
|
# 受入完了日時を設定
|
|
366
|
-
task["completed_datetime"] =
|
|
351
|
+
task["completed_datetime"] = get_completed_datetime(task, task_histories)
|
|
367
352
|
|
|
368
353
|
# 抜取検査/受入によって、スキップされたかどうか
|
|
369
|
-
task["inspection_is_skipped"] =
|
|
370
|
-
task["acceptance_is_skipped"] =
|
|
354
|
+
task["inspection_is_skipped"] = is_inspection_phase_skipped(task_histories)
|
|
355
|
+
task["acceptance_is_skipped"] = is_acceptance_phase_skipped(task_histories)
|
|
371
356
|
|
|
372
357
|
task["post_rejection_annotation_worktime_hour"] = get_post_rejection_annotation_worktime_hour(task_histories)
|
|
373
358
|
task["post_rejection_inspection_worktime_hour"] = get_post_rejection_inspection_worktime_hour(task_histories)
|
annofabcli/task/put_tasks.py
CHANGED
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import argparse
|
|
4
4
|
import logging
|
|
5
5
|
import multiprocessing
|
|
6
|
+
import sys
|
|
6
7
|
import tempfile
|
|
7
8
|
from collections import defaultdict
|
|
8
9
|
from enum import Enum
|
|
@@ -15,6 +16,7 @@ from annofabapi.models import JobStatus, ProjectJobType, ProjectMemberRole
|
|
|
15
16
|
|
|
16
17
|
import annofabcli
|
|
17
18
|
from annofabcli.common.cli import (
|
|
19
|
+
COMMAND_LINE_ERROR_STATUS_CODE,
|
|
18
20
|
PARALLELISM_CHOICES,
|
|
19
21
|
ArgumentParser,
|
|
20
22
|
CommandLine,
|
|
@@ -230,13 +232,16 @@ class PutTask(CommandLine):
|
|
|
230
232
|
|
|
231
233
|
if args.csv is not None:
|
|
232
234
|
csv_file = args.csv
|
|
233
|
-
|
|
234
|
-
main_obj.generate_task(api_with_creating_task,
|
|
235
|
+
task_relation_dict_from_csv = get_task_relation_dict(csv_file)
|
|
236
|
+
main_obj.generate_task(api_with_creating_task, task_relation_dict_from_csv)
|
|
235
237
|
|
|
236
238
|
elif args.json is not None:
|
|
237
239
|
# CSVファイルに変換する
|
|
238
|
-
|
|
239
|
-
|
|
240
|
+
task_relation_dict_from_json = get_json_from_args(args.json)
|
|
241
|
+
if not isinstance(task_relation_dict_from_json, dict):
|
|
242
|
+
print("annofabcli task put: error: JSON形式が不正です。オブジェクトを指定してください。", file=sys.stderr) # noqa: T201
|
|
243
|
+
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
|
|
244
|
+
main_obj.generate_task(api_with_creating_task, task_relation_dict_from_json)
|
|
240
245
|
|
|
241
246
|
|
|
242
247
|
def main(args: argparse.Namespace) -> None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
annofabcli/__init__.py,sha256=NMA7kFxmLlCiILQPHJa9mEuqXxtLALw_dwyXYsvz4VM,71
|
|
2
2
|
annofabcli/__main__.py,sha256=JzfycqVG9ENhWOCxTouZwpHwWTSrI-grLsaMudxjyBM,5283
|
|
3
|
-
annofabcli/__version__.py,sha256=
|
|
3
|
+
annofabcli/__version__.py,sha256=3vcSVu6yWUIItVt25unwZ7jMczwQM4BnBXs-Kszfrkc,132
|
|
4
4
|
annofabcli/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
annofabcli/annotation/annotation_query.py,sha256=ke3W3RT1-WfFzwt-TXcQwGmghG34vcKJkM_jxgbNKjU,15922
|
|
6
6
|
annofabcli/annotation/change_annotation_attributes.py,sha256=zHXyENZfbMGL_15xiK7Cy4cQ2sV0GjSVmKuPm3sOX7Y,17173
|
|
@@ -27,18 +27,18 @@ annofabcli/annotation_specs/list_annotation_specs_history.py,sha256=DtF8X8hA3N54
|
|
|
27
27
|
annofabcli/annotation_specs/list_annotation_specs_label.py,sha256=5k7lDJS1oCi1JS0sLsjyczQ_9W5-jR2AOrZn8dAx1ys,11755
|
|
28
28
|
annofabcli/annotation_specs/list_attribute_restriction.py,sha256=J1QhnUwRX09KRv2Gn7J_BITJu3IuIL3tkYe8CWcyQAw,14740
|
|
29
29
|
annofabcli/annotation_specs/list_label_color.py,sha256=huHBAb-LVLe-tj5ZALiBkFgZlZSTvi2ZDsPYgJPDZ2Q,2356
|
|
30
|
-
annofabcli/annotation_specs/put_label_color.py,sha256=
|
|
30
|
+
annofabcli/annotation_specs/put_label_color.py,sha256=HJTczQiE7uwdnpHh0Lyz_WuvtyXOxYt8RThBXpvjKgA,6057
|
|
31
31
|
annofabcli/annotation_specs/subcommand_annotation_specs.py,sha256=lhs4M5KHSGA59z-XsDuzFascZNbPxq-QnPHrUcntMf4,2384
|
|
32
32
|
annofabcli/comment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
-
annofabcli/comment/delete_comment.py,sha256=
|
|
33
|
+
annofabcli/comment/delete_comment.py,sha256=EsQtUCq-HZtYmHQiXq4KbkgjqS4NPlC44MJQKgUzhnY,11458
|
|
34
34
|
annofabcli/comment/download_comment_json.py,sha256=YfqUnMgvLgVFV7FJPIXwirREkQ2E63fXeCaF4hfwk8c,2338
|
|
35
35
|
annofabcli/comment/list_all_comment.py,sha256=p5STKKQ4SV-vDvY1F3pKOrveZcteLTHIUEO-ci1nGes,6090
|
|
36
36
|
annofabcli/comment/list_comment.py,sha256=gZSzeBeYLt0dhCi-8GcuEEB1NuJoXRdptp4oxkOtAMQ,4947
|
|
37
37
|
annofabcli/comment/put_comment.py,sha256=yrxCtP9JkPvBtmZZ3vbm8XFYNKBTgwKwfGcauVvu5e8,12144
|
|
38
38
|
annofabcli/comment/put_comment_simply.py,sha256=Y_RSKWMs8j5VAVV8iiJOOBHnJHEH5s3HLJrXnmmQT3o,8184
|
|
39
|
-
annofabcli/comment/put_inspection_comment.py,sha256=
|
|
39
|
+
annofabcli/comment/put_inspection_comment.py,sha256=F7m6lsbN0FHk0adwiapvD2UOv-8fbCdqfA9CtuJcnY8,3869
|
|
40
40
|
annofabcli/comment/put_inspection_comment_simply.py,sha256=6oKYuihsOKkAKMzcLeUzgMu9SIJC9fWzM1VBis3asfo,6870
|
|
41
|
-
annofabcli/comment/put_onhold_comment.py,sha256=
|
|
41
|
+
annofabcli/comment/put_onhold_comment.py,sha256=9tJ6zzOwqr80SqCSyPFEyqkWpVahHvEEsWIaHxPrB-A,3529
|
|
42
42
|
annofabcli/comment/put_onhold_comment_simply.py,sha256=8w-E8aIK2SbHI9pnsfGF6IlVGC8qDt60Yjrr7Hfz1Rw,3308
|
|
43
43
|
annofabcli/comment/subcommand_comment.py,sha256=gd8w8ArXM1Tq9VUduDgn8m4G6HwevRWJ36VBtGHg-5I,1537
|
|
44
44
|
annofabcli/comment/utils.py,sha256=aUj7U6MtGh64F3Ko83y4NKPKyWAqcg-c1XLqjkmIpSk,350
|
|
@@ -69,7 +69,7 @@ annofabcli/filesystem/mask_user_info.py,sha256=Evmr9QhSpMG900bbOXbJNHwXHapUlNfvV
|
|
|
69
69
|
annofabcli/filesystem/merge_annotation.py,sha256=MkGy1T9F-1tHq_BS_L_mTtgKpOMmXscrydzfSc0JKAo,10588
|
|
70
70
|
annofabcli/filesystem/subcommand_filesystem.py,sha256=ZM2td5iZYIQ3TCI-9xAue8LugFlIc3WMRXrJqnjJ8-s,1186
|
|
71
71
|
annofabcli/input_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
-
annofabcli/input_data/change_input_data_name.py,sha256=
|
|
72
|
+
annofabcli/input_data/change_input_data_name.py,sha256=cQWoGTZKwr2_fU1WGALmRyJY39ruf9t4eMxpI06eT9g,9943
|
|
73
73
|
annofabcli/input_data/copy_input_data.py,sha256=Lbyq2aW5lmJCPB8-WHdOI93a2ND5E0qOWrhBHRluQyw,14656
|
|
74
74
|
annofabcli/input_data/delete_input_data.py,sha256=GLg58XNz9_Njq9eq2sc2BAzfLy9tJefcDYL6J4TOim4,8836
|
|
75
75
|
annofabcli/input_data/delete_metadata_key_of_input_data.py,sha256=PVv9HXQVFLKQh-4RSHas_ckFxDxtqAzWnXnWYFFYy08,8464
|
|
@@ -77,7 +77,7 @@ annofabcli/input_data/download_input_data_json.py,sha256=vxGoeM3ZEggQbWiWsrDK0_G
|
|
|
77
77
|
annofabcli/input_data/list_all_input_data.py,sha256=Kq261WCkma5UNKfMDT7O6Z-dzzqp-KP1wL0DvHe5fH8,9879
|
|
78
78
|
annofabcli/input_data/list_all_input_data_merged_task.py,sha256=UaBJW-nMHytmQ4okg69Ew1jhC2vMNnRMgl2lEBabtUI,12850
|
|
79
79
|
annofabcli/input_data/list_input_data.py,sha256=RBxsHyKg1bVIEQUFDkfrq-nJmEdEYNoCjJ2L2GgSfeU,11519
|
|
80
|
-
annofabcli/input_data/put_input_data.py,sha256=
|
|
80
|
+
annofabcli/input_data/put_input_data.py,sha256=QrIe_RBXfGzpTYazy4cN8iSdHTQjq96sI0bXq6g1G_k,18233
|
|
81
81
|
annofabcli/input_data/put_input_data_with_zip.py,sha256=SA4aMAwMBFgc9Lh0zmRCbmkXG4AMrcBqd5zeTSdr8lc,5566
|
|
82
82
|
annofabcli/input_data/subcommand_input_data.py,sha256=X8EoxsF6PMiKrvk_r7PIe2D0WZuaPlgLJRuTiljPIdM,2048
|
|
83
83
|
annofabcli/input_data/update_metadata_of_input_data.py,sha256=_cZh0GYGK6Lx5arKuTjblolkXsRdTlwuKcIHa8Nm5yQ,11583
|
|
@@ -133,12 +133,13 @@ annofabcli/statistics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
133
133
|
annofabcli/statistics/histogram.py,sha256=CvzDxT2cKLSnBGSqkZE6p92PayGxYYja1YyB24M4ALU,3245
|
|
134
134
|
annofabcli/statistics/linegraph.py,sha256=0kr7jVBNMiM2ECYhv3Ry5RitElKerSl9ZKxbKzfiplI,12494
|
|
135
135
|
annofabcli/statistics/list_annotation_attribute.py,sha256=87jjNCOXJUbWnmswMCLN7GTjGsBfqpFJ6hViWmnj8Y4,12557
|
|
136
|
-
annofabcli/statistics/
|
|
137
|
-
annofabcli/statistics/
|
|
136
|
+
annofabcli/statistics/list_annotation_attribute_filled_count.py,sha256=vwWeFHwTnEMdrLBauIKPFDkUCa6lXXd0GQgUAQ0LCqU,28890
|
|
137
|
+
annofabcli/statistics/list_annotation_count.py,sha256=nzmlHRCWt5mjeksZkeQyWqm4UaCa9SrdbNtuX9TPP5w,52907
|
|
138
|
+
annofabcli/statistics/list_annotation_duration.py,sha256=N7nnVUDfX_thIapqe6-z_MqReiIqNS8rhp6ewRnvXBU,32027
|
|
138
139
|
annofabcli/statistics/list_video_duration.py,sha256=uNeMteRBX2JG_AWmcgMJj0Jzbq_qF7bvAwr25GmeIiw,9124
|
|
139
140
|
annofabcli/statistics/list_worktime.py,sha256=C7Yu3IOW2EvhkJJv6gY3hNdS9_TOLmT_9LZsB7vLJ1o,6493
|
|
140
141
|
annofabcli/statistics/scatter.py,sha256=IUCwXix9GbZb6V82wjjb5q2eamrT5HQsU_bzDTjAFnM,11011
|
|
141
|
-
annofabcli/statistics/subcommand_statistics.py,sha256=
|
|
142
|
+
annofabcli/statistics/subcommand_statistics.py,sha256=mx18Fgxz2eG4LrF-x0vISw2qh9aLommxuQLD8cfoZhw,2416
|
|
142
143
|
annofabcli/statistics/summarize_task_count.py,sha256=8OH6BBRYRjHJkWRTjU0A0OfXa7f3NIRHrxPNFlRt_hM,9707
|
|
143
144
|
annofabcli/statistics/summarize_task_count_by_task_id_group.py,sha256=TSSmcFv615NLcq6uqXmg3ilYqSHl3A5qp90msVQM1gE,8646
|
|
144
145
|
annofabcli/statistics/summarize_task_count_by_user.py,sha256=TRoJXpt2HOVb8QO2YtRejkOAxyK80_NsPt3Vk9es9C8,6948
|
|
@@ -186,8 +187,8 @@ annofabcli/task/download_task_json.py,sha256=Ocjecmdf2WV_Sq3u1InfMLIsT3XSw0ojyJm
|
|
|
186
187
|
annofabcli/task/list_all_tasks.py,sha256=F9GpzzgWffF3lUeGrFIvjweq-iEwJ1c-g8usskO_2dE,6506
|
|
187
188
|
annofabcli/task/list_all_tasks_added_task_history.py,sha256=fkdiuo64iS7xxvIfGKzSiUPPEMiCVnJjjcAtMxe2Ngs,9551
|
|
188
189
|
annofabcli/task/list_tasks.py,sha256=O4jjp_zdmurcGNWXFp9JXHJsH4nhlR5e3ok96YnD1SI,10237
|
|
189
|
-
annofabcli/task/list_tasks_added_task_history.py,sha256=
|
|
190
|
-
annofabcli/task/put_tasks.py,sha256=
|
|
190
|
+
annofabcli/task/list_tasks_added_task_history.py,sha256=Yjvv5fJjSjJ-v9bhwl4PDyU8aeT94LLMBcPhmUWlFUI,21639
|
|
191
|
+
annofabcli/task/put_tasks.py,sha256=c_Vw5qnDlfpa21S-aMVxmXy8pF-z_YEUi6a0c3IV9gc,13770
|
|
191
192
|
annofabcli/task/put_tasks_by_count.py,sha256=MUHfWhqtSAXnB3O36p3bMSSgQ_3Zek9GT5qRvHGx8Lo,6041
|
|
192
193
|
annofabcli/task/reject_tasks.py,sha256=5ByAN6VnKwvU5BT_cfsHwA1jLDl74bonqk3bwtnrkPU,23139
|
|
193
194
|
annofabcli/task/subcommand_task.py,sha256=L_5Dwe58eblrtOrUYxjJAvkSmu6savRUxIqGjsFq-R4,2436
|
|
@@ -202,8 +203,8 @@ annofabcli/task_history_event/download_task_history_event_json.py,sha256=hQLVbQ0
|
|
|
202
203
|
annofabcli/task_history_event/list_all_task_history_event.py,sha256=JQEgwOIXbbTIfeX23AVaoySHViOR9UGm9uoXuhVEBqo,6446
|
|
203
204
|
annofabcli/task_history_event/list_worktime.py,sha256=9jsRYa2C9bva8E1Aqxv9CCKDuCP0MvbiaIyQFTDpjqY,13150
|
|
204
205
|
annofabcli/task_history_event/subcommand_task_history_event.py,sha256=mJVJoT4RXk4HWnY7-Nrsl4If-gtaIIEXd2z7eFZwM2I,1260
|
|
205
|
-
annofabcli-1.
|
|
206
|
-
annofabcli-1.
|
|
207
|
-
annofabcli-1.
|
|
208
|
-
annofabcli-1.
|
|
209
|
-
annofabcli-1.
|
|
206
|
+
annofabcli-1.99.0.dist-info/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
|
|
207
|
+
annofabcli-1.99.0.dist-info/METADATA,sha256=YTn2PV9tc0pWHXD1sQ88yiulbIhZc29WlLIOcz9jCE4,5630
|
|
208
|
+
annofabcli-1.99.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
209
|
+
annofabcli-1.99.0.dist-info/entry_points.txt,sha256=A8vlN9fiMhbYRcdBfSpl7piYzAwvkMhRXIPQUAvQFUo,55
|
|
210
|
+
annofabcli-1.99.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|