airbyte-cdk 0.71.0__py3-none-any.whl → 0.72.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -602,6 +602,27 @@ definitions:
602
602
  $parameters:
603
603
  type: object
604
604
  additionalProperties: true
605
+ CustomSchemaLoader:
606
+ title: Custom Schema Loader
607
+ description: Schema Loader component whose behavior is derived from a custom code implementation of the connector.
608
+ type: object
609
+ additionalProperties: true
610
+ required:
611
+ - type
612
+ - class_name
613
+ properties:
614
+ type:
615
+ type: string
616
+ enum: [CustomSchemaLoader]
617
+ class_name:
618
+ title: Class Name
619
+ description: Fully-qualified name of the class that will be implementing the custom schema loader. The format is `source_<name>.<package>.<class_name>`.
620
+ type: string
621
+ examples:
622
+ - "source_railz.components.MyCustomSchemaLoader"
623
+ $parameters:
624
+ type: object
625
+ additionalProperties: true
605
626
  CustomTransformation:
606
627
  title: Custom Transformation
607
628
  description: Transformation component whose behavior is derived from a custom code implementation of the connector.
@@ -948,6 +969,7 @@ definitions:
948
969
  anyOf:
949
970
  - "$ref": "#/definitions/InlineSchemaLoader"
950
971
  - "$ref": "#/definitions/JsonFileSchemaLoader"
972
+ - "$ref": "#/definitions/CustomSchemaLoader"
951
973
  # TODO we have move the transformation to the RecordSelector level in the code but kept this here for
952
974
  # compatibility reason. We should eventually move this to align with the code.
953
975
  transformations:
@@ -208,6 +208,20 @@ class CustomPartitionRouter(BaseModel):
208
208
  parameters: Optional[Dict[str, Any]] = Field(None, alias='$parameters')
209
209
 
210
210
 
211
+ class CustomSchemaLoader(BaseModel):
212
+ class Config:
213
+ extra = Extra.allow
214
+
215
+ type: Literal['CustomSchemaLoader']
216
+ class_name: str = Field(
217
+ ...,
218
+ description='Fully-qualified name of the class that will be implementing the custom schema loader. The format is `source_<name>.<package>.<class_name>`.',
219
+ examples=['source_railz.components.MyCustomSchemaLoader'],
220
+ title='Class Name',
221
+ )
222
+ parameters: Optional[Dict[str, Any]] = Field(None, alias='$parameters')
223
+
224
+
211
225
  class CustomTransformation(BaseModel):
212
226
  class Config:
213
227
  extra = Extra.allow
@@ -1161,7 +1175,9 @@ class DeclarativeStream(BaseModel):
1161
1175
  primary_key: Optional[PrimaryKey] = Field(
1162
1176
  '', description='The primary key of the stream.', title='Primary Key'
1163
1177
  )
