|
191 | 191 | from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
192 | 192 | DpathExtractor as DpathExtractorModel,
|
193 | 193 | )
|
| 194 | +from airbyte_cdk.sources.declarative.models.declarative_component_schema import ( |
| 195 | + DynamicSchemaLoader as DynamicSchemaLoaderModel, |
| 196 | +) |
194 | 197 | from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
195 | 198 | ExponentialBackoffStrategy as ExponentialBackoffStrategyModel,
|
196 | 199 | )
|
|
281 | 284 | from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
282 | 285 | ResponseToFileExtractor as ResponseToFileExtractorModel,
|
283 | 286 | )
|
| 287 | +from airbyte_cdk.sources.declarative.models.declarative_component_schema import ( |
| 288 | + SchemaTypeIdentifier as SchemaTypeIdentifierModel, |
| 289 | +) |
284 | 290 | from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
285 | 291 | SelectiveAuthenticator as SelectiveAuthenticatorModel,
|
286 | 292 | )
|
|
297 | 303 | from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
298 | 304 | SubstreamPartitionRouter as SubstreamPartitionRouterModel,
|
299 | 305 | )
|
| 306 | +from airbyte_cdk.sources.declarative.models.declarative_component_schema import ( |
| 307 | + TypesMap as TypesMapModel, |
| 308 | +) |
300 | 309 | from airbyte_cdk.sources.declarative.models.declarative_component_schema import ValueType
|
301 | 310 | from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
302 | 311 | WaitTimeFromHeader as WaitTimeFromHeaderModel,
|
|
364 | 373 | )
|
365 | 374 | from airbyte_cdk.sources.declarative.schema import (
|
366 | 375 | DefaultSchemaLoader,
|
| 376 | + DynamicSchemaLoader, |
367 | 377 | InlineSchemaLoader,
|
368 | 378 | JsonFileSchemaLoader,
|
| 379 | + SchemaTypeIdentifier, |
| 380 | + TypesMap, |
369 | 381 | )
|
370 | 382 | from airbyte_cdk.sources.declarative.spec import Spec
|
371 | 383 | from airbyte_cdk.sources.declarative.stream_slicers import StreamSlicer
|
@@ -463,6 +475,9 @@ def _init_mappings(self) -> None:
|
463 | 475 | IterableDecoderModel: self.create_iterable_decoder,
|
464 | 476 | XmlDecoderModel: self.create_xml_decoder,
|
465 | 477 | JsonFileSchemaLoaderModel: self.create_json_file_schema_loader,
|
| 478 | + DynamicSchemaLoaderModel: self.create_dynamic_schema_loader, |
| 479 | + SchemaTypeIdentifierModel: self.create_schema_type_identifier, |
| 480 | + TypesMapModel: self.create_types_map, |
466 | 481 | JwtAuthenticatorModel: self.create_jwt_authenticator,
|
467 | 482 | LegacyToPerPartitionStateMigrationModel: self.create_legacy_to_per_partition_state_migration,
|
468 | 483 | ListPartitionRouterModel: self.create_list_partition_router,
|
@@ -1584,6 +1599,63 @@ def create_inline_schema_loader(
|
1584 | 1599 | ) -> InlineSchemaLoader:
|
1585 | 1600 | return InlineSchemaLoader(schema=model.schema_ or {}, parameters={})
|
1586 | 1601 |
|
| 1602 | + @staticmethod |
| 1603 | + def create_types_map(model: TypesMapModel, **kwargs: Any) -> TypesMap: |
| 1604 | + return TypesMap(target_type=model.target_type, current_type=model.current_type) |
| 1605 | + |
| 1606 | + def create_schema_type_identifier( |
| 1607 | + self, model: SchemaTypeIdentifierModel, config: Config, **kwargs: Any |
| 1608 | + ) -> SchemaTypeIdentifier: |
| 1609 | + types_mapping = [] |
| 1610 | + if model.types_mapping: |
| 1611 | + types_mapping.extend( |
| 1612 | + [ |
| 1613 | + self._create_component_from_model(types_map, config=config) |
| 1614 | + for types_map in model.types_mapping |
| 1615 | + ] |
| 1616 | + ) |
| 1617 | + model_schema_pointer: List[Union[InterpolatedString, str]] = ( |
| 1618 | + [x for x in model.schema_pointer] if model.schema_pointer else [] |
| 1619 | + ) |
| 1620 | + model_key_pointer: List[Union[InterpolatedString, str]] = [x for x in model.key_pointer] |
| 1621 | + model_type_pointer: Optional[List[Union[InterpolatedString, str]]] = ( |
| 1622 | + [x for x in model.type_pointer] if model.type_pointer else None |
| 1623 | + ) |
| 1624 | + |
| 1625 | + return SchemaTypeIdentifier( |
| 1626 | + schema_pointer=model_schema_pointer, |
| 1627 | + key_pointer=model_key_pointer, |
| 1628 | + type_pointer=model_type_pointer, |
| 1629 | + types_mapping=types_mapping, |
| 1630 | + parameters=model.parameters or {}, |
| 1631 | + ) |
| 1632 | + |
| 1633 | + def create_dynamic_schema_loader( |
| 1634 | + self, model: DynamicSchemaLoaderModel, config: Config, **kwargs: Any |
| 1635 | + ) -> DynamicSchemaLoader: |
| 1636 | + stream_slicer = self._build_stream_slicer_from_partition_router(model.retriever, config) |
| 1637 | + combined_slicers = self._build_resumable_cursor_from_paginator( |
| 1638 | + model.retriever, stream_slicer |
| 1639 | + ) |
| 1640 | + |
| 1641 | + retriever = self._create_component_from_model( |
| 1642 | + model=model.retriever, |
| 1643 | + config=config, |
| 1644 | + name="", |
| 1645 | + primary_key=None, |
| 1646 | + stream_slicer=combined_slicers, |
| 1647 | + transformations=[], |
| 1648 | + ) |
| 1649 | + schema_type_identifier = self._create_component_from_model( |
| 1650 | + model.schema_type_identifier, config=config, parameters=model.parameters or {} |
| 1651 | + ) |
| 1652 | + return DynamicSchemaLoader( |
| 1653 | + retriever=retriever, |
| 1654 | + config=config, |
| 1655 | + schema_type_identifier=schema_type_identifier, |
| 1656 | + parameters=model.parameters or {}, |
| 1657 | + ) |
| 1658 | + |
1587 | 1659 | @staticmethod
|
1588 | 1660 | def create_json_decoder(model: JsonDecoderModel, config: Config, **kwargs: Any) -> JsonDecoder:
|
1589 | 1661 | return JsonDecoder(parameters={})
|
|
0 commit comments