|
12 | 12 | from typing import Union |
13 | 13 |
|
14 | 14 | import boto3 |
| 15 | +from pydantic import StrictBool |
| 16 | +from pydantic import conlist |
| 17 | +from pydantic import parse_obj_as |
| 18 | +from pydantic.error_wrappers import ValidationError |
| 19 | +from tqdm import tqdm |
| 20 | + |
15 | 21 | import lib.core as constances |
16 | 22 | from lib.app.annotation_helpers import add_annotation_bbox_to_json |
17 | 23 | from lib.app.annotation_helpers import add_annotation_comment_to_json |
|
52 | 58 | from lib.core.types import PriorityScore |
53 | 59 | from lib.core.types import Project |
54 | 60 | from lib.infrastructure.controller import Controller |
55 | | -from pydantic import conlist |
56 | | -from pydantic import parse_obj_as |
57 | | -from pydantic import StrictBool |
58 | | -from pydantic.error_wrappers import ValidationError |
59 | 61 | from superannotate.logger import get_default_logger |
60 | | -from tqdm import tqdm |
61 | 62 |
|
62 | 63 | logger = get_default_logger() |
63 | 64 |
|
@@ -171,8 +172,13 @@ def search_projects( |
171 | 172 | ) |
172 | 173 | .data |
173 | 174 | ) |
| 175 | + |
174 | 176 | if return_metadata: |
175 | | - return [ProjectSerializer(project).serialize() for project in result] |
| 177 | + return [ |
| 178 | + ProjectSerializer(project).serialize( |
| 179 | + exclude={"annotation_classes", "workflows", "settings", "contributors", "classes"} |
| 180 | + ) for project in result |
| 181 | + ] |
176 | 182 | else: |
177 | 183 | return [project.name for project in result] |
178 | 184 |
|
@@ -231,7 +237,7 @@ def create_project_from_metadata(project_metadata: Project): |
231 | 237 | description=project_metadata.get("description"), |
232 | 238 | project_type=project_metadata["type"], |
233 | 239 | settings=parse_obj_as(List[SettingEntity], project_metadata.get("settings", [])), |
234 | | - annotation_classes=project_metadata.get("classes", []), |
| 240 | + classes=project_metadata.get("classes", []), |
235 | 241 | workflows=project_metadata.get("workflows", []), |
236 | 242 | instructions_link=project_metadata.get("instructions_link"), |
237 | 243 | ) |
@@ -391,7 +397,7 @@ def rename_project(project: NotEmptyStr, new_name: NotEmptyStr): |
391 | 397 | ) |
392 | 398 | if response.errors: |
393 | 399 | raise AppException(response.errors) |
394 | | - |
| 400 | + return ProjectSerializer(response.data).serialize() |
395 | 401 | logger.info( |
396 | 402 | "Successfully renamed project %s to %s.", project, response.data["name"] |
397 | 403 | ) |
@@ -439,34 +445,6 @@ def delete_folders(project: NotEmptyStr, folder_names: List[NotEmptyStr]): |
439 | 445 | logger.info(f"Folders {folder_names} deleted in project {project}") |
440 | 446 |
|
441 | 447 |
|
442 | | -@Trackable |
443 | | -@validate_arguments |
444 | | -def get_project_and_folder_metadata(project: Union[NotEmptyStr, dict]): |
445 | | - """Returns project and folder metadata tuple. If folder part is empty, |
446 | | - than returned folder part is set to None. |
447 | | -
|
448 | | - :param project: project name or folder path (e.g., "project1/folder1") |
449 | | - :type project: str |
450 | | -
|
451 | | - :return: tuple of project and folder |
452 | | - :rtype: tuple |
453 | | - """ |
454 | | - warning_msg = ( |
455 | | - "The get_project_and_folder_metadata function is deprecated and will be removed with the coming release, " |
456 | | - "please use get_folder_metadata instead." |
457 | | - ) |
458 | | - logger.warning(warning_msg) |
459 | | - warnings.warn(warning_msg, DeprecationWarning) |
460 | | - project_name, folder_name = extract_project_folder(project) |
461 | | - project = ProjectSerializer( |
462 | | - Controller.get_default().search_project(project_name).data[0] |
463 | | - ).serialize() |
464 | | - folder = None |
465 | | - if folder_name: |
466 | | - folder = get_folder_metadata(project_name, folder_name) |
467 | | - return project, folder |
468 | | - |
469 | | - |
470 | 448 | @Trackable |
471 | 449 | @validate_arguments |
472 | 450 | def search_folders( |
@@ -538,15 +516,15 @@ def copy_image( |
538 | 516 | Controller.get_default().get_project_metadata(destination_project).data |
539 | 517 | ) |
540 | 518 |
|
541 | | - if destination_project_metadata["project"].project_type in [ |
| 519 | + if destination_project_metadata["project"].type in [ |
542 | 520 | constances.ProjectType.VIDEO.value, |
543 | 521 | constances.ProjectType.DOCUMENT.value, |
544 | | - ] or source_project_metadata["project"].project_type in [ |
| 522 | + ] or source_project_metadata["project"].type in [ |
545 | 523 | constances.ProjectType.VIDEO.value, |
546 | 524 | constances.ProjectType.DOCUMENT.value, |
547 | 525 | ]: |
548 | 526 | raise AppException( |
549 | | - LIMITED_FUNCTIONS[source_project_metadata["project"].project_type] |
| 527 | + LIMITED_FUNCTIONS[source_project_metadata["project"].type] |
550 | 528 | ) |
551 | 529 |
|
552 | 530 | response = Controller.get_default().copy_image( |
@@ -683,11 +661,11 @@ def move_images( |
683 | 661 | project_name, source_folder_name = extract_project_folder(source_project) |
684 | 662 |
|
685 | 663 | project = Controller.get_default().get_project_metadata(project_name).data |
686 | | - if project["project"].project_type in [ |
| 664 | + if project["project"].type in [ |
687 | 665 | constances.ProjectType.VIDEO.value, |
688 | 666 | constances.ProjectType.DOCUMENT.value, |
689 | 667 | ]: |
690 | | - raise AppException(LIMITED_FUNCTIONS[project["project"].project_type]) |
| 668 | + raise AppException(LIMITED_FUNCTIONS[project["project"].type]) |
691 | 669 |
|
692 | 670 | to_project_name, destination_folder_name = extract_project_folder( |
693 | 671 | destination_project |
@@ -779,18 +757,13 @@ def get_project_metadata( |
779 | 757 | ) |
780 | 758 |
|
781 | 759 | metadata = ProjectSerializer(response["project"]).serialize() |
782 | | - metadata["settings"] = [ |
783 | | - SettingsSerializer(setting).serialize() |
784 | | - for setting in response.get("settings", []) |
785 | | - ] |
786 | 760 |
|
787 | 761 | for elem in "classes", "workflows", "contributors": |
788 | 762 | if response.get(elem): |
789 | 763 | metadata[elem] = [ |
790 | | - BaseSerializer(attribute).serialize() for attribute in response[elem] |
| 764 | + BaseSerializer(attribute).serialize() for attribute in |
| 765 | + response[elem] |
791 | 766 | ] |
792 | | - else: |
793 | | - metadata[elem] = [] |
794 | 767 | return metadata |
795 | 768 |
|
796 | 769 |
|
@@ -1008,11 +981,11 @@ def assign_images(project: Union[NotEmptyStr, dict], image_names: List[str], use |
1008 | 981 | project_name, folder_name = extract_project_folder(project) |
1009 | 982 | project = Controller.get_default().get_project_metadata(project_name).data |
1010 | 983 |
|
1011 | | - if project["project"].project_type in [ |
| 984 | + if project["project"].type in [ |
1012 | 985 | constances.ProjectType.VIDEO.value, |
1013 | 986 | constances.ProjectType.DOCUMENT.value, |
1014 | 987 | ]: |
1015 | | - raise AppException(LIMITED_FUNCTIONS[project["project"].project_type]) |
| 988 | + raise AppException(LIMITED_FUNCTIONS[project["project"].type]) |
1016 | 989 |
|
1017 | 990 | contributors = ( |
1018 | 991 | Controller.get_default() |
@@ -1849,13 +1822,13 @@ def attach_image_urls_to_project( |
1849 | 1822 | project = Controller.get_default().get_project_metadata(project_name).data |
1850 | 1823 | project_folder_name = project_name + (f"/{folder_name}" if folder_name else "") |
1851 | 1824 |
|
1852 | | - if project["project"].project_type in [ |
| 1825 | + if project["project"].type in [ |
1853 | 1826 | constances.ProjectType.VIDEO.value, |
1854 | 1827 | constances.ProjectType.DOCUMENT.value, |
1855 | 1828 | ]: |
1856 | 1829 | raise AppException( |
1857 | 1830 | constances.INVALID_PROJECT_TYPE_TO_PROCESS.format( |
1858 | | - constances.ProjectType.get_name(project["project"].project_type) |
| 1831 | + constances.ProjectType.get_name(project["project"].type) |
1859 | 1832 | ) |
1860 | 1833 | ) |
1861 | 1834 | images_to_upload, duplicate_images = get_paths_and_duplicated_from_csv(attachments) |
@@ -1922,10 +1895,10 @@ def attach_video_urls_to_project( |
1922 | 1895 | project = Controller.get_default().get_project_metadata(project_name).data |
1923 | 1896 | project_folder_name = project_name + (f"/{folder_name}" if folder_name else "") |
1924 | 1897 |
|
1925 | | - if project["project"].project_type != constances.ProjectType.VIDEO.value: |
| 1898 | + if project["project"].type != constances.ProjectType.VIDEO.value: |
1926 | 1899 | raise AppException( |
1927 | 1900 | constances.INVALID_PROJECT_TYPE_TO_PROCESS.format( |
1928 | | - constances.ProjectType.get_name(project["project"].project_type) |
| 1901 | + constances.ProjectType.get_name(project["project"].type) |
1929 | 1902 | ) |
1930 | 1903 | ) |
1931 | 1904 |
|
@@ -2062,11 +2035,11 @@ def upload_preannotations_from_folder_to_project( |
2062 | 2035 | project_name, folder_name = extract_project_folder(project) |
2063 | 2036 | project_folder_name = project_name + (f"/{folder_name}" if folder_name else "") |
2064 | 2037 | project = Controller.get_default().get_project_metadata(project_name).data |
2065 | | - if project["project"].project_type in [ |
| 2038 | + if project["project"].type in [ |
2066 | 2039 | constances.ProjectType.VIDEO.value, |
2067 | 2040 | constances.ProjectType.DOCUMENT.value, |
2068 | 2041 | ]: |
2069 | | - raise AppException(LIMITED_FUNCTIONS[project["project"].project_type]) |
| 2042 | + raise AppException(LIMITED_FUNCTIONS[project["project"].type]) |
2070 | 2043 | if recursive_subfolders: |
2071 | 2044 | logger.info( |
2072 | 2045 | "When using recursive subfolder parsing same name annotations in different " |
@@ -2120,11 +2093,11 @@ def upload_image_annotations( |
2120 | 2093 | project_name, folder_name = extract_project_folder(project) |
2121 | 2094 |
|
2122 | 2095 | project = Controller.get_default().get_project_metadata(project_name).data |
2123 | | - if project["project"].project_type in [ |
| 2096 | + if project["project"].type in [ |
2124 | 2097 | constances.ProjectType.VIDEO.value, |
2125 | 2098 | constances.ProjectType.DOCUMENT.value, |
2126 | 2099 | ]: |
2127 | | - raise AppException(LIMITED_FUNCTIONS[project["project"].project_type]) |
| 2100 | + raise AppException(LIMITED_FUNCTIONS[project["project"].type]) |
2128 | 2101 |
|
2129 | 2102 | if not mask: |
2130 | 2103 | if not isinstance(annotation_json, dict): |
@@ -2211,11 +2184,11 @@ def benchmark( |
2211 | 2184 | project_name = project["name"] |
2212 | 2185 |
|
2213 | 2186 | project = Controller.get_default().get_project_metadata(project_name).data |
2214 | | - if project["project"].project_type in [ |
| 2187 | + if project["project"].type in [ |
2215 | 2188 | constances.ProjectType.VIDEO.value, |
2216 | 2189 | constances.ProjectType.DOCUMENT.value, |
2217 | 2190 | ]: |
2218 | | - raise AppException(LIMITED_FUNCTIONS[project["project"].project_type]) |
| 2191 | + raise AppException(LIMITED_FUNCTIONS[project["project"].type]) |
2219 | 2192 |
|
2220 | 2193 | if not export_root: |
2221 | 2194 | with tempfile.TemporaryDirectory() as temp_dir: |
@@ -2369,11 +2342,11 @@ def add_annotation_bbox_to_image( |
2369 | 2342 | """ |
2370 | 2343 | project_name, folder_name = extract_project_folder(project) |
2371 | 2344 | project = Controller.get_default().get_project_metadata(project_name).data |
2372 | | - if project["project"].project_type in [ |
| 2345 | + if project["project"].type in [ |
2373 | 2346 | constances.ProjectType.VIDEO.value, |
2374 | 2347 | constances.ProjectType.DOCUMENT.value, |
2375 | 2348 | ]: |
2376 | | - raise AppException(LIMITED_FUNCTIONS[project["project"].project_type]) |
| 2349 | + raise AppException(LIMITED_FUNCTIONS[project["project"].type]) |
2377 | 2350 | response = Controller.get_default().get_annotations( |
2378 | 2351 | project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False |
2379 | 2352 | ) |
@@ -2426,11 +2399,11 @@ def add_annotation_point_to_image( |
2426 | 2399 | """ |
2427 | 2400 | project_name, folder_name = extract_project_folder(project) |
2428 | 2401 | project = Controller.get_default().get_project_metadata(project_name).data |
2429 | | - if project["project"].project_type in [ |
| 2402 | + if project["project"].type in [ |
2430 | 2403 | constances.ProjectType.VIDEO.value, |
2431 | 2404 | constances.ProjectType.DOCUMENT.value, |
2432 | 2405 | ]: |
2433 | | - raise AppException(LIMITED_FUNCTIONS[project["project"].project_type]) |
| 2406 | + raise AppException(LIMITED_FUNCTIONS[project["project"].type]) |
2434 | 2407 | response = Controller.get_default().get_annotations( |
2435 | 2408 | project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False |
2436 | 2409 | ) |
@@ -2480,11 +2453,11 @@ def add_annotation_comment_to_image( |
2480 | 2453 | """ |
2481 | 2454 | project_name, folder_name = extract_project_folder(project) |
2482 | 2455 | project = Controller.get_default().get_project_metadata(project_name).data |
2483 | | - if project["project"].project_type in [ |
| 2456 | + if project["project"].type in [ |
2484 | 2457 | constances.ProjectType.VIDEO.value, |
2485 | 2458 | constances.ProjectType.DOCUMENT.value, |
2486 | 2459 | ]: |
2487 | | - raise AppException(LIMITED_FUNCTIONS[project["project"].project_type]) |
| 2460 | + raise AppException(LIMITED_FUNCTIONS[project["project"].type]) |
2488 | 2461 | response = Controller.get_default().get_annotations( |
2489 | 2462 | project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False |
2490 | 2463 | ) |
@@ -2793,10 +2766,10 @@ def attach_document_urls_to_project( |
2793 | 2766 | project = Controller.get_default().get_project_metadata(project_name).data |
2794 | 2767 | project_folder_name = project_name + (f"/{folder_name}" if folder_name else "") |
2795 | 2768 |
|
2796 | | - if project["project"].project_type != constances.ProjectType.DOCUMENT.value: |
| 2769 | + if project["project"].type != constances.ProjectType.DOCUMENT.value: |
2797 | 2770 | raise AppException( |
2798 | 2771 | constances.INVALID_PROJECT_TYPE_TO_PROCESS.format( |
2799 | | - constances.ProjectType.get_name(project["project"].project_type) |
| 2772 | + constances.ProjectType.get_name(project["project"].type) |
2800 | 2773 | ) |
2801 | 2774 | ) |
2802 | 2775 |
|
|
0 commit comments