|
1 | 1 | import copy |
2 | 2 | from typing import List |
| 3 | +from typing import Optional |
3 | 4 |
|
4 | 5 | import superannotate.lib.core as constances |
5 | 6 | from lib.core.conditions import Condition |
|
9 | 10 | from lib.core.entities import Entity |
10 | 11 | from lib.core.entities import FolderEntity |
11 | 12 | from lib.core.entities import ProjectEntity |
| 13 | +from lib.core.entities import SubSetEntity |
12 | 14 | from lib.core.entities import TmpImageEntity |
13 | 15 | from lib.core.entities import VideoEntity |
14 | 16 | from lib.core.exceptions import AppException |
@@ -78,41 +80,78 @@ def execute(self) -> Response: |
78 | 80 | return self._response |
79 | 81 |
|
80 | 82 |
|
81 | | -class QueryEntities(BaseReportableUseCase): |
| 83 | +class QueryEntitiesUseCase(BaseReportableUseCase): |
82 | 84 | def __init__( |
83 | 85 | self, |
84 | 86 | reporter: Reporter, |
85 | 87 | project: ProjectEntity, |
86 | 88 | folder: FolderEntity, |
87 | 89 | backend_service_provider: SuperannotateServiceProvider, |
88 | 90 | query: str, |
| 91 | + subset: str, |
89 | 92 | ): |
90 | 93 | super().__init__(reporter) |
91 | 94 | self._project = project |
92 | 95 | self._folder = folder |
93 | 96 | self._backend_client = backend_service_provider |
94 | 97 | self._query = query |
| 98 | + self._subset = subset |
95 | 99 |
|
96 | 100 | def validate_query(self): |
97 | | - response = self._backend_client.validate_saqul_query( |
98 | | - self._project.team_id, self._project.id, self._query |
99 | | - ) |
100 | | - if response.get("error"): |
101 | | - raise AppException(response["error"]) |
102 | | - if response["isValidQuery"]: |
103 | | - self._query = response["parsedQuery"] |
104 | | - else: |
105 | | - raise AppException("Incorrect query.") |
106 | 101 | if self._project.sync_status != constances.ProjectState.SYNCED.value: |
107 | 102 | raise AppException("Data is not synced.") |
| 103 | + if self._query: |
| 104 | + response = self._backend_client.validate_saqul_query( |
| 105 | + self._project.team_id, self._project.id, self._query |
| 106 | + ) |
| 107 | + if response.get("error"): |
| 108 | + raise AppException(response["error"]) |
| 109 | + if response["isValidQuery"]: |
| 110 | + self._query = response["parsedQuery"] |
| 111 | + else: |
| 112 | + raise AppException("Incorrect query.") |
| 113 | + else: |
| 114 | + response = self._backend_client.validate_saqul_query( |
| 115 | + self._project.team_id, self._project.id, "-" |
| 116 | + ) |
| 117 | + if response.get("error"): |
| 118 | + raise AppException(response["error"]) |
108 | 119 |
|
109 | 120 | def execute(self) -> Response: |
| 121 | + if not any([self._query, self._subset]): |
| 122 | + self._response.errors = AppException( |
| 123 | + "AppException: The query and subset params cannot have the value None at the same time." |
| 124 | + ) |
| 125 | + return self._response |
| 126 | + |
110 | 127 | if self.is_valid(): |
| 128 | + query_kwargs = {} |
| 129 | + if self._subset: |
| 130 | + subset: Optional[SubSetEntity] = None |
| 131 | + response = self._backend_client.list_sub_sets( |
| 132 | + team_id=self._project.team_id, project_id=self._project.id |
| 133 | + ) |
| 134 | + if response.ok: |
| 135 | + subset = next( |
| 136 | + (_sub for _sub in response.data if _sub.name == self._subset), |
| 137 | + None, |
| 138 | + ) |
| 139 | + if not subset: |
| 140 | + self._response.errors = AppException( |
| 141 | + "Subset not found. Use the superannotate." |
| 142 | + "get_subsets() function to get a list of the available subsets." |
| 143 | + ) |
| 144 | + return self._response |
| 145 | + query_kwargs["subset_id"] = subset.id |
| 146 | + if self._query: |
| 147 | + query_kwargs["query"] = self._query |
| 148 | + query_kwargs["folder_id"] = ( |
| 149 | + None if self._folder.name == "root" else self._folder.uuid |
| 150 | + ) |
111 | 151 | service_response = self._backend_client.saqul_query( |
112 | 152 | self._project.team_id, |
113 | 153 | self._project.id, |
114 | | - self._query, |
115 | | - folder_id=None if self._folder.name == "root" else self._folder.uuid, |
| 154 | + **query_kwargs, |
116 | 155 | ) |
117 | 156 | if service_response.ok: |
118 | 157 | data = [] |
|
0 commit comments