annofabcli 1.100.5__py3-none-any.whl → 1.102.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/annotation/change_annotation_attributes.py +3 -2
- annofabcli/annotation/change_annotation_properties.py +8 -7
- annofabcli/annotation/copy_annotation.py +4 -4
- annofabcli/annotation/delete_annotation.py +254 -29
- annofabcli/annotation/dump_annotation.py +14 -7
- annofabcli/annotation/import_annotation.py +304 -227
- annofabcli/annotation/restore_annotation.py +7 -7
- annofabcli/annotation_specs/list_annotation_specs_attribute.py +1 -1
- annofabcli/annotation_specs/list_annotation_specs_choice.py +1 -1
- annofabcli/annotation_specs/list_annotation_specs_label.py +1 -1
- annofabcli/annotation_specs/list_annotation_specs_label_attribute.py +1 -1
- annofabcli/comment/delete_comment.py +7 -5
- annofabcli/comment/put_comment.py +1 -1
- annofabcli/comment/put_comment_simply.py +7 -5
- annofabcli/common/cli.py +10 -10
- annofabcli/common/download.py +28 -29
- annofabcli/common/image.py +4 -2
- annofabcli/input_data/delete_input_data.py +4 -4
- annofabcli/input_data/update_metadata_of_input_data.py +1 -1
- annofabcli/instruction/upload_instruction.py +2 -2
- annofabcli/statistics/list_annotation_area.py +320 -0
- annofabcli/statistics/subcommand_statistics.py +2 -0
- annofabcli/statistics/visualize_statistics.py +1 -7
- annofabcli/supplementary/delete_supplementary_data.py +8 -4
- {annofabcli-1.100.5.dist-info → annofabcli-1.102.0.dist-info}/METADATA +3 -2
- {annofabcli-1.100.5.dist-info → annofabcli-1.102.0.dist-info}/RECORD +29 -29
- annofabcli/__version__.py +0 -1
- {annofabcli-1.100.5.dist-info → annofabcli-1.102.0.dist-info}/WHEEL +0 -0
- {annofabcli-1.100.5.dist-info → annofabcli-1.102.0.dist-info}/entry_points.txt +0 -0
- {annofabcli-1.100.5.dist-info → annofabcli-1.102.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import logging
|
|
5
|
+
import sys
|
|
6
|
+
import tempfile
|
|
7
|
+
import zipfile
|
|
8
|
+
from collections.abc import Collection, Iterator
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any, Optional
|
|
12
|
+
|
|
13
|
+
import numpy
|
|
14
|
+
import pandas
|
|
15
|
+
from annofabapi.models import InputDataType, ProjectMemberRole
|
|
16
|
+
from annofabapi.parser import (
|
|
17
|
+
SimpleAnnotationParser,
|
|
18
|
+
lazy_parse_simple_annotation_dir,
|
|
19
|
+
lazy_parse_simple_annotation_zip,
|
|
20
|
+
)
|
|
21
|
+
from annofabapi.segmentation import read_binary_image
|
|
22
|
+
from dataclasses_json import DataClassJsonMixin
|
|
23
|
+
|
|
24
|
+
import annofabcli
|
|
25
|
+
import annofabcli.common.cli
|
|
26
|
+
from annofabcli.common.cli import (
|
|
27
|
+
COMMAND_LINE_ERROR_STATUS_CODE,
|
|
28
|
+
ArgumentParser,
|
|
29
|
+
CommandLine,
|
|
30
|
+
build_annofabapi_resource_and_login,
|
|
31
|
+
)
|
|
32
|
+
from annofabcli.common.download import DownloadingFile
|
|
33
|
+
from annofabcli.common.enums import FormatArgument
|
|
34
|
+
from annofabcli.common.facade import (
|
|
35
|
+
AnnofabApiFacade,
|
|
36
|
+
TaskQuery,
|
|
37
|
+
match_annotation_with_task_query,
|
|
38
|
+
)
|
|
39
|
+
from annofabcli.common.utils import print_csv, print_json
|
|
40
|
+
|
|
41
|
+
logger = logging.getLogger(__name__)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def lazy_parse_simple_annotation_by_input_data(annotation_path: Path) -> Iterator[SimpleAnnotationParser]:
|
|
45
|
+
if not annotation_path.exists():
|
|
46
|
+
raise RuntimeError(f"'{annotation_path}' は存在しません。")
|
|
47
|
+
|
|
48
|
+
if annotation_path.is_dir():
|
|
49
|
+
return lazy_parse_simple_annotation_dir(annotation_path)
|
|
50
|
+
elif zipfile.is_zipfile(str(annotation_path)):
|
|
51
|
+
return lazy_parse_simple_annotation_zip(annotation_path)
|
|
52
|
+
else:
|
|
53
|
+
raise RuntimeError(f"'{annotation_path}'は、zipファイルまたはディレクトリではありません。")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@dataclass(frozen=True)
|
|
57
|
+
class AnnotationAreaInfo(DataClassJsonMixin):
|
|
58
|
+
task_id: str
|
|
59
|
+
task_status: str
|
|
60
|
+
task_phase: str
|
|
61
|
+
task_phase_stage: int
|
|
62
|
+
|
|
63
|
+
input_data_id: str
|
|
64
|
+
input_data_name: str
|
|
65
|
+
|
|
66
|
+
label: str
|
|
67
|
+
annotation_id: str
|
|
68
|
+
annotation_area: int
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def calculate_bounding_box_area(data: dict[str, Any]) -> int:
|
|
72
|
+
width = abs(data["right_bottom"]["x"] - data["left_top"]["x"])
|
|
73
|
+
height = abs(data["right_bottom"]["y"] - data["left_top"]["y"])
|
|
74
|
+
return width * height
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def calculate_segmentation_area(outer_file: Path) -> int:
|
|
78
|
+
nd_array = read_binary_image(outer_file)
|
|
79
|
+
return numpy.count_nonzero(nd_array)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def get_annotation_area_info_list(parser: SimpleAnnotationParser, simple_annotation: dict[str, Any]) -> list[AnnotationAreaInfo]:
|
|
83
|
+
result = []
|
|
84
|
+
for detail in simple_annotation["details"]:
|
|
85
|
+
if detail["data"]["_type"] in {"Segmentation", "SegmentationV2"}:
|
|
86
|
+
annotation_area = calculate_segmentation_area(parser.open_outer_file(detail["data"]["data_uri"]))
|
|
87
|
+
elif detail["data"]["_type"] == "BoundingBox":
|
|
88
|
+
annotation_area = calculate_bounding_box_area(detail["data"])
|
|
89
|
+
|
|
90
|
+
else:
|
|
91
|
+
continue
|
|
92
|
+
|
|
93
|
+
result.append(
|
|
94
|
+
AnnotationAreaInfo(
|
|
95
|
+
task_id=simple_annotation["task_id"],
|
|
96
|
+
task_phase=simple_annotation["task_phase"],
|
|
97
|
+
task_phase_stage=simple_annotation["task_phase_stage"],
|
|
98
|
+
task_status=simple_annotation["task_status"],
|
|
99
|
+
input_data_id=simple_annotation["input_data_id"],
|
|
100
|
+
input_data_name=simple_annotation["input_data_name"],
|
|
101
|
+
label=detail["label"],
|
|
102
|
+
annotation_id=detail["annotation_id"],
|
|
103
|
+
annotation_area=annotation_area,
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
return result
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def get_annotation_area_info_list_from_annotation_path(
|
|
111
|
+
annotation_path: Path,
|
|
112
|
+
*,
|
|
113
|
+
target_task_ids: Optional[Collection[str]] = None,
|
|
114
|
+
task_query: Optional[TaskQuery] = None,
|
|
115
|
+
) -> list[AnnotationAreaInfo]:
|
|
116
|
+
annotation_area_list = []
|
|
117
|
+
target_task_ids = set(target_task_ids) if target_task_ids is not None else None
|
|
118
|
+
iter_parser = lazy_parse_simple_annotation_by_input_data(annotation_path)
|
|
119
|
+
logger.debug("アノテーションzip/ディレクトリを読み込み中")
|
|
120
|
+
for index, parser in enumerate(iter_parser):
|
|
121
|
+
if (index + 1) % 1000 == 0:
|
|
122
|
+
logger.debug(f"{index + 1} 件目のJSONを読み込み中")
|
|
123
|
+
if target_task_ids is not None and parser.task_id not in target_task_ids:
|
|
124
|
+
continue
|
|
125
|
+
simple_annotation_dict = parser.load_json()
|
|
126
|
+
if task_query is not None: # noqa: SIM102
|
|
127
|
+
if not match_annotation_with_task_query(simple_annotation_dict, task_query):
|
|
128
|
+
continue
|
|
129
|
+
sub_annotation_area_list = get_annotation_area_info_list(parser, simple_annotation_dict)
|
|
130
|
+
annotation_area_list.extend(sub_annotation_area_list)
|
|
131
|
+
return annotation_area_list
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def create_df(
|
|
135
|
+
annotation_area_list: list[AnnotationAreaInfo],
|
|
136
|
+
) -> pandas.DataFrame:
|
|
137
|
+
columns = [
|
|
138
|
+
"task_id",
|
|
139
|
+
"task_status",
|
|
140
|
+
"task_phase",
|
|
141
|
+
"task_phase_stage",
|
|
142
|
+
"input_data_id",
|
|
143
|
+
"input_data_name",
|
|
144
|
+
"label",
|
|
145
|
+
"annotation_id",
|
|
146
|
+
"annotation_area",
|
|
147
|
+
]
|
|
148
|
+
df = pandas.DataFrame(e.to_dict() for e in annotation_area_list)
|
|
149
|
+
if len(df) == 0:
|
|
150
|
+
df = pandas.DataFrame(columns=columns)
|
|
151
|
+
|
|
152
|
+
df = df.fillna({"annotation_area": 0})
|
|
153
|
+
return df[columns]
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def print_annotation_area(
|
|
157
|
+
annotation_path: Path,
|
|
158
|
+
output_file: Path,
|
|
159
|
+
output_format: FormatArgument,
|
|
160
|
+
*,
|
|
161
|
+
target_task_ids: Optional[Collection[str]] = None,
|
|
162
|
+
task_query: Optional[TaskQuery] = None,
|
|
163
|
+
) -> None:
|
|
164
|
+
annotation_area_list = get_annotation_area_info_list_from_annotation_path(
|
|
165
|
+
annotation_path,
|
|
166
|
+
target_task_ids=target_task_ids,
|
|
167
|
+
task_query=task_query,
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
logger.info(f"{len(annotation_area_list)} 件のタスクに含まれる塗りつぶしアノテーションのピクセル数情報を出力します。")
|
|
171
|
+
|
|
172
|
+
if output_format == FormatArgument.CSV:
|
|
173
|
+
df = create_df(annotation_area_list)
|
|
174
|
+
print_csv(df, output_file)
|
|
175
|
+
|
|
176
|
+
elif output_format in [FormatArgument.PRETTY_JSON, FormatArgument.JSON]:
|
|
177
|
+
json_is_pretty = output_format == FormatArgument.PRETTY_JSON
|
|
178
|
+
print_json(
|
|
179
|
+
[e.to_dict(encode_json=True) for e in annotation_area_list],
|
|
180
|
+
is_pretty=json_is_pretty,
|
|
181
|
+
output=output_file,
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
else:
|
|
185
|
+
raise RuntimeError(f"出力形式 '{output_format}' はサポートされていません。")
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class ListAnnotationArea(CommandLine):
|
|
189
|
+
COMMON_MESSAGE = "annofabcli statistics list_annotation_area: error:"
|
|
190
|
+
|
|
191
|
+
def validate(self, args: argparse.Namespace) -> bool:
|
|
192
|
+
if args.project_id is None and args.annotation is None:
|
|
193
|
+
print( # noqa: T201
|
|
194
|
+
f"{self.COMMON_MESSAGE} argument --project_id: '--annotation'が未指定のときは、'--project_id' を指定してください。",
|
|
195
|
+
file=sys.stderr,
|
|
196
|
+
)
|
|
197
|
+
return False
|
|
198
|
+
return True
|
|
199
|
+
|
|
200
|
+
def main(self) -> None:
|
|
201
|
+
args = self.args
|
|
202
|
+
|
|
203
|
+
if not self.validate(args):
|
|
204
|
+
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
|
|
205
|
+
|
|
206
|
+
project_id: Optional[str] = args.project_id
|
|
207
|
+
if project_id is not None:
|
|
208
|
+
super().validate_project(project_id, project_member_roles=[ProjectMemberRole.OWNER, ProjectMemberRole.TRAINING_DATA_USER])
|
|
209
|
+
project, _ = self.service.api.get_project(project_id)
|
|
210
|
+
if project["input_data_type"] != InputDataType.IMAGE.value:
|
|
211
|
+
logger.warning(f"project_id='{project_id}'であるプロジェクトは、画像プロジェクトでないので、出力されるデータは0件になります。")
|
|
212
|
+
|
|
213
|
+
annotation_path = Path(args.annotation) if args.annotation is not None else None
|
|
214
|
+
|
|
215
|
+
task_id_list = annofabcli.common.cli.get_list_from_args(args.task_id) if args.task_id is not None else None
|
|
216
|
+
task_query = TaskQuery.from_dict(annofabcli.common.cli.get_json_from_args(args.task_query)) if args.task_query is not None else None
|
|
217
|
+
|
|
218
|
+
output_file: Path = args.output
|
|
219
|
+
output_format = FormatArgument(args.format)
|
|
220
|
+
|
|
221
|
+
downloading_obj = DownloadingFile(self.service)
|
|
222
|
+
|
|
223
|
+
def download_and_print_annotation_area(project_id: str, temp_dir: Path, *, is_latest: bool, annotation_path: Optional[Path]) -> None:
|
|
224
|
+
if annotation_path is None:
|
|
225
|
+
annotation_path = temp_dir / f"{project_id}__annotation.zip"
|
|
226
|
+
downloading_obj.download_annotation_zip(
|
|
227
|
+
project_id,
|
|
228
|
+
dest_path=annotation_path,
|
|
229
|
+
is_latest=is_latest,
|
|
230
|
+
)
|
|
231
|
+
print_annotation_area(
|
|
232
|
+
output_format=output_format,
|
|
233
|
+
output_file=output_file,
|
|
234
|
+
target_task_ids=task_id_list,
|
|
235
|
+
task_query=task_query,
|
|
236
|
+
annotation_path=annotation_path,
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
if project_id is not None:
|
|
240
|
+
if args.temp_dir is not None:
|
|
241
|
+
download_and_print_annotation_area(
|
|
242
|
+
project_id=project_id, temp_dir=args.temp_dir, is_latest=args.latest, annotation_path=annotation_path
|
|
243
|
+
)
|
|
244
|
+
else:
|
|
245
|
+
with tempfile.TemporaryDirectory() as str_temp_dir:
|
|
246
|
+
download_and_print_annotation_area(
|
|
247
|
+
project_id=project_id, temp_dir=Path(str_temp_dir), is_latest=args.latest, annotation_path=annotation_path
|
|
248
|
+
)
|
|
249
|
+
else:
|
|
250
|
+
assert annotation_path is not None
|
|
251
|
+
print_annotation_area(
|
|
252
|
+
output_format=output_format,
|
|
253
|
+
output_file=output_file,
|
|
254
|
+
target_task_ids=task_id_list,
|
|
255
|
+
task_query=task_query,
|
|
256
|
+
annotation_path=annotation_path,
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
261
|
+
argument_parser = ArgumentParser(parser)
|
|
262
|
+
|
|
263
|
+
parser.add_argument(
|
|
264
|
+
"--annotation",
|
|
265
|
+
type=str,
|
|
266
|
+
help="アノテーションzip、またはzipを展開したディレクトリを指定します。指定しない場合はAnnofabからダウンロードします。",
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
parser.add_argument(
|
|
270
|
+
"-p",
|
|
271
|
+
"--project_id",
|
|
272
|
+
type=str,
|
|
273
|
+
help="project_id。``--annotation`` が未指定のときは必須です。\n"
|
|
274
|
+
"``--annotation`` が指定されているときに ``--project_id`` を指定すると、アノテーション仕様を参照して、集計対象の属性やCSV列順が決まります。",
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
argument_parser.add_format(
|
|
278
|
+
choices=[FormatArgument.CSV, FormatArgument.JSON, FormatArgument.PRETTY_JSON],
|
|
279
|
+
default=FormatArgument.CSV,
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
argument_parser.add_output()
|
|
283
|
+
|
|
284
|
+
parser.add_argument(
|
|
285
|
+
"-tq",
|
|
286
|
+
"--task_query",
|
|
287
|
+
type=str,
|
|
288
|
+
help="集計対象タスクを絞り込むためのクエリ条件をJSON形式で指定します。使用できるキーは task_id, status, phase, phase_stage です。"
|
|
289
|
+
" ``file://`` を先頭に付けると、JSON形式のファイルを指定できます。",
|
|
290
|
+
)
|
|
291
|
+
argument_parser.add_task_id(required=False)
|
|
292
|
+
|
|
293
|
+
parser.add_argument(
|
|
294
|
+
"--latest",
|
|
295
|
+
action="store_true",
|
|
296
|
+
help="``--annotation`` を指定しないとき、最新のアノテーションzipを参照します。このオプションを指定すると、アノテーションzipを更新するのに数分待ちます。", # noqa: E501
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
parser.add_argument(
|
|
300
|
+
"--temp_dir",
|
|
301
|
+
type=Path,
|
|
302
|
+
help="指定したディレクトリに、アノテーションZIPなどの一時ファイルをダウンロードします。",
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
parser.set_defaults(subcommand_func=main)
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def main(args: argparse.Namespace) -> None:
|
|
309
|
+
service = build_annofabapi_resource_and_login(args)
|
|
310
|
+
facade = AnnofabApiFacade(service)
|
|
311
|
+
ListAnnotationArea(service, facade, args).main()
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
|
|
315
|
+
subcommand_name = "list_annotation_area"
|
|
316
|
+
subcommand_help = "塗りつぶしアノテーションまたは矩形アノテーションの面積を出力します。"
|
|
317
|
+
epilog = "オーナロールまたはアノテーションユーザロールを持つユーザで実行してください。"
|
|
318
|
+
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help, description=subcommand_help, epilog=epilog)
|
|
319
|
+
parse_args(parser)
|
|
320
|
+
return parser
|
|
@@ -4,6 +4,7 @@ from typing import Optional
|
|
|
4
4
|
import annofabcli
|
|
5
5
|
import annofabcli.common.cli
|
|
6
6
|
import annofabcli.stat_visualization.merge_visualization_dir
|
|
7
|
+
import annofabcli.statistics.list_annotation_area
|
|
7
8
|
import annofabcli.statistics.list_annotation_attribute
|
|
8
9
|
import annofabcli.statistics.list_annotation_attribute_filled_count
|
|
9
10
|
import annofabcli.statistics.list_annotation_count
|
|
@@ -27,6 +28,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
|
27
28
|
annofabcli.statistics.list_annotation_attribute_filled_count.add_parser(subparsers)
|
|
28
29
|
annofabcli.statistics.list_annotation_count.add_parser(subparsers)
|
|
29
30
|
annofabcli.statistics.list_annotation_duration.add_parser(subparsers)
|
|
31
|
+
annofabcli.statistics.list_annotation_area.add_parser(subparsers)
|
|
30
32
|
|
|
31
33
|
annofabcli.statistics.list_video_duration.add_parser(subparsers)
|
|
32
34
|
annofabcli.statistics.list_worktime.add_parser(subparsers)
|
|
@@ -4,7 +4,6 @@ import argparse
|
|
|
4
4
|
import functools
|
|
5
5
|
import json
|
|
6
6
|
import logging.handlers
|
|
7
|
-
import re
|
|
8
7
|
import sys
|
|
9
8
|
import tempfile
|
|
10
9
|
from multiprocessing import Pool
|
|
@@ -64,10 +63,6 @@ from annofabcli.statistics.visualization.visualization_source_files import Visua
|
|
|
64
63
|
logger = logging.getLogger(__name__)
|
|
65
64
|
|
|
66
65
|
|
|
67
|
-
def get_project_output_dir(project_title: str) -> str:
|
|
68
|
-
return re.sub(r'[\\/:*?"<>|]+', "__", project_title)
|
|
69
|
-
|
|
70
|
-
|
|
71
66
|
class WriteCsvGraph:
|
|
72
67
|
def __init__( # noqa: PLR0913
|
|
73
68
|
self,
|
|
@@ -408,8 +403,7 @@ class VisualizingStatisticsMain:
|
|
|
408
403
|
root_output_dir: Path,
|
|
409
404
|
) -> Optional[Path]:
|
|
410
405
|
try:
|
|
411
|
-
|
|
412
|
-
output_project_dir = root_output_dir / get_project_output_dir(project_title)
|
|
406
|
+
output_project_dir = root_output_dir / project_id
|
|
413
407
|
self.visualize_statistics(
|
|
414
408
|
project_id=project_id,
|
|
415
409
|
output_project_dir=output_project_dir,
|
|
@@ -201,12 +201,12 @@ class DeleteSupplementaryDataMain(CommandLineWithConfirm):
|
|
|
201
201
|
|
|
202
202
|
|
|
203
203
|
class DeleteSupplementaryData(CommandLine):
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
COMMON_MESSAGE = "annofabcli supplementary_data delete: error:"
|
|
205
|
+
|
|
206
|
+
def validate(self, args: argparse.Namespace) -> bool:
|
|
207
207
|
if args.csv is not None: # noqa: SIM102
|
|
208
208
|
if not Path(args.csv).exists():
|
|
209
|
-
print(f"{COMMON_MESSAGE} argument --csv: ファイルパスが存在しません。 '{args.csv}'", file=sys.stderr) # noqa: T201
|
|
209
|
+
print(f"{self.COMMON_MESSAGE} argument --csv: ファイルパスが存在しません。 '{args.csv}'", file=sys.stderr) # noqa: T201
|
|
210
210
|
return False
|
|
211
211
|
|
|
212
212
|
return True
|
|
@@ -227,6 +227,10 @@ class DeleteSupplementaryData(CommandLine):
|
|
|
227
227
|
|
|
228
228
|
elif args.json is not None:
|
|
229
229
|
supplementary_data_list = annofabcli.common.cli.get_json_from_args(args.json)
|
|
230
|
+
if not isinstance(supplementary_data_list, list):
|
|
231
|
+
print(f"{self.COMMON_MESSAGE} argument --json: JSON形式が不正です。オブジェクトの配列を指定してください。", file=sys.stderr) # noqa: T201
|
|
232
|
+
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
|
|
233
|
+
|
|
230
234
|
input_data_dict = get_input_data_supplementary_data_dict_from_list(supplementary_data_list)
|
|
231
235
|
main_obj.delete_supplementary_data_list(project_id, input_data_dict)
|
|
232
236
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: annofabcli
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.102.0
|
|
4
4
|
Summary: Utility Command Line Interface for AnnoFab
|
|
5
5
|
Author: Kurusugawa Computer Inc.
|
|
6
6
|
License: MIT
|
|
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.13
|
|
18
18
|
Classifier: Topic :: Utilities
|
|
19
19
|
Requires-Python: >=3.9
|
|
20
|
-
Requires-Dist: annofabapi>=1.4.
|
|
20
|
+
Requires-Dist: annofabapi>=1.4.7
|
|
21
21
|
Requires-Dist: bokeh<3.7,>=3.3
|
|
22
22
|
Requires-Dist: dictdiffer
|
|
23
23
|
Requires-Dist: isodate
|
|
@@ -30,6 +30,7 @@ Requires-Dist: python-datauri
|
|
|
30
30
|
Requires-Dist: pyyaml
|
|
31
31
|
Requires-Dist: requests
|
|
32
32
|
Requires-Dist: typing-extensions>=4.5
|
|
33
|
+
Requires-Dist: ulid-py>=1.1.0
|
|
33
34
|
Description-Content-Type: text/markdown
|
|
34
35
|
|
|
35
36
|
# annofab-cli
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
annofabcli/__init__.py,sha256=fdBtxy5rOI8zi26jf0hmXS5KTBjQIsm2b9ZUSAIR558,319
|
|
2
2
|
annofabcli/__main__.py,sha256=JzfycqVG9ENhWOCxTouZwpHwWTSrI-grLsaMudxjyBM,5283
|
|
3
|
-
annofabcli/__version__.py,sha256=1wLzRDMtI76bS4Hg5fHKcg5FD7unbBljbYmf1off3K0,24
|
|
4
3
|
annofabcli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
4
|
annofabcli/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
5
|
annofabcli/annotation/annotation_query.py,sha256=ke3W3RT1-WfFzwt-TXcQwGmghG34vcKJkM_jxgbNKjU,15922
|
|
7
|
-
annofabcli/annotation/change_annotation_attributes.py,sha256=
|
|
8
|
-
annofabcli/annotation/change_annotation_properties.py,sha256=
|
|
9
|
-
annofabcli/annotation/copy_annotation.py,sha256=
|
|
10
|
-
annofabcli/annotation/delete_annotation.py,sha256=
|
|
6
|
+
annofabcli/annotation/change_annotation_attributes.py,sha256=GcabzuTeUhGHibYxOhoSgB9RR1ACmtrdxdmGGCiUnNQ,17200
|
|
7
|
+
annofabcli/annotation/change_annotation_properties.py,sha256=Zgxl2GVuoMsFComW5Wkaip3UKeOyPpH9T0FMsngpswc,18427
|
|
8
|
+
annofabcli/annotation/copy_annotation.py,sha256=Zy8sS7Hy4DVPLgtRrppEVuesfzj4rq07vXM783k6Akg,18165
|
|
9
|
+
annofabcli/annotation/delete_annotation.py,sha256=1rwuPTd_bnrmq_pVrzojy-1i7nAAme6MaTQEfKmq4n0,22696
|
|
11
10
|
annofabcli/annotation/download_annotation_zip.py,sha256=P_ZpdqIaSFEmB8jjpdykcRhh2tVlHxSlXFrYreJjShE,3282
|
|
12
|
-
annofabcli/annotation/dump_annotation.py,sha256=
|
|
13
|
-
annofabcli/annotation/import_annotation.py,sha256=
|
|
11
|
+
annofabcli/annotation/dump_annotation.py,sha256=bVEQeRYfskEKo5QjZ-bT6zsBon8u4bRySVy-CmJJTm8,7493
|
|
12
|
+
annofabcli/annotation/import_annotation.py,sha256=Yg032TQgnBVUaG12Kjvta2YLvSk4NN9CvdZTWtZta28,33799
|
|
14
13
|
annofabcli/annotation/list_annotation.py,sha256=B8ZFI7SRQPy-TgbpaX-tzXhveViY17YuCPE9BuK9mrs,10790
|
|
15
14
|
annofabcli/annotation/list_annotation_count.py,sha256=T9fbaoxWeDJIVgW_YgHRldbwrVZWiE-57lfJrDQrj80,6474
|
|
16
15
|
annofabcli/annotation/merge_segmentation.py,sha256=ldEQlcyCrog0KFYn92sTkScZQ7gmTjlujuCsKBemjhU,17950
|
|
17
16
|
annofabcli/annotation/remove_segmentation_overlap.py,sha256=gONYqaI0PMEGYJduB4JsmGBn3LCY9JtLSFgosWYyc3M,15957
|
|
18
|
-
annofabcli/annotation/restore_annotation.py,sha256=
|
|
17
|
+
annofabcli/annotation/restore_annotation.py,sha256=B3zitm-xB5ZuZy7c-6umiltK49Gdu3Di7YWTqNhJ22g,14704
|
|
19
18
|
annofabcli/annotation/subcommand_annotation.py,sha256=ku9mzb7zZilHcjf1MFV1E7EJ8OvfSUDHpcunM38teto,2122
|
|
20
19
|
annofabcli/annotation_specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
20
|
annofabcli/annotation_specs/add_attribute_restriction.py,sha256=kOFTZN3m_WNZZBeMqoMxN0wSu9x5gaDY1FkqEHiwLJI,6920
|
|
@@ -24,22 +23,22 @@ annofabcli/annotation_specs/export_annotation_specs.py,sha256=eZF5fj2P5U22_5UKgb
|
|
|
24
23
|
annofabcli/annotation_specs/get_annotation_specs_with_attribute_id_replaced.py,sha256=L0H0M31Amnm3ZEg9JdQe2A1vprsCLPTpj0LUFnP6GDY,8330
|
|
25
24
|
annofabcli/annotation_specs/get_annotation_specs_with_choice_id_replaced.py,sha256=mISJAgRTBMvISPk5__0w0MmhTkyQCcGPDin8K97x5Eg,6943
|
|
26
25
|
annofabcli/annotation_specs/get_annotation_specs_with_label_id_replaced.py,sha256=5tlvSdUXAUn8uQ1BXNWxkR2MIKnV6AJoxveiwD21IAo,7114
|
|
27
|
-
annofabcli/annotation_specs/list_annotation_specs_attribute.py,sha256=
|
|
28
|
-
annofabcli/annotation_specs/list_annotation_specs_choice.py,sha256=
|
|
26
|
+
annofabcli/annotation_specs/list_annotation_specs_attribute.py,sha256=m7ZA7SbAnTuWirOypHT_Y_prObjMWR_NMLo6NGHqf94,10788
|
|
27
|
+
annofabcli/annotation_specs/list_annotation_specs_choice.py,sha256=mxcyZ2CV6zeFj0o-FGbbIv99J81PniOYdUl21Bx_JOE,9150
|
|
29
28
|
annofabcli/annotation_specs/list_annotation_specs_history.py,sha256=Wbc9_NVx3haU_Vcm5RVTiryEmS-isqL3L350SBvIbao,2488
|
|
30
|
-
annofabcli/annotation_specs/list_annotation_specs_label.py,sha256=
|
|
31
|
-
annofabcli/annotation_specs/list_annotation_specs_label_attribute.py,sha256=
|
|
29
|
+
annofabcli/annotation_specs/list_annotation_specs_label.py,sha256=ZFzytOqbz094JW8h5xxI1kvu8b2jnOnB8hMi4dhBWuY,8877
|
|
30
|
+
annofabcli/annotation_specs/list_annotation_specs_label_attribute.py,sha256=B96-aK3UJ5Aqt8RxDA6e0_PTlcsyBpP5jRhT_RSpdXE,9356
|
|
32
31
|
annofabcli/annotation_specs/list_attribute_restriction.py,sha256=NpCnT2jpTzqtkzksGUqDjhpqJ4-kL_EnfjBTLF9o3Uw,6506
|
|
33
32
|
annofabcli/annotation_specs/list_label_color.py,sha256=huHBAb-LVLe-tj5ZALiBkFgZlZSTvi2ZDsPYgJPDZ2Q,2356
|
|
34
33
|
annofabcli/annotation_specs/put_label_color.py,sha256=HJTczQiE7uwdnpHh0Lyz_WuvtyXOxYt8RThBXpvjKgA,6057
|
|
35
34
|
annofabcli/annotation_specs/subcommand_annotation_specs.py,sha256=yqSjV1S3CSB0sFqelLBNkPy9RrVyGNRnSWCnaLTjUsc,2692
|
|
36
35
|
annofabcli/comment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
-
annofabcli/comment/delete_comment.py,sha256=
|
|
36
|
+
annofabcli/comment/delete_comment.py,sha256=6b-cdu10EWvelvdcFQp8j8wuCEp8WULEY2evZgo-ALM,11535
|
|
38
37
|
annofabcli/comment/download_comment_json.py,sha256=YfqUnMgvLgVFV7FJPIXwirREkQ2E63fXeCaF4hfwk8c,2338
|
|
39
38
|
annofabcli/comment/list_all_comment.py,sha256=p5STKKQ4SV-vDvY1F3pKOrveZcteLTHIUEO-ci1nGes,6090
|
|
40
39
|
annofabcli/comment/list_comment.py,sha256=gZSzeBeYLt0dhCi-8GcuEEB1NuJoXRdptp4oxkOtAMQ,4947
|
|
41
|
-
annofabcli/comment/put_comment.py,sha256=
|
|
42
|
-
annofabcli/comment/put_comment_simply.py,sha256=
|
|
40
|
+
annofabcli/comment/put_comment.py,sha256=4mU41K30iIsTjjoZNfthwnDgutCgwJdBDM988y3wD1U,12150
|
|
41
|
+
annofabcli/comment/put_comment_simply.py,sha256=P9eMKVvVXA6E6SS8gmBM7gcFcF7GQL3K3Tg5cf9cEEg,8245
|
|
43
42
|
annofabcli/comment/put_inspection_comment.py,sha256=F7m6lsbN0FHk0adwiapvD2UOv-8fbCdqfA9CtuJcnY8,3869
|
|
44
43
|
annofabcli/comment/put_inspection_comment_simply.py,sha256=6oKYuihsOKkAKMzcLeUzgMu9SIJC9fWzM1VBis3asfo,6870
|
|
45
44
|
annofabcli/comment/put_onhold_comment.py,sha256=9tJ6zzOwqr80SqCSyPFEyqkWpVahHvEEsWIaHxPrB-A,3529
|
|
@@ -48,13 +47,13 @@ annofabcli/comment/subcommand_comment.py,sha256=gd8w8ArXM1Tq9VUduDgn8m4G6HwevRWJ
|
|
|
48
47
|
annofabcli/comment/utils.py,sha256=aUj7U6MtGh64F3Ko83y4NKPKyWAqcg-c1XLqjkmIpSk,350
|
|
49
48
|
annofabcli/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
49
|
annofabcli/common/bokeh.py,sha256=x5-Siok3cIhq-biTOb3JG91_q--ob1m48TDgB72P1Hc,1071
|
|
51
|
-
annofabcli/common/cli.py,sha256=
|
|
50
|
+
annofabcli/common/cli.py,sha256=lurVBiacGMzlZBEA_HQbX_37lUh_U7chio56JwqQ8qQ,23814
|
|
52
51
|
annofabcli/common/dataclasses.py,sha256=FRDihsB-H5P5ioVE3kfJtorsS5EbSMySlHrp8BJ3ktg,385
|
|
53
|
-
annofabcli/common/download.py,sha256=
|
|
52
|
+
annofabcli/common/download.py,sha256=ZTy2lOL5a66rm8H1lhU53T5SuaoE4vb6bSmLQu5K_OQ,14307
|
|
54
53
|
annofabcli/common/enums.py,sha256=pnMZEk8ADK2qO2Hmujx6NxeCwvSAEDNhmgK4ajPSC9Q,1233
|
|
55
54
|
annofabcli/common/exceptions.py,sha256=trgC5eqvy7jgqOQ41pbAOC__uxy19GgrM9NAgkH_lBw,2051
|
|
56
55
|
annofabcli/common/facade.py,sha256=1d5DxC4O5yHr0gisqaqgkacY5Omn1X-L1syPnYPyiwQ,19401
|
|
57
|
-
annofabcli/common/image.py,sha256=
|
|
56
|
+
annofabcli/common/image.py,sha256=lATm80lgU4s0Y0DnAC2H0eVB8eBbhXPxpQ5OZk0kyB0,16772
|
|
58
57
|
annofabcli/common/pandas.py,sha256=IW9xqHkdRF1I6YZc7CP_9tkGxJuu1MKEXFILjhaNUU0,449
|
|
59
58
|
annofabcli/common/type_util.py,sha256=i3r5pFtRYQwJrYkl1-lVQi8XOePQxTUX_cAHgBTsagM,224
|
|
60
59
|
annofabcli/common/typing.py,sha256=_AcEogoaMbib0esfN2RvHshAZH0oyRb2Ro9-rbn7NJ8,330
|
|
@@ -76,7 +75,7 @@ annofabcli/filesystem/subcommand_filesystem.py,sha256=ZM2td5iZYIQ3TCI-9xAue8LugF
|
|
|
76
75
|
annofabcli/input_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
76
|
annofabcli/input_data/change_input_data_name.py,sha256=cQWoGTZKwr2_fU1WGALmRyJY39ruf9t4eMxpI06eT9g,9943
|
|
78
77
|
annofabcli/input_data/copy_input_data.py,sha256=Lbyq2aW5lmJCPB8-WHdOI93a2ND5E0qOWrhBHRluQyw,14656
|
|
79
|
-
annofabcli/input_data/delete_input_data.py,sha256=
|
|
78
|
+
annofabcli/input_data/delete_input_data.py,sha256=AKYyBsUq-renK46s_Yqyr4G8vB2Uok_6gXxJ5jBpM2Y,8870
|
|
80
79
|
annofabcli/input_data/delete_metadata_key_of_input_data.py,sha256=PVv9HXQVFLKQh-4RSHas_ckFxDxtqAzWnXnWYFFYy08,8464
|
|
81
80
|
annofabcli/input_data/download_input_data_json.py,sha256=vxGoeM3ZEggQbWiWsrDK0_GxQrC_UzSHAtWMYK-k_6I,2794
|
|
82
81
|
annofabcli/input_data/list_all_input_data.py,sha256=Kq261WCkma5UNKfMDT7O6Z-dzzqp-KP1wL0DvHe5fH8,9879
|
|
@@ -85,14 +84,14 @@ annofabcli/input_data/list_input_data.py,sha256=-ZtcUM3aOzdvBjOeeWFO5UGjHWd3OhIi
|
|
|
85
84
|
annofabcli/input_data/put_input_data.py,sha256=QrIe_RBXfGzpTYazy4cN8iSdHTQjq96sI0bXq6g1G_k,18233
|
|
86
85
|
annofabcli/input_data/put_input_data_with_zip.py,sha256=SA4aMAwMBFgc9Lh0zmRCbmkXG4AMrcBqd5zeTSdr8lc,5566
|
|
87
86
|
annofabcli/input_data/subcommand_input_data.py,sha256=X8EoxsF6PMiKrvk_r7PIe2D0WZuaPlgLJRuTiljPIdM,2048
|
|
88
|
-
annofabcli/input_data/update_metadata_of_input_data.py,sha256=
|
|
87
|
+
annofabcli/input_data/update_metadata_of_input_data.py,sha256=b-pzVKQcP29ExZh8j5kwu3rKeuCTpqY3u8V4cEjXhH4,11589
|
|
89
88
|
annofabcli/input_data/utils.py,sha256=F3mYbWmRwXfEtiIo9dvSysfuZUdyQzJmmq94eM-C5IY,723
|
|
90
89
|
annofabcli/instruction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
91
90
|
annofabcli/instruction/copy_instruction.py,sha256=24zBMkelSI2mpJq7Esgzo3uB_f1Z3hitBeX68HFqV00,6704
|
|
92
91
|
annofabcli/instruction/download_instruction.py,sha256=mxlAp3Yr4HZrtNHpNc_VOiNLHyKQc7HCqF6X9kHKEKU,8317
|
|
93
92
|
annofabcli/instruction/list_instruction_history.py,sha256=P9L4goeCQbWB4y_9Bgk_R4JYlsFGL73RI0KeQTnNDCU,2122
|
|
94
93
|
annofabcli/instruction/subcommand_instruction.py,sha256=hSj7iYX-ad23X3wi5iMb9AZJCd1bUxFvynLJ6r3ZFGE,1169
|
|
95
|
-
annofabcli/instruction/upload_instruction.py,sha256=
|
|
94
|
+
annofabcli/instruction/upload_instruction.py,sha256=GPC37S1yJxWjOb9AXm_lMlxi7xmSByPteQzkBLtu2Bg,6108
|
|
96
95
|
annofabcli/job/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
97
96
|
annofabcli/job/delete_job.py,sha256=vWC81MgwzAG5SYMZE9fcr1XOiAoS_AryGFuFnABRbcc,3402
|
|
98
97
|
annofabcli/job/list_job.py,sha256=cJsfDQDIIRUHFAknM2FPVgRQe0UqMzxV3IlEAIovSgo,3213
|
|
@@ -136,6 +135,7 @@ annofabcli/stat_visualization/write_performance_rating_csv.py,sha256=TDn7-poyFt2
|
|
|
136
135
|
annofabcli/statistics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
137
136
|
annofabcli/statistics/histogram.py,sha256=CvzDxT2cKLSnBGSqkZE6p92PayGxYYja1YyB24M4ALU,3245
|
|
138
137
|
annofabcli/statistics/linegraph.py,sha256=0kr7jVBNMiM2ECYhv3Ry5RitElKerSl9ZKxbKzfiplI,12494
|
|
138
|
+
annofabcli/statistics/list_annotation_area.py,sha256=1LFYqc1JodVuHKM2ceTwWriDCabMmkOnHiNptvEyXAw,12325
|
|
139
139
|
annofabcli/statistics/list_annotation_attribute.py,sha256=87jjNCOXJUbWnmswMCLN7GTjGsBfqpFJ6hViWmnj8Y4,12557
|
|
140
140
|
annofabcli/statistics/list_annotation_attribute_filled_count.py,sha256=vwWeFHwTnEMdrLBauIKPFDkUCa6lXXd0GQgUAQ0LCqU,28890
|
|
141
141
|
annofabcli/statistics/list_annotation_count.py,sha256=nzmlHRCWt5mjeksZkeQyWqm4UaCa9SrdbNtuX9TPP5w,52907
|
|
@@ -143,13 +143,13 @@ annofabcli/statistics/list_annotation_duration.py,sha256=N7nnVUDfX_thIapqe6-z_Mq
|
|
|
143
143
|
annofabcli/statistics/list_video_duration.py,sha256=uNeMteRBX2JG_AWmcgMJj0Jzbq_qF7bvAwr25GmeIiw,9124
|
|
144
144
|
annofabcli/statistics/list_worktime.py,sha256=C7Yu3IOW2EvhkJJv6gY3hNdS9_TOLmT_9LZsB7vLJ1o,6493
|
|
145
145
|
annofabcli/statistics/scatter.py,sha256=IUCwXix9GbZb6V82wjjb5q2eamrT5HQsU_bzDTjAFnM,11011
|
|
146
|
-
annofabcli/statistics/subcommand_statistics.py,sha256=
|
|
146
|
+
annofabcli/statistics/subcommand_statistics.py,sha256=Pvd7s0vvDU9tSpAphPrv94IDhhR1p8iFH2tjdt7I7ZU,2536
|
|
147
147
|
annofabcli/statistics/summarize_task_count.py,sha256=8OH6BBRYRjHJkWRTjU0A0OfXa7f3NIRHrxPNFlRt_hM,9707
|
|
148
148
|
annofabcli/statistics/summarize_task_count_by_task_id_group.py,sha256=TSSmcFv615NLcq6uqXmg3ilYqSHl3A5qp90msVQM1gE,8646
|
|
149
149
|
annofabcli/statistics/summarize_task_count_by_user.py,sha256=TRoJXpt2HOVb8QO2YtRejkOAxyK80_NsPt3Vk9es9C8,6948
|
|
150
150
|
annofabcli/statistics/visualize_annotation_count.py,sha256=p73K4Bb3FTebEpvT_Lrn3l2YOvZ9YrYq3AQtQdguZdU,22334
|
|
151
151
|
annofabcli/statistics/visualize_annotation_duration.py,sha256=J4Z3Ql1sdiTraMnRaRi00slRzmAtyvExS3LkeVVzpc0,21198
|
|
152
|
-
annofabcli/statistics/visualize_statistics.py,sha256=
|
|
152
|
+
annofabcli/statistics/visualize_statistics.py,sha256=JyVDw0tiU7buJlg8sxnY7BWb38LOEHlaGZXTa0ge8PU,39329
|
|
153
153
|
annofabcli/statistics/visualize_video_duration.py,sha256=A6Q91aWx7GO4F0TGxbiQI0za8BFr7IqiUaYyw3__BgY,16842
|
|
154
154
|
annofabcli/statistics/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
155
155
|
annofabcli/statistics/visualization/filtering_query.py,sha256=0_3QcS1weGIC9THH7NGqjYCb4rDLiftnmA-2MVgeNDI,4174
|
|
@@ -174,7 +174,7 @@ annofabcli/statistics/visualization/dataframe/whole_performance.py,sha256=qcQALk
|
|
|
174
174
|
annofabcli/statistics/visualization/dataframe/whole_productivity_per_date.py,sha256=W8g9_4WcUHxvPw31gUY_MVheBfllsHHY6g-M0FKScUk,52141
|
|
175
175
|
annofabcli/statistics/visualization/dataframe/worktime_per_date.py,sha256=56izC5flXOiu_lKPSk0s0aNGgqr-FiVA4t6pBWSNuwk,21321
|
|
176
176
|
annofabcli/supplementary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
177
|
-
annofabcli/supplementary/delete_supplementary_data.py,sha256=
|
|
177
|
+
annofabcli/supplementary/delete_supplementary_data.py,sha256=pEy-qwKqNvnJnaEiJfaUJCZcLf54TLiqk_Tv3xO0QPA,13823
|
|
178
178
|
annofabcli/supplementary/list_supplementary_data.py,sha256=F4iJnQi_4W7S_d7ahqxWFSFcnfiKYhNuysC28v0QUWA,7649
|
|
179
179
|
annofabcli/supplementary/put_supplementary_data.py,sha256=BBgW3Kx5qnc4-VCfAO1bg1M1dvcFqMSt-7e4Dknkqks,18126
|
|
180
180
|
annofabcli/supplementary/subcommand_supplementary.py,sha256=F8qfuNQzgW5HV1QKB4h0DWN7-kPVQcoFQwPfW_vjZVk,1079
|
|
@@ -207,8 +207,8 @@ annofabcli/task_history_event/download_task_history_event_json.py,sha256=hQLVbQ0
|
|
|
207
207
|
annofabcli/task_history_event/list_all_task_history_event.py,sha256=JQEgwOIXbbTIfeX23AVaoySHViOR9UGm9uoXuhVEBqo,6446
|
|
208
208
|
annofabcli/task_history_event/list_worktime.py,sha256=9jsRYa2C9bva8E1Aqxv9CCKDuCP0MvbiaIyQFTDpjqY,13150
|
|
209
209
|
annofabcli/task_history_event/subcommand_task_history_event.py,sha256=mJVJoT4RXk4HWnY7-Nrsl4If-gtaIIEXd2z7eFZwM2I,1260
|
|
210
|
-
annofabcli-1.
|
|
211
|
-
annofabcli-1.
|
|
212
|
-
annofabcli-1.
|
|
213
|
-
annofabcli-1.
|
|
214
|
-
annofabcli-1.
|
|
210
|
+
annofabcli-1.102.0.dist-info/METADATA,sha256=nxOd0drqHnw28-7Kf3aA0qxKodxsNDV8HgqjX5Nnqxw,5286
|
|
211
|
+
annofabcli-1.102.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
212
|
+
annofabcli-1.102.0.dist-info/entry_points.txt,sha256=C2uSUc-kkLJpoK_mDL5FEMAdorLEMPfwSf8VBMYnIFM,56
|
|
213
|
+
annofabcli-1.102.0.dist-info/licenses/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
|
|
214
|
+
annofabcli-1.102.0.dist-info/RECORD,,
|
annofabcli/__version__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.100.5"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|