1164
- schema_loader: Optional[Union[InlineSchemaLoader, JsonFileSchemaLoader]] = Field(
1178
+ schema_loader: Optional[
1179
+ Union[InlineSchemaLoader, JsonFileSchemaLoader, CustomSchemaLoader]
1180
+ ] = Field(
1165
1181
  None,
1166
1182
  description='Component used to retrieve the schema for the current stream.',
1167
1183
  title='Schema Loader',
@@ -49,6 +49,7 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
49
49
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import CustomRecordFilter as CustomRecordFilterModel
50
50
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import CustomRequester as CustomRequesterModel
51
51
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import CustomRetriever as CustomRetrieverModel
52
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import CustomSchemaLoader as CustomSchemaLoader
52
53
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import CustomTransformation as CustomTransformationModel
53
54
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import DatetimeBasedCursor as DatetimeBasedCursorModel
54
55
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import DeclarativeStream as DeclarativeStreamModel
@@ -165,6 +166,7 @@ class ModelToComponentFactory:
165
166
  CustomRecordFilterModel: self.create_custom_component,
166
167
  CustomRequesterModel: self.create_custom_component,
167
168
  CustomRetrieverModel: self.create_custom_component,
169
+ CustomSchemaLoader: self.create_custom_component,
168
170
  CustomPaginationStrategyModel: self.create_custom_component,
169
171
  CustomPartitionRouterModel: self.create_custom_component,
170
172
  CustomTransformationModel: self.create_custom_component,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 0.71.0
3
+ Version: 0.72.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -38,7 +38,7 @@ airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py
38
38
  airbyte_cdk/sources/concurrent_source/thread_pool_manager.py,sha256=hFj5rsRtORurl3fwH8GC9h6Uz2wbzBFOLWUxJ-YJ7J8,4801
39
39
  airbyte_cdk/sources/declarative/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
40
40
  airbyte_cdk/sources/declarative/create_partial.py,sha256=sUJOwD8hBzW4pxw2XhYlSTMgl-WMc5WpP5Oq_jo3fHw,3371
41
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=An4UXx4e_GodeVd0bSQTv1G_Z1yjUcb7NbOmcC9-i9I,89327
41
+ airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=netrMub3A9k9wk5VWx8vqDWhfeLk_sviHHJ8NXnH2OA,90111
42
42
  airbyte_cdk/sources/declarative/declarative_source.py,sha256=U2As9PDKmcWDgbsWUo-RetJ9fxQOBlwntWZ0NOgs5Ac,1453
43
43
  airbyte_cdk/sources/declarative/declarative_stream.py,sha256=9nBjSBilzH2aeJsUEqOLyc4G2RRjlPZCapHDMv4jnOU,6691
44
44
  airbyte_cdk/sources/declarative/exceptions.py,sha256=kTPUA4I2NV4J6HDz-mKPGMrfuc592akJnOyYx38l_QM,176
@@ -80,14 +80,14 @@ airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=dyIM-bzh54
80
80
  airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=hOLBs9VaaE5xsT2wY2VxSrISE165bu_Egb83ordG4XI,5379
81
81
  airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=V6WGKJ9cXX1rjuM4bK3Cs9xEryMlkY2U3FMsSBhrgC8,3098
82
82
  airbyte_cdk/sources/declarative/models/__init__.py,sha256=EiYnzwCHZV7EYqMJqcy6xKSeHvTKZBsQndjbEwmiTW4,93
83
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=u6i4nYufXZe27bIED7uhsvfhghOMN4NdWoGLEeTjzwk,61032
83
+ airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=1a67m2fGAdBRf7rOzvk5SIluQHIWL4SPLnrjsnrnm_s,61574
84
84
  airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
85
85
  airbyte_cdk/sources/declarative/parsers/class_types_registry.py,sha256=5vOvMuyWlpALrOq2ehLxa7wO6tlFIlgUNtMYrMCKIjE,6092
86
86
  airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=y7_G5mM07zxT5YG975kdC2PAja-Uc83pYp8WrV3GNdo,522
87
87
  airbyte_cdk/sources/declarative/parsers/default_implementation_registry.py,sha256=W8BcK4KOg4ifNXgsdeIoV4oneHjXBKcPHEZHIC4r-hM,3801
88
88
  airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=i2yUdrdlPUHI0dSQX0zBT8WSg912SMiCF8qkQ8VvlA4,8287
89
89
  airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=6ukHx0bBrCJm9rek1l_MEfS3U_gdJcM4pJRyifJEOp0,6412
90
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=_jX1sPW5SA51nHoxpoVktC3jdO8PR4cGrQfZftcVSLo,59316
90
+ airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=1zI1Mk9k_3p_TMz6LsgV7U54CJ6etl88q8WOv4AZO-w,59499
91
91
  airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=27sOWhw2LBQs62HchURakHQ2M_mtnOatNgU6q8RUtpU,476
92
92
  airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py,sha256=L22D-up7W2HahZZo2dA-IbRSs7qJEahU6O6bU0eiIt8,4324
93
93
  airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py,sha256=cl-TQdu_m6_IF20gdD1jll0SpejIyMZHvyGXx2NafuI,1611
@@ -329,7 +329,7 @@ unit_tests/sources/declarative/interpolation/test_macros.py,sha256=vEZmHQ0KsfQUz
329
329
  unit_tests/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
330
330
  unit_tests/sources/declarative/parsers/test_manifest_component_transformer.py,sha256=egePHWYcXprfPtoHhiquWAXuJkDr-DB_RakKhdyaoHs,14316
331
331
  unit_tests/sources/declarative/parsers/test_manifest_reference_resolver.py,sha256=K3q9eyx-sJFQ8nGYjAgS7fxau4sX_FlNreEAjiCYOeE,5306
332
- unit_tests/sources/declarative/parsers/test_model_to_component_factory.py,sha256=WIUygDJvNGEIzNdlarkYymTTgRtiXlR6IOjwnsqlC3E,75683
332
+ unit_tests/sources/declarative/parsers/test_model_to_component_factory.py,sha256=cDlDoNutC6JMGdyvkYMteiHtVrpQ_cKnRE_yn6dWui0,76426
333
333
  unit_tests/sources/declarative/parsers/testing_components.py,sha256=_yUijmYRM-yYHPGDB2JsfEiOuVrgexGW9QwHf1xxNW8,1326
334
334
  unit_tests/sources/declarative/partition_routers/__init__.py,sha256=O8MZg4Bv_DghdRy9BoJCPIqdV75VtiUrhEkExQgb2nE,61
335
335
  unit_tests/sources/declarative/partition_routers/test_list_partition_router.py,sha256=WKdbAQCHfCVOyoAFM_kbHsbqAF_e5FX5Zvou5ARsJZ4,6572
@@ -459,8 +459,8 @@ unit_tests/utils/test_schema_inferrer.py,sha256=Z2jHBZ540wnYkylIdV_2xr75Vtwlxuyg
459
459
  unit_tests/utils/test_secret_utils.py,sha256=CdKK8A2-5XVxbXVtX22FK9dwwMeP5KNqDH6luWRXSNw,5256
460
460
  unit_tests/utils/test_stream_status_utils.py,sha256=Xr8MZ2HWgTVIyMbywDvuYkRaUF4RZLQOT8-JjvcfR24,2970
461
461
  unit_tests/utils/test_traced_exception.py,sha256=bDFP5zMBizFenz6V2WvEZTRCKGB5ijh3DBezjbfoYIs,4198
462
- airbyte_cdk-0.71.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
463
- airbyte_cdk-0.71.0.dist-info/METADATA,sha256=IEujsMxKiLNDhn0U2HOCIBvKGSrEZ0fx51DA8KAR9l8,11074
464
- airbyte_cdk-0.71.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
465
- airbyte_cdk-0.71.0.dist-info/top_level.txt,sha256=edvsDKTnE6sD2wfCUaeTfKf5gQIL6CPVMwVL2sWZzqo,51
466
- airbyte_cdk-0.71.0.dist-info/RECORD,,
462
+ airbyte_cdk-0.72.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
463
+ airbyte_cdk-0.72.0.dist-info/METADATA,sha256=lDN4hbkJHUsXxycTKKTDAgCzzo72JYBIzlCOZzuU0nM,11074
464
+ airbyte_cdk-0.72.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
465
+ airbyte_cdk-0.72.0.dist-info/top_level.txt,sha256=edvsDKTnE6sD2wfCUaeTfKf5gQIL6CPVMwVL2sWZzqo,51
466
+ airbyte_cdk-0.72.0.dist-info/RECORD,,
@@ -5,6 +5,7 @@
5
5
  # mypy: ignore-errors
6
6
 
7
7
  import datetime
8
+ from typing import Any, Mapping
8
9
 
9
10
  import pytest
10
11
  from airbyte_cdk.models import Level
@@ -27,6 +28,7 @@ from airbyte_cdk.sources.declarative.models import CheckStream as CheckStreamMod
27
28
  from airbyte_cdk.sources.declarative.models import CompositeErrorHandler as CompositeErrorHandlerModel
28
29
  from airbyte_cdk.sources.declarative.models import CustomErrorHandler as CustomErrorHandlerModel
29
30
  from airbyte_cdk.sources.declarative.models import CustomPartitionRouter as CustomPartitionRouterModel
31
+ from airbyte_cdk.sources.declarative.models import CustomSchemaLoader as CustomSchemaLoaderModel
30
32
  from airbyte_cdk.sources.declarative.models import DatetimeBasedCursor as DatetimeBasedCursorModel
31
33
  from airbyte_cdk.sources.declarative.models import DeclarativeStream as DeclarativeStreamModel
32
34
  from airbyte_cdk.sources.declarative.models import DefaultPaginator as DefaultPaginatorModel
@@ -66,6 +68,7 @@ from airbyte_cdk.sources.declarative.requesters.request_path import RequestPath
66
68
  from airbyte_cdk.sources.declarative.requesters.requester import HttpMethod
67
69
  from airbyte_cdk.sources.declarative.retrievers import SimpleRetriever, SimpleRetrieverTestReadDecorator
68
70
  from airbyte_cdk.sources.declarative.schema import JsonFileSchemaLoader
71
+ from airbyte_cdk.sources.declarative.schema.schema_loader import SchemaLoader
69
72
  from airbyte_cdk.sources.declarative.spec import Spec
70
73
  from airbyte_cdk.sources.declarative.stream_slicers import CartesianProductStreamSlicer
71
74
  from airbyte_cdk.sources.declarative.transformations import AddFields, RemoveFields
@@ -1820,3 +1823,19 @@ def test_create_offset_increment():
1820
1823
  assert strategy.page_size == expected_strategy.page_size
1821
1824
  assert strategy.inject_on_first_request == expected_strategy.inject_on_first_request
1822
1825
  assert strategy.config == input_config
1826
+
1827
+
1828
+ class MyCustomSchemaLoader(SchemaLoader):
1829
+ def get_json_schema(self) -> Mapping[str, Any]:
1830
+ """Returns a mapping describing the stream's schema"""
1831
+ return {}
1832
+
1833
+
1834
+ def test_create_custom_schema_loader():
1835
+
1836
+ definition = {
1837
+ "type": "CustomSchemaLoader",
1838
+ "class_name": "unit_tests.sources.declarative.parsers.test_model_to_component_factory.MyCustomSchemaLoader"
1839
+ }
1840
+ component = factory.create_component(CustomSchemaLoaderModel, definition, {})
1841
+ assert isinstance(component, MyCustomSchemaLoader)