33from abc import ABC ,abstractmethod
44from typing import TYPE_CHECKING ,Optional ,TypeVar ,Union
55
6- from app .translator .core .exceptions .core import StrictPlatformException
6+ from app .translator .core .exceptions .core import StrictPlatformException , UnsupportedMappingsException
77from app .translator .core .models .platform_details import PlatformDetails
88from app .translator .mappings .utils .load_from_files import LoaderFileMappings
99
@@ -116,7 +116,7 @@ def prepare_mapping(self) -> dict[str, SourceMapping]:
116116default_mapping = SourceMapping (source_id = DEFAULT_MAPPING_NAME )
117117for mapping_dict in self ._loader .load_platform_mappings (self ._platform_dir ):
118118log_source_signature = self .prepare_log_source_signature (mapping = mapping_dict )
119- if (source_id := mapping_dict . get ( "source" ) )== DEFAULT_MAPPING_NAME :
119+ if (source_id := mapping_dict [ "source" ] )== DEFAULT_MAPPING_NAME :
120120default_mapping .log_source_signature = log_source_signature
121121if self .skip_load_default_mappings :
122122continue
@@ -152,7 +152,7 @@ def prepare_fields_mapping(field_mapping: dict) -> FieldsMapping:
152152def prepare_log_source_signature (self ,mapping :dict )-> LogSourceSignature :
153153raise NotImplementedError ("Abstract method" )
154154
155- def get_suitable_source_mappings (
155+ def get_source_mappings_by_fields_and_log_sources (
156156self ,field_names :list [str ],log_sources :dict [str ,list [Union [int ,str ]]]
157157 )-> list [SourceMapping ]:
158158by_log_sources_and_fields = []
@@ -170,6 +170,17 @@ def get_suitable_source_mappings(
170170
171171return by_log_sources_and_fields or by_fields or [self ._source_mappings [DEFAULT_MAPPING_NAME ]]
172172
173+ def get_source_mappings_by_ids (self ,source_mapping_ids :list [str ])-> list [SourceMapping ]:
174+ source_mappings = []
175+ for source_mapping_id in source_mapping_ids :
176+ if source_mapping := self .get_source_mapping (source_mapping_id ):
177+ source_mappings .append (source_mapping )
178+
179+ if not source_mappings :
180+ source_mappings = [self .get_source_mapping (DEFAULT_MAPPING_NAME )]
181+
182+ return source_mappings
183+
173184def get_source_mapping (self ,source_id :str )-> Optional [SourceMapping ]:
174185return self ._source_mappings .get (source_id )
175186
@@ -218,3 +229,18 @@ def prepare_mapping(self) -> dict[str, SourceMapping]:
218229 )
219230
220231return source_mappings
232+
233+
234+ class BaseStrictLogSourcesPlatformMappings (ABC ,BasePlatformMappings ):
235+ def get_source_mappings_by_ids (self ,source_mapping_ids :list [str ])-> list [SourceMapping ]:
236+ source_mappings = []
237+ for source_mapping_id in source_mapping_ids :
238+ if source_mapping_id == DEFAULT_MAPPING_NAME :
239+ continue
240+ if source_mapping := self .get_source_mapping (source_mapping_id ):
241+ source_mappings .append (source_mapping )
242+
243+ if not source_mappings :
244+ raise UnsupportedMappingsException (platform_name = self .details .name ,mappings = source_mapping_ids )
245+
246+ return source_mappings