Skip to content

Commit 0d550b3

Browse files
committed
gis-8085 Improve StrictPlatformException
1 parent 8a06b99 commit 0d550b3

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

uncoder-core/app/translator/core/exceptions/core.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
1-
class NotImplementedException(BaseException):
2-
...
1+
from typing import Optional
32

43

5-
class BasePlatformException(BaseException):
6-
...
4+
class NotImplementedException(BaseException): ...
5+
6+
7+
class BasePlatformException(BaseException): ...
78

89

910
class StrictPlatformException(BasePlatformException):
10-
def __init__(self, platform_name: str, field_name: str):
11-
message = f"Platform {platform_name} has strict mapping. Source field {field_name} has no mapping."
11+
field_name = None
12+
13+
def __init__(
14+
self, platform_name: str, field_name: str, mapping: str = "default", detected_fields: Optional[list] = None
15+
):
16+
message = (
17+
f"Platform {platform_name} has strict mapping. "
18+
f"Source fields: {', '.join(detected_fields) if detected_fields else field_name} has no mapping."
19+
f" Mapping file: {mapping}." if mapping else ""
20+
)
21+
self.field_name = field_name
1222
super().__init__(message)
1323

1424

uncoder-core/app/translator/core/render.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,16 @@ def apply_token(self, token: Union[FieldValue, Keyword, Identifier], source_mapp
262262

263263
def generate_query(self, tokens: list[TOKEN_TYPE], source_mapping: SourceMapping) -> str:
264264
result_values = []
265+
not_found_mapping_fields = set()
265266
for token in tokens:
266-
result_values.append(self.apply_token(token=token, source_mapping=source_mapping))
267+
try:
268+
result_values.append(self.apply_token(token=token, source_mapping=source_mapping))
269+
except StrictPlatformException as err:
270+
not_found_mapping_fields.add(err.field_name)
271+
if not_found_mapping_fields:
272+
raise StrictPlatformException(
273+
self.details.name, "", source_mapping.source_id, list(not_found_mapping_fields)
274+
)
267275
return "".join(result_values)
268276

269277
def wrap_query_with_meta_info(self, meta_info: MetaInfoContainer, query: str) -> str:

0 commit comments

Comments
 (0)