airbyte-cdk 6.55.1__py3-none-any.whl → 6.56.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4186,6 +4186,46 @@ definitions:
4186
4186
  - type
4187
4187
  - stream_config
4188
4188
  - components_mapping
4189
+ StreamParametersDefinition:
4190
+ title: Stream Parameters Definition
4191
+ description: (This component is experimental. Use at your own risk.) Represents a stream parameters definition to set up dynamic streams from defined values in manifest.
4192
+ type: object
4193
+ required:
4194
+ - type
4195
+ - list_of_parameters_for_stream
4196
+ properties:
4197
+ type:
4198
+ type: string
4199
+ enum: [StreamParametersDefinition]
4200
+ list_of_parameters_for_stream:
4201
+ title: Stream Parameters
4202
+ description: A list of object of parameters for stream, each object in the list represents params for one stream.
4203
+ type: array
4204
+ items:
4205
+ type: object
4206
+ examples:
4207
+ - [{"name": "test stream", "$parameters": {"entity": "test entity"}, "primary_key": "test key"}]
4208
+ ParametrizedComponentsResolver:
4209
+ type: object
4210
+ title: Parametrized Components Resolver
4211
+ description: (This component is experimental. Use at your own risk.) Resolves and populates dynamic streams from defined parametrized values in manifest.
4212
+ properties:
4213
+ type:
4214
+ type: string
4215
+ enum: [ParametrizedComponentsResolver]
4216
+ stream_parameters:
4217
+ "$ref": "#/definitions/StreamParametersDefinition"
4218
+ components_mapping:
4219
+ type: array
4220
+ items:
4221
+ "$ref": "#/definitions/ComponentMappingDefinition"
4222
+ $parameters:
4223
+ type: object
4224
+ additionalProperties: true
4225
+ required:
4226
+ - type
4227
+ - stream_parameters
4228
+ - components_mapping
4189
4229
  DynamicDeclarativeStream:
4190
4230
  type: object
4191
4231
  description: (This component is experimental. Use at your own risk.) A component that described how will be created declarative streams based on stream template.
@@ -4212,6 +4252,7 @@ definitions:
4212
4252
  anyOf:
4213
4253
  - "$ref": "#/definitions/HttpComponentsResolver"
4214
4254
  - "$ref": "#/definitions/ConfigComponentsResolver"
4255
+ - "$ref": "#/definitions/ParametrizedComponentsResolver"
4215
4256
  required:
4216
4257
  - type
4217
4258
  - stream_template
@@ -1512,6 +1512,31 @@ class ConfigComponentsResolver(BaseModel):
1512
1512
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
1513
1513
 
1514
1514
 
1515
+ class StreamParametersDefinition(BaseModel):
1516
+ type: Literal["StreamParametersDefinition"]
1517
+ list_of_parameters_for_stream: List[Dict[str, Any]] = Field(
1518
+ ...,
1519
+ description="A list of object of parameters for stream, each object in the list represents params for one stream.",
1520
+ examples=[
1521
+ [
1522
+ {
1523
+ "name": "test stream",
1524
+ "$parameters": {"entity": "test entity"},
1525
+ "primary_key": "test key",
1526
+ }
1527
+ ]
1528
+ ],
1529
+ title="Stream Parameters",
1530
+ )
1531
+
1532
+
1533
+ class ParametrizedComponentsResolver(BaseModel):
1534
+ type: Literal["ParametrizedComponentsResolver"]
1535
+ stream_parameters: StreamParametersDefinition
1536
+ components_mapping: List[ComponentMappingDefinition]
1537
+ parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
1538
+
1539
+
1515
1540
  class RequestBodyPlainText(BaseModel):
1516
1541
  type: Literal["RequestBodyPlainText"]
1517
1542
  value: str
@@ -2943,7 +2968,9 @@ class DynamicDeclarativeStream(BaseModel):
2943
2968
  stream_template: Union[DeclarativeStream, StateDelegatingStream] = Field(
2944
2969
  ..., description="Reference to the stream template.", title="Stream Template"
2945
2970
  )
2946
- components_resolver: Union[HttpComponentsResolver, ConfigComponentsResolver] = Field(
2971
+ components_resolver: Union[
2972
+ HttpComponentsResolver, ConfigComponentsResolver, ParametrizedComponentsResolver
2973
+ ] = Field(
2947
2974
  ...,
2948
2975
  description="Component resolve and populates stream templates with components values.",
2949
2976
  title="Components Resolver",
@@ -351,6 +351,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
351
351
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
352
352
  PageIncrement as PageIncrementModel,
353
353
  )
354
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
355
+ ParametrizedComponentsResolver as ParametrizedComponentsResolverModel,
356
+ )
354
357
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
355
358
  ParentStreamConfig as ParentStreamConfigModel,
356
359
  )
@@ -504,7 +507,9 @@ from airbyte_cdk.sources.declarative.resolvers import (
504
507
  ComponentMappingDefinition,
505
508
  ConfigComponentsResolver,
506
509
  HttpComponentsResolver,
510
+ ParametrizedComponentsResolver,
507
511
  StreamConfig,
512
+ StreamParametersDefinition,
508
513
  )
509
514
  from airbyte_cdk.sources.declarative.retrievers import (
510
515
  AsyncRetriever,
@@ -738,6 +743,7 @@ class ModelToComponentFactory:
738
743
  AsyncRetrieverModel: self.create_async_retriever,
739
744
  HttpComponentsResolverModel: self.create_http_components_resolver,
740
745
  ConfigComponentsResolverModel: self.create_config_components_resolver,
746
+ ParametrizedComponentsResolverModel: self.create_parametrized_components_resolver,
741
747
  StreamConfigModel: self.create_stream_config,
742
748
  ComponentMappingDefinitionModel: self.create_components_mapping_definition,
743
749
  ZipfileDecoderModel: self.create_zipfile_decoder,
@@ -3861,6 +3867,29 @@ class ModelToComponentFactory:
3861
3867
  parameters=model.parameters or {},
3862
3868
  )
3863
3869
 
3870
+ def create_parametrized_components_resolver(
3871
+ self, model: ParametrizedComponentsResolverModel, config: Config
3872
+ ) -> ParametrizedComponentsResolver:
3873
+ stream_parameters = StreamParametersDefinition(
3874
+ list_of_parameters_for_stream=model.stream_parameters.list_of_parameters_for_stream
3875
+ )
3876
+ components_mapping = [
3877
+ self._create_component_from_model(
3878
+ model=components_mapping_definition_model,
3879
+ value_type=ModelToComponentFactory._json_schema_type_name_to_type(
3880
+ components_mapping_definition_model.value_type
3881
+ ),
3882
+ config=config,
3883
+ )
3884
+ for components_mapping_definition_model in model.components_mapping
3885
+ ]
3886
+ return ParametrizedComponentsResolver(
3887
+ stream_parameters=stream_parameters,
3888
+ config=config,
3889
+ components_mapping=components_mapping,
3890
+ parameters=model.parameters or {},
3891
+ )
3892
+
3864
3893
  _UNSUPPORTED_DECODER_ERROR = (
3865
3894
  "Specified decoder of {decoder_type} is not supported for pagination."
3866
3895
  "Please set as `JsonDecoder`, `XmlDecoder`, or a `CompositeRawDecoder` with an inner_parser of `JsonParser` or `GzipParser` instead."
@@ -12,6 +12,9 @@ from airbyte_cdk.sources.declarative.models import (
12
12
  from airbyte_cdk.sources.declarative.models import (
13
13
  HttpComponentsResolver as HttpComponentsResolverModel,
14
14
  )
15
+ from airbyte_cdk.sources.declarative.models import (
16
+ ParametrizedComponentsResolver as ParametrizedComponentsResolverModel,
17
+ )
15
18
  from airbyte_cdk.sources.declarative.resolvers.components_resolver import (
16
19
  ComponentMappingDefinition,
17
20
  ComponentsResolver,
@@ -24,10 +27,15 @@ from airbyte_cdk.sources.declarative.resolvers.config_components_resolver import
24
27
  from airbyte_cdk.sources.declarative.resolvers.http_components_resolver import (
25
28
  HttpComponentsResolver,
26
29
  )
30
+ from airbyte_cdk.sources.declarative.resolvers.parametrized_components_resolver import (
31
+ ParametrizedComponentsResolver,
32
+ StreamParametersDefinition,
33
+ )
27
34
 
28
35
  COMPONENTS_RESOLVER_TYPE_MAPPING: Mapping[str, type[BaseModel]] = {
29
36
  "HttpComponentsResolver": HttpComponentsResolverModel,
30
37
  "ConfigComponentsResolver": ConfigComponentsResolverModel,
38
+ "ParametrizedComponentsResolver": ParametrizedComponentsResolverModel,
31
39
  }
32
40
 
33
41
  __all__ = [
@@ -38,4 +46,6 @@ __all__ = [
38
46
  "StreamConfig",
39
47
  "ConfigComponentsResolver",
40
48
  "COMPONENTS_RESOLVER_TYPE_MAPPING",
49
+ "ParametrizedComponentsResolver",
50
+ "StreamParametersDefinition",
41
51
  ]
@@ -0,0 +1,125 @@
1
+ #
2
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ from copy import deepcopy
6
+ from dataclasses import InitVar, dataclass, field
7
+ from typing import Any, Dict, Iterable, List, Mapping
8
+
9
+ import dpath
10
+ import yaml
11
+ from typing_extensions import deprecated
12
+ from yaml.parser import ParserError
13
+
14
+ from airbyte_cdk.sources.declarative.interpolation import InterpolatedString
15
+ from airbyte_cdk.sources.declarative.resolvers.components_resolver import (
16
+ ComponentMappingDefinition,
17
+ ComponentsResolver,
18
+ ResolvedComponentMappingDefinition,
19
+ )
20
+ from airbyte_cdk.sources.source import ExperimentalClassWarning
21
+ from airbyte_cdk.sources.types import Config
22
+
23
+
24
+ @deprecated("This class is experimental. Use at your own risk.", category=ExperimentalClassWarning)
25
+ @dataclass
26
+ class StreamParametersDefinition:
27
+ """
28
+ Represents a stream parameters definition to set up dynamic streams from defined values in manifest.
29
+ """
30
+
31
+ list_of_parameters_for_stream: List[Dict[str, Any]]
32
+
33
+
34
+ @deprecated("This class is experimental. Use at your own risk.", category=ExperimentalClassWarning)
35
+ @dataclass
36
+ class ParametrizedComponentsResolver(ComponentsResolver):
37
+ """
38
+ Resolves and populates dynamic streams from defined parametrized values in manifest.
39
+ """
40
+
41
+ stream_parameters: StreamParametersDefinition
42
+ config: Config
43
+ components_mapping: List[ComponentMappingDefinition]
44
+ parameters: InitVar[Mapping[str, Any]]
45
+ _resolved_components: List[ResolvedComponentMappingDefinition] = field(
46
+ init=False, repr=False, default_factory=list
47
+ )
48
+
49
+ def __post_init__(self, parameters: Mapping[str, Any]) -> None:
50
+ """
51
+ Initializes and parses component mappings, converting them to resolved definitions.
52
+
53
+ Args:
54
+ parameters (Mapping[str, Any]): Parameters for interpolation.
55
+ """
56
+
57
+ for component_mapping in self.components_mapping:
58
+ if isinstance(component_mapping.value, (str, InterpolatedString)):
59
+ interpolated_value = (
60
+ InterpolatedString.create(component_mapping.value, parameters=parameters)
61
+ if isinstance(component_mapping.value, str)
62
+ else component_mapping.value
63
+ )
64
+
65
+ field_path = [
66
+ InterpolatedString.create(path, parameters=parameters)
67
+ for path in component_mapping.field_path
68
+ ]
69
+
70
+ self._resolved_components.append(
71
+ ResolvedComponentMappingDefinition(
72
+ field_path=field_path,
73
+ value=interpolated_value,
74
+ value_type=component_mapping.value_type,
75
+ create_or_update=component_mapping.create_or_update,
76
+ parameters=parameters,
77
+ )
78
+ )
79
+ else:
80
+ raise ValueError(
81
+ f"Expected a string or InterpolatedString for value in mapping: {component_mapping}"
82
+ )
83
+
84
+ def resolve_components(
85
+ self, stream_template_config: Dict[str, Any]
86
+ ) -> Iterable[Dict[str, Any]]:
87
+ kwargs = {"stream_template_config": stream_template_config}
88
+
89
+ for components_values in self.stream_parameters.list_of_parameters_for_stream:
90
+ updated_config = deepcopy(stream_template_config)
91
+ kwargs["components_values"] = components_values # type: ignore[assignment] # component_values will always be of type Mapping[str, Any]
92
+ for resolved_component in self._resolved_components:
93
+ valid_types = (
94
+ (resolved_component.value_type,) if resolved_component.value_type else None
95
+ )
96
+ value = resolved_component.value.eval(
97
+ self.config, valid_types=valid_types, **kwargs
98
+ )
99
+ path = [path.eval(self.config, **kwargs) for path in resolved_component.field_path]
100
+ parsed_value = self._parse_yaml_if_possible(value)
101
+ # https://github.com/dpath-maintainers/dpath-python/blob/master/dpath/__init__.py#L136
102
+ # dpath.set returns the number of changed elements, 0 when no elements changed
103
+ updated = dpath.set(updated_config, path, parsed_value)
104
+
105
+ if parsed_value and not updated and resolved_component.create_or_update:
106
+ dpath.new(updated_config, path, parsed_value)
107
+
108
+ yield updated_config
109
+
110
+ @staticmethod
111
+ def _parse_yaml_if_possible(value: Any) -> Any:
112
+ """
113
+ Try to turn value into a Python object by YAML-parsing it.
114
+
115
+ * If value is a `str` and can be parsed by `yaml.safe_load`,
116
+ return the parsed result.
117
+ * If parsing fails (`yaml.parser.ParserError`) – or value is not
118
+ a string at all – return the original value unchanged.
119
+ """
120
+ if isinstance(value, str):
121
+ try:
122
+ return yaml.safe_load(value)
123
+ except ParserError: # "{{ record[0] in ['cohortActiveUsers'] }}" # not valid YAML
124
+ return value
125
+ return value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.55.1
3
+ Version: 6.56.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -89,7 +89,7 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=rQz9gXp3
89
89
  airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
90
90
  airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
91
91
  airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
92
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=ES1gwuWHAXC9z9Dk8i0kNGK-2omTtjexiNp0iwV54tE,178751
92
+ airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=JwWxM_QAIC7jAOYQMpo9fWa1aULtGhMn9Tg0bntoM58,180321
93
93
  airbyte_cdk/sources/declarative/declarative_source.py,sha256=qmyMnnet92eGc3C22yBtpvD5UZjqdhsAafP_zxI5wp8,1814
94
94
  airbyte_cdk/sources/declarative/declarative_stream.py,sha256=dCRlddBUSaJmBNBz1pSO1r2rTw8AP5d2_vlmIeGs2gg,10767
95
95
  airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
@@ -133,14 +133,14 @@ airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migrati
133
133
  airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
134
134
  airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
135
135
  airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py,sha256=Imnj3yef0aqRdLfaUxkIYISUb8YkiPrRH_wBd-x8HjM,5999
136
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=xfmKKdsnPeP9hV_cjBfZEGMxdU0HJDuMwoQGrmTPYMo,126543
136
+ airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=jipvV9xV_BB4-IGjdUolbY3IoaB0VPubWoCtnr1Ick0,127459
137
137
  airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
138
138
  airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
139
139
  airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=wnRUP0Xeru9Rbu5OexXSDN9QWDo8YU4tT9M2LDVOgGA,802
140
140
  airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=2UdpCz3yi7ISZTyqkQXSSy3dMxeyOWqV7OlAS5b9GVg,11568
141
141
  airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py,sha256=laBy7ebjA-PiNwc-50U4FHvMqS_mmHvnabxgFs4CjGw,17069
142
142
  airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=pJmg78vqE5VfUrF_KJnWjucQ4k9IWFULeAxHCowrHXE,6806
143
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=IaVbbuJv7DvheUaW3iBSv1qChpU8Vm1k7ZF_uESZYFU,175315
143
+ airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=Sr8LrlLl61eQTsJ5b8eWt3ESCPDEpJRd6DXS4P53hVE,176635
144
144
  airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
145
145
  airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
146
146
  airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
@@ -193,10 +193,11 @@ airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_
193
193
  airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py,sha256=8YRiDzjYvqJ-aMmKFcjqzv_-e8OZ5QG_TbpZ-nuCu6s,2590
194
194
  airbyte_cdk/sources/declarative/requesters/request_path.py,sha256=S3MeFvcaQrMbOkSY2W2VbXLNomqt_3eXqVd9ZhgNwUs,299
195
195
  airbyte_cdk/sources/declarative/requesters/requester.py,sha256=T6tMx_Bx4iT-0YVjY7IzgRil-gaIu9n01b1iwpTh3Ek,5516
196
- airbyte_cdk/sources/declarative/resolvers/__init__.py,sha256=NiDcz5qi8HPsfX94MUmnX0Rgs_kQXGvucOmJjNWlxKQ,1207
196
+ airbyte_cdk/sources/declarative/resolvers/__init__.py,sha256=xVhOWLQW0wFBTAtRYu3GdFebPqKCDSt1uoP2TiBGrvs,1643
197
197
  airbyte_cdk/sources/declarative/resolvers/components_resolver.py,sha256=oJIpy66ep8n-QOc8GwpllApTRcl4QtQhkTw5fWWra2w,2026
198
198
  airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=sD3N7nmqDjLsau8P2DE7DYOHdFTYjC_2nIB6454BNYk,7556
199
199
  airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py,sha256=AiojNs8wItJFrENZBFUaDvau3sgwudO6Wkra36upSPo,4639
200
+ airbyte_cdk/sources/declarative/resolvers/parametrized_components_resolver.py,sha256=BUmvbsMeIGusZSCd80NiTFcwcosq-uhXHGNheAFs-10,5147
200
201
  airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=LQQspOQS9oyOx9cGnRIz1mq-8DZCBysyDJDPqjy1HvM,449
201
202
  airbyte_cdk/sources/declarative/retrievers/async_retriever.py,sha256=6oZtnCHm9NdDvjTSrVwPQOXGSdETSIR7eWH2vFjM7jI,4855
202
203
  airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py,sha256=ovs0oZGPEEw-V4asqr0D1Xty2u7tR8ADhRuHNgXGuWQ,490
@@ -422,9 +423,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
422
423
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
423
424
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
424
425
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
425
- airbyte_cdk-6.55.1.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
426
- airbyte_cdk-6.55.1.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
427
- airbyte_cdk-6.55.1.dist-info/METADATA,sha256=l7jKuCXU7nwels800F-i0GX3S85Fjw31cHtoKadLd7Y,6388
428
- airbyte_cdk-6.55.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
429
- airbyte_cdk-6.55.1.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
430
- airbyte_cdk-6.55.1.dist-info/RECORD,,
426
+ airbyte_cdk-6.56.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
427
+ airbyte_cdk-6.56.0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
428
+ airbyte_cdk-6.56.0.dist-info/METADATA,sha256=4S60a_h2kt3cWcAJ58pJNfcC19bEBNYrIohASoS0Lio,6388
429
+ airbyte_cdk-6.56.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
430
+ airbyte_cdk-6.56.0.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
431
+ airbyte_cdk-6.56.0.dist-info/RECORD,,