annofabcli 1.102.0__py3-none-any.whl → 1.102.1__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/copy_annotation.py +5 -1
- annofabcli/annotation/delete_annotation.py +14 -3
- annofabcli/annotation/merge_segmentation.py +5 -1
- annofabcli/annotation/remove_segmentation_overlap.py +6 -1
- annofabcli/organization_member/delete_organization_member.py +34 -14
- annofabcli/organization_member/invite_organization_member.py +27 -14
- {annofabcli-1.102.0.dist-info → annofabcli-1.102.1.dist-info}/METADATA +1 -1
- {annofabcli-1.102.0.dist-info → annofabcli-1.102.1.dist-info}/RECORD +11 -11
- {annofabcli-1.102.0.dist-info → annofabcli-1.102.1.dist-info}/WHEEL +0 -0
- {annofabcli-1.102.0.dist-info → annofabcli-1.102.1.dist-info}/entry_points.txt +0 -0
- {annofabcli-1.102.0.dist-info → annofabcli-1.102.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -10,6 +10,7 @@ from dataclasses import dataclass
|
|
|
10
10
|
from typing import Any, Optional
|
|
11
11
|
|
|
12
12
|
import annofabapi
|
|
13
|
+
from annofabapi.models import ProjectMemberRole
|
|
13
14
|
from annofabapi.utils import can_put_annotation
|
|
14
15
|
|
|
15
16
|
import annofabcli
|
|
@@ -350,6 +351,8 @@ class CopyAnnotation(CommandLine):
|
|
|
350
351
|
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
|
|
351
352
|
|
|
352
353
|
project_id = args.project_id
|
|
354
|
+
super().validate_project(project_id, [ProjectMemberRole.OWNER, ProjectMemberRole.ACCEPTER, ProjectMemberRole.WORKER])
|
|
355
|
+
|
|
353
356
|
str_copy_target_list = get_list_from_args(args.input)
|
|
354
357
|
|
|
355
358
|
copy_target_list = get_copy_target_list(str_copy_target_list)
|
|
@@ -421,6 +424,7 @@ def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argpa
|
|
|
421
424
|
subcommand_name = "copy"
|
|
422
425
|
subcommand_help = "アノテーションをコピーします."
|
|
423
426
|
description = "タスク単位または入力データ単位で、アノテーションをコピーします。"
|
|
424
|
-
|
|
427
|
+
epilog = "オーナー、チェッカーまたはアノテータロールを持つユーザで実行してください。"
|
|
428
|
+
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help, description, epilog=epilog)
|
|
425
429
|
parse_args(parser)
|
|
426
430
|
return parser
|
|
@@ -356,7 +356,13 @@ class DeleteAnnotation(CommandLine):
|
|
|
356
356
|
else:
|
|
357
357
|
backup_dir = Path(args.backup)
|
|
358
358
|
|
|
359
|
-
|
|
359
|
+
if args.force:
|
|
360
|
+
# --forceオプションが指定されている場合は、完了状態のタスクも削除する
|
|
361
|
+
# 完了状態のタスクを削除するには、オーナーロールである必要があるため、`args.force`で条件を分岐する
|
|
362
|
+
super().validate_project(project_id, [ProjectMemberRole.OWNER])
|
|
363
|
+
else:
|
|
364
|
+
super().validate_project(project_id, [ProjectMemberRole.OWNER, ProjectMemberRole.ACCEPTER])
|
|
365
|
+
|
|
360
366
|
main_obj = DeleteAnnotationMain(self.service, project_id, all_yes=args.yes, is_force=args.force)
|
|
361
367
|
|
|
362
368
|
if args.json is not None:
|
|
@@ -452,7 +458,12 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
|
452
458
|
f"(ex): ``{json.dumps(EXAMPLE_ANNOTATION_QUERY)}``",
|
|
453
459
|
)
|
|
454
460
|
|
|
455
|
-
parser.add_argument(
|
|
461
|
+
parser.add_argument(
|
|
462
|
+
"--force",
|
|
463
|
+
action="store_true",
|
|
464
|
+
help="指定した場合は、完了状態のタスクのアノテーションも削除します。"
|
|
465
|
+
"ただし、完了状態のタスクを削除するには、オーナーロールを持つユーザーが実行する必要があります。",
|
|
466
|
+
)
|
|
456
467
|
parser.add_argument(
|
|
457
468
|
"--backup",
|
|
458
469
|
type=str,
|
|
@@ -469,7 +480,7 @@ def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argpa
|
|
|
469
480
|
"タスク配下のアノテーションを削除します。ただし、作業中状態のタスクのアノテーションは削除できません。"
|
|
470
481
|
"間違えてアノテーションを削除したときに復元できるようにするため、 ``--backup`` でバックアップ用のディレクトリを指定することを推奨します。"
|
|
471
482
|
)
|
|
472
|
-
epilog = "
|
|
483
|
+
epilog = "オーナーまたはチェッカーロールを持つユーザで実行してください。ただし``--force``オプションを指定した場合は、オーナーロールを持つユーザで実行してください。" # noqa: E501
|
|
473
484
|
|
|
474
485
|
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help, description, epilog=epilog)
|
|
475
486
|
parse_args(parser)
|
|
@@ -12,6 +12,7 @@ from typing import Any, Optional
|
|
|
12
12
|
|
|
13
13
|
import annofabapi
|
|
14
14
|
import numpy
|
|
15
|
+
from annofabapi.models import ProjectMemberRole
|
|
15
16
|
from annofabapi.pydantic_models.default_annotation_type import DefaultAnnotationType
|
|
16
17
|
from annofabapi.pydantic_models.task_status import TaskStatus
|
|
17
18
|
from annofabapi.segmentation import read_binary_image, write_binary_image
|
|
@@ -304,6 +305,8 @@ class MergeSegmentation(CommandLine):
|
|
|
304
305
|
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
|
|
305
306
|
|
|
306
307
|
project_id = args.project_id
|
|
308
|
+
super().validate_project(project_id, [ProjectMemberRole.OWNER, ProjectMemberRole.ACCEPTER, ProjectMemberRole.WORKER])
|
|
309
|
+
|
|
307
310
|
task_id_list = annofabcli.common.cli.get_list_from_args(args.task_id)
|
|
308
311
|
label_name_list = annofabcli.common.cli.get_list_from_args(args.label_name)
|
|
309
312
|
|
|
@@ -385,6 +388,7 @@ def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argpa
|
|
|
385
388
|
"複数の塗りつぶしアノテーションを1つにまとめます。"
|
|
386
389
|
"ラベルの種類を「塗りつぶし(インスタンスセグメンテーション)」から「塗りつぶしv2(セマンティックセグメンテーション)」に変更する場合などに有用です。"
|
|
387
390
|
)
|
|
388
|
-
|
|
391
|
+
epilog = "オーナー、チェッカーまたはアノテータロールを持つユーザで実行してください。"
|
|
392
|
+
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help, description, epilog=epilog)
|
|
389
393
|
parse_args(parser)
|
|
390
394
|
return parser
|
|
@@ -12,6 +12,7 @@ from typing import Any, Optional
|
|
|
12
12
|
|
|
13
13
|
import annofabapi
|
|
14
14
|
import numpy
|
|
15
|
+
from annofabapi.models import ProjectMemberRole
|
|
15
16
|
from annofabapi.pydantic_models.task_status import TaskStatus
|
|
16
17
|
from annofabapi.segmentation import read_binary_image, write_binary_image
|
|
17
18
|
from annofabapi.utils import can_put_annotation
|
|
@@ -291,8 +292,11 @@ class RemoveSegmentationOverlap(CommandLine):
|
|
|
291
292
|
sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
|
|
292
293
|
|
|
293
294
|
project_id = args.project_id
|
|
295
|
+
|
|
294
296
|
task_id_list = annofabcli.common.cli.get_list_from_args(args.task_id)
|
|
295
297
|
|
|
298
|
+
super().validate_project(project_id, [ProjectMemberRole.OWNER, ProjectMemberRole.ACCEPTER, ProjectMemberRole.WORKER])
|
|
299
|
+
|
|
296
300
|
main_obj = RemoveSegmentationOverlapMain(
|
|
297
301
|
self.service,
|
|
298
302
|
project_id=project_id,
|
|
@@ -338,6 +342,7 @@ def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argpa
|
|
|
338
342
|
"Annofabでインスタンスセグメンテーションは重ねることができてしまいます。"
|
|
339
343
|
"この重なりをなくしたいときに有用です。"
|
|
340
344
|
)
|
|
341
|
-
|
|
345
|
+
epilog = "オーナー、チェッカーまたはアノテータロールを持つユーザで実行してください。"
|
|
346
|
+
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help, description, epilog=epilog)
|
|
342
347
|
parse_args(parser)
|
|
343
348
|
return parser
|
|
@@ -7,6 +7,7 @@ from typing import Any, Optional
|
|
|
7
7
|
|
|
8
8
|
import annofabapi
|
|
9
9
|
import more_itertools
|
|
10
|
+
from annofabapi.models import OrganizationMemberRole
|
|
10
11
|
|
|
11
12
|
import annofabcli
|
|
12
13
|
import annofabcli.common.cli
|
|
@@ -35,8 +36,14 @@ class DeleteOrganizationMemberMain(CommandLineWithConfirm):
|
|
|
35
36
|
def get_member(organization_member_list: list[dict[str, Any]], user_id: str) -> Optional[dict[str, Any]]:
|
|
36
37
|
return more_itertools.first_true(organization_member_list, pred=lambda e: e["user_id"] == user_id)
|
|
37
38
|
|
|
38
|
-
def
|
|
39
|
-
|
|
39
|
+
def delete_organization_members_from_organization(self, organization_name: str, user_ids: Collection[str]) -> None:
|
|
40
|
+
if not self.facade.contains_any_organization_member_role(
|
|
41
|
+
organization_name, {OrganizationMemberRole.ADMINISTRATOR, OrganizationMemberRole.OWNER}
|
|
42
|
+
):
|
|
43
|
+
logger.warning(f"組織'{organization_name}'に所属していないか、組織メンバーを脱退できるロールを持たないため、スキップします。")
|
|
44
|
+
return
|
|
45
|
+
|
|
46
|
+
logger.info(f"{len(user_ids)} 件のメンバーを組織'{organization_name}'から脱退させます。")
|
|
40
47
|
|
|
41
48
|
member_list = self.service.wrapper.get_all_organization_members(organization_name)
|
|
42
49
|
|
|
@@ -45,24 +52,30 @@ class DeleteOrganizationMemberMain(CommandLineWithConfirm):
|
|
|
45
52
|
for user_id in user_ids:
|
|
46
53
|
member = self.get_member(member_list, user_id)
|
|
47
54
|
if member is None:
|
|
48
|
-
logger.warning(f"
|
|
55
|
+
logger.warning(f"組織'{organization_name}'に user_id='{user_id}'のメンバーが存在しません。")
|
|
49
56
|
continue
|
|
50
57
|
|
|
51
58
|
if not self.confirm_processing(
|
|
52
|
-
f"user_id='{user_id}'
|
|
59
|
+
f"組織'{organization_name}'に所属する user_id='{user_id}'のメンバーを脱退させますか? :: username='{member['username']}'"
|
|
53
60
|
):
|
|
54
61
|
continue
|
|
55
62
|
|
|
56
|
-
logger.debug(f"user_id='{user_id}'のユーザを組織から脱退させます。 :: username='{member['username']}', role='{member['role']}'")
|
|
57
63
|
try:
|
|
58
64
|
self.service.api.delete_organization_member(organization_name, user_id)
|
|
59
|
-
logger.debug(f"
|
|
65
|
+
logger.debug(f"組織'{organization_name}'から user_id='{user_id}'のメンバーを脱退させました。")
|
|
60
66
|
success_count += 1
|
|
61
67
|
|
|
62
68
|
except Exception: # pylint: disable=broad-except
|
|
63
|
-
logger.warning(f"
|
|
69
|
+
logger.warning(f"組織'{organization_name}'から user_id='{user_id}'のメンバーを脱退させるのに失敗しました。", exc_info=True)
|
|
70
|
+
|
|
71
|
+
logger.info(f"{success_count} / {len(user_ids)} 件のメンバーを組織'{organization_name}'から脱退させました。")
|
|
64
72
|
|
|
65
|
-
|
|
73
|
+
def delete_organization_members_from_organizations(self, organization_names: list[str], user_ids: Collection[str]) -> None:
|
|
74
|
+
for organization_name in organization_names:
|
|
75
|
+
try:
|
|
76
|
+
self.delete_organization_members_from_organization(organization_name, user_ids)
|
|
77
|
+
except Exception: # pylint
|
|
78
|
+
logger.warning(f"組織'{organization_name}'からメンバーを脱退させるのに失敗しました。", exc_info=True)
|
|
66
79
|
|
|
67
80
|
|
|
68
81
|
class DeleteOrganizationMember(CommandLine):
|
|
@@ -70,9 +83,10 @@ class DeleteOrganizationMember(CommandLine):
|
|
|
70
83
|
args = self.args
|
|
71
84
|
|
|
72
85
|
user_id_list = annofabcli.common.cli.get_list_from_args(args.user_id)
|
|
86
|
+
organization_name_list = annofabcli.common.cli.get_list_from_args(args.organization)
|
|
73
87
|
|
|
74
88
|
main_obj = DeleteOrganizationMemberMain(self.service, all_yes=args.yes)
|
|
75
|
-
main_obj.
|
|
89
|
+
main_obj.delete_organization_members_from_organizations(organization_name_list, user_id_list)
|
|
76
90
|
|
|
77
91
|
|
|
78
92
|
def main(args: argparse.Namespace) -> None:
|
|
@@ -82,7 +96,14 @@ def main(args: argparse.Namespace) -> None:
|
|
|
82
96
|
|
|
83
97
|
|
|
84
98
|
def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
85
|
-
parser.add_argument(
|
|
99
|
+
parser.add_argument(
|
|
100
|
+
"-org",
|
|
101
|
+
"--organization",
|
|
102
|
+
nargs="+",
|
|
103
|
+
required=True,
|
|
104
|
+
type=str,
|
|
105
|
+
help="対象の組織名を指定してます。 ``file://`` を先頭に付けると、一覧が記載されたファイルを指定できます。",
|
|
106
|
+
)
|
|
86
107
|
|
|
87
108
|
parser.add_argument(
|
|
88
109
|
"-u",
|
|
@@ -90,7 +111,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
|
90
111
|
type=str,
|
|
91
112
|
nargs="+",
|
|
92
113
|
required=True,
|
|
93
|
-
help="
|
|
114
|
+
help="組織から脱退させるメンバーのuser_idを指定します。 ``file://`` を先頭に付けると、一覧が記載されたファイルを指定できます。",
|
|
94
115
|
)
|
|
95
116
|
|
|
96
117
|
parser.set_defaults(subcommand_func=main)
|
|
@@ -98,10 +119,9 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
|
98
119
|
|
|
99
120
|
def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
|
|
100
121
|
subcommand_name = "delete"
|
|
101
|
-
subcommand_help = "
|
|
102
|
-
description = "組織からユーザを脱退させます。"
|
|
122
|
+
subcommand_help = "組織からメンバーを脱退させます。"
|
|
103
123
|
epilog = "組織オーナまたは組織管理者ロールを持つユーザで実行してください。"
|
|
104
124
|
|
|
105
|
-
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, command_help=subcommand_help,
|
|
125
|
+
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, command_help=subcommand_help, epilog=epilog)
|
|
106
126
|
parse_args(parser)
|
|
107
127
|
return parser
|
|
@@ -29,8 +29,14 @@ class InviteOrganizationMemberMain(CommandLineWithConfirm):
|
|
|
29
29
|
self.facade = AnnofabApiFacade(service)
|
|
30
30
|
super().__init__(all_yes)
|
|
31
31
|
|
|
32
|
-
def
|
|
33
|
-
|
|
32
|
+
def invite_members_to_organization(self, organization_name: str, user_ids: Collection[str], role: str) -> None:
|
|
33
|
+
if not self.facade.contains_any_organization_member_role(
|
|
34
|
+
organization_name, {OrganizationMemberRole.ADMINISTRATOR, OrganizationMemberRole.OWNER}
|
|
35
|
+
):
|
|
36
|
+
logger.warning(f"組織'{organization_name}'に所属していないか、組織メンバーを招待できるロールを持たないため、スキップします。")
|
|
37
|
+
return
|
|
38
|
+
|
|
39
|
+
logger.info(f"{len(user_ids)} 件のメンバーを組織'{organization_name}'に招待して、ロール'{role}'を付与します。")
|
|
34
40
|
|
|
35
41
|
organization_member_list = self.service.wrapper.get_all_organization_members(organization_name)
|
|
36
42
|
all_user_ids = {e["user_id"] for e in organization_member_list}
|
|
@@ -39,21 +45,28 @@ class InviteOrganizationMemberMain(CommandLineWithConfirm):
|
|
|
39
45
|
success_count = 0
|
|
40
46
|
for user_id in user_ids:
|
|
41
47
|
if user_id in all_user_ids:
|
|
42
|
-
logger.warning(f"user_id='{user_id}'
|
|
48
|
+
logger.warning(f"user_id='{user_id}'のメンバーは、すでに組織'{organization_name}'に存在しているため、スキップします。")
|
|
43
49
|
continue
|
|
44
50
|
|
|
45
|
-
if not self.confirm_processing(f"user_id='{user_id}'
|
|
51
|
+
if not self.confirm_processing(f"user_id='{user_id}'のメンバーを組織'{organization_name}'に招待して、ロール'{role}'を付与しますか?"):
|
|
46
52
|
continue
|
|
47
53
|
|
|
48
54
|
try:
|
|
49
55
|
self.service.api.invite_organization_member(organization_name, user_id, request_body={"role": role})
|
|
50
|
-
logger.debug(f"user_id='{user_id}'
|
|
56
|
+
logger.debug(f"user_id='{user_id}'のメンバーを組織'{organization_name}'に招待しました。")
|
|
51
57
|
success_count += 1
|
|
52
58
|
|
|
53
59
|
except Exception: # pylint: disable=broad-except
|
|
54
|
-
logger.warning(f"user_id='{user_id}'
|
|
60
|
+
logger.warning(f"user_id='{user_id}'のメンバーを組織'{organization_name}'に招待するのに失敗しました。", exc_info=True)
|
|
61
|
+
|
|
62
|
+
logger.info(f"{success_count} / {len(user_ids)} 件のメンバーを組織'{organization_name}'に招待しました。")
|
|
55
63
|
|
|
56
|
-
|
|
64
|
+
def invite_members_to_organizations(self, organization_names: list[str], user_ids: Collection[str], role: str) -> None:
|
|
65
|
+
for organization_name in organization_names:
|
|
66
|
+
try:
|
|
67
|
+
self.invite_members_to_organization(organization_name, user_ids, role)
|
|
68
|
+
except Exception: # pylint
|
|
69
|
+
logger.warning(f"組織'{organization_name}'にメンバーを招待するのに失敗しました。", exc_info=True)
|
|
57
70
|
|
|
58
71
|
|
|
59
72
|
class InviteOrganizationMember(CommandLine):
|
|
@@ -61,9 +74,10 @@ class InviteOrganizationMember(CommandLine):
|
|
|
61
74
|
args = self.args
|
|
62
75
|
|
|
63
76
|
user_id_list = annofabcli.common.cli.get_list_from_args(args.user_id)
|
|
77
|
+
organization_name_list = annofabcli.common.cli.get_list_from_args(args.organization)
|
|
64
78
|
|
|
65
79
|
main_obj = InviteOrganizationMemberMain(self.service, all_yes=args.yes)
|
|
66
|
-
main_obj.
|
|
80
|
+
main_obj.invite_members_to_organizations(organization_name_list, user_id_list, role=args.role)
|
|
67
81
|
|
|
68
82
|
|
|
69
83
|
def main(args: argparse.Namespace) -> None:
|
|
@@ -73,7 +87,7 @@ def main(args: argparse.Namespace) -> None:
|
|
|
73
87
|
|
|
74
88
|
|
|
75
89
|
def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
76
|
-
parser.add_argument("-org", "--organization", required=True, type=str, help="
|
|
90
|
+
parser.add_argument("-org", "--organization", nargs="+", required=True, type=str, help="招待先の組織名を指定してください。")
|
|
77
91
|
|
|
78
92
|
parser.add_argument(
|
|
79
93
|
"-u",
|
|
@@ -81,7 +95,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
|
81
95
|
type=str,
|
|
82
96
|
nargs="+",
|
|
83
97
|
required=True,
|
|
84
|
-
help="
|
|
98
|
+
help="組織に招待するメンバーのuser_idを指定してます。 ``file://`` を先頭に付けると、一覧が記載されたファイルを指定できます。",
|
|
85
99
|
)
|
|
86
100
|
|
|
87
101
|
role_choices = [e.value for e in OrganizationMemberRole]
|
|
@@ -90,7 +104,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
|
90
104
|
type=str,
|
|
91
105
|
choices=role_choices,
|
|
92
106
|
required=True,
|
|
93
|
-
help="
|
|
107
|
+
help="招待するメンバーに割り当てるロールを指定してください。",
|
|
94
108
|
)
|
|
95
109
|
|
|
96
110
|
parser.set_defaults(subcommand_func=main)
|
|
@@ -98,10 +112,9 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
|
98
112
|
|
|
99
113
|
def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
|
|
100
114
|
subcommand_name = "invite"
|
|
101
|
-
subcommand_help = "
|
|
102
|
-
description = "組織にユーザを招待します。"
|
|
115
|
+
subcommand_help = "組織にメンバーを招待します。"
|
|
103
116
|
epilog = "組織オーナまたは組織管理者ロールを持つユーザで実行してください。"
|
|
104
117
|
|
|
105
|
-
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, command_help=subcommand_help,
|
|
118
|
+
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, command_help=subcommand_help, epilog=epilog)
|
|
106
119
|
parse_args(parser)
|
|
107
120
|
return parser
|
|
@@ -5,15 +5,15 @@ annofabcli/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
5
5
|
annofabcli/annotation/annotation_query.py,sha256=ke3W3RT1-WfFzwt-TXcQwGmghG34vcKJkM_jxgbNKjU,15922
|
|
6
6
|
annofabcli/annotation/change_annotation_attributes.py,sha256=GcabzuTeUhGHibYxOhoSgB9RR1ACmtrdxdmGGCiUnNQ,17200
|
|
7
7
|
annofabcli/annotation/change_annotation_properties.py,sha256=Zgxl2GVuoMsFComW5Wkaip3UKeOyPpH9T0FMsngpswc,18427
|
|
8
|
-
annofabcli/annotation/copy_annotation.py,sha256=
|
|
9
|
-
annofabcli/annotation/delete_annotation.py,sha256=
|
|
8
|
+
annofabcli/annotation/copy_annotation.py,sha256=79kJOfz_U_PIcP89HXdMW0HN5wiN5i-AxdjkwFgg5rQ,18482
|
|
9
|
+
annofabcli/annotation/delete_annotation.py,sha256=pZb48d7lRYEAYOFPOi_pt3rnOG5YNGuq-oPbjTOFEXc,23462
|
|
10
10
|
annofabcli/annotation/download_annotation_zip.py,sha256=P_ZpdqIaSFEmB8jjpdykcRhh2tVlHxSlXFrYreJjShE,3282
|
|
11
11
|
annofabcli/annotation/dump_annotation.py,sha256=bVEQeRYfskEKo5QjZ-bT6zsBon8u4bRySVy-CmJJTm8,7493
|
|
12
12
|
annofabcli/annotation/import_annotation.py,sha256=Yg032TQgnBVUaG12Kjvta2YLvSk4NN9CvdZTWtZta28,33799
|
|
13
13
|
annofabcli/annotation/list_annotation.py,sha256=B8ZFI7SRQPy-TgbpaX-tzXhveViY17YuCPE9BuK9mrs,10790
|
|
14
14
|
annofabcli/annotation/list_annotation_count.py,sha256=T9fbaoxWeDJIVgW_YgHRldbwrVZWiE-57lfJrDQrj80,6474
|
|
15
|
-
annofabcli/annotation/merge_segmentation.py,sha256=
|
|
16
|
-
annofabcli/annotation/remove_segmentation_overlap.py,sha256=
|
|
15
|
+
annofabcli/annotation/merge_segmentation.py,sha256=FuUrDG6HqMOna4BDJtC-NpqUBdQn45Oi-hzFyAVtDng,18267
|
|
16
|
+
annofabcli/annotation/remove_segmentation_overlap.py,sha256=NIwz45DwuBO6p-Zsty1WdI4eAJbzqUJkDLiJFZirX2k,16275
|
|
17
17
|
annofabcli/annotation/restore_annotation.py,sha256=B3zitm-xB5ZuZy7c-6umiltK49Gdu3Di7YWTqNhJ22g,14704
|
|
18
18
|
annofabcli/annotation/subcommand_annotation.py,sha256=ku9mzb7zZilHcjf1MFV1E7EJ8OvfSUDHpcunM38teto,2122
|
|
19
19
|
annofabcli/annotation_specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -106,8 +106,8 @@ annofabcli/organization/list_organization.py,sha256=kafkiBHd4nkJ_fqxJwYcuU79mqzE
|
|
|
106
106
|
annofabcli/organization/subcommand_organization.py,sha256=EM-3uU45T9H51kcQGVR6a-mmU9nLd9akP2-tULq2RY0,719
|
|
107
107
|
annofabcli/organization_member/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
108
108
|
annofabcli/organization_member/change_organization_member.py,sha256=DrRnVHTXRp5kE8ezgkXofuL0tgpvEPxwF8MowCDv27Q,4918
|
|
109
|
-
annofabcli/organization_member/delete_organization_member.py,sha256=
|
|
110
|
-
annofabcli/organization_member/invite_organization_member.py,sha256=
|
|
109
|
+
annofabcli/organization_member/delete_organization_member.py,sha256=tHMHMxNUpM-wpGP7ycyMh5lmifKMD802FHEuCRMIQNo,5305
|
|
110
|
+
annofabcli/organization_member/invite_organization_member.py,sha256=5sixK8WqUGl7DAOyIRxQ-uf106FYMHl4k7VtF1SatfQ,5177
|
|
111
111
|
annofabcli/organization_member/list_organization_member.py,sha256=zaZECajTok6N_HJvH2xAwB62qMOJjaIwabTdTfTwMJY,3588
|
|
112
112
|
annofabcli/organization_member/subcommand_organization_member.py,sha256=iK-Y4PxG5J8fu0Bnf8NBixv81BRXvr3BiVUyUb3ET7A,1289
|
|
113
113
|
annofabcli/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -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.102.
|
|
211
|
-
annofabcli-1.102.
|
|
212
|
-
annofabcli-1.102.
|
|
213
|
-
annofabcli-1.102.
|
|
214
|
-
annofabcli-1.102.
|
|
210
|
+
annofabcli-1.102.1.dist-info/METADATA,sha256=dagbVH22HM5jYGQFjhCTeWBOGeFpZKnzfYMix15O8VU,5286
|
|
211
|
+
annofabcli-1.102.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
212
|
+
annofabcli-1.102.1.dist-info/entry_points.txt,sha256=C2uSUc-kkLJpoK_mDL5FEMAdorLEMPfwSf8VBMYnIFM,56
|
|
213
|
+
annofabcli-1.102.1.dist-info/licenses/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
|
|
214
|
+
annofabcli-1.102.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|