airbyte-cdk 6.48.0__py3-none-any.whl → 6.48.2__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.
- airbyte_cdk/connector_builder/connector_builder_handler.py +11 -0
- airbyte_cdk/connector_builder/test_reader/reader.py +11 -0
- airbyte_cdk/manifest_migrations/README.md +73 -0
- airbyte_cdk/manifest_migrations/__init__.py +3 -0
- airbyte_cdk/manifest_migrations/exceptions.py +12 -0
- airbyte_cdk/manifest_migrations/manifest_migration.py +134 -0
- airbyte_cdk/manifest_migrations/migration_handler.py +163 -0
- airbyte_cdk/manifest_migrations/migrations/__init__.py +4 -0
- airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py +57 -0
- airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py +51 -0
- airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py +41 -0
- airbyte_cdk/manifest_migrations/migrations/registry.yaml +22 -0
- airbyte_cdk/manifest_migrations/migrations_registry.py +76 -0
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml +80 -5
- airbyte_cdk/sources/declarative/declarative_source.py +10 -1
- airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +1 -1
- airbyte_cdk/sources/declarative/manifest_declarative_source.py +32 -7
- airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py +144 -0
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +54 -5
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +66 -15
- airbyte_cdk/sources/declarative/requesters/http_requester.py +62 -17
- airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +24 -2
- airbyte_cdk/sources/declarative/requesters/requester.py +12 -0
- {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/METADATA +1 -1
- {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/RECORD +29 -17
- {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/entry_points.txt +0 -0
@@ -27,6 +27,9 @@ from typing import (
|
|
27
27
|
from isodate import parse_duration
|
28
28
|
from pydantic.v1 import BaseModel
|
29
29
|
|
30
|
+
from airbyte_cdk.connector_builder.models import (
|
31
|
+
LogMessage as ConnectorBuilderLogMessage,
|
32
|
+
)
|
30
33
|
from airbyte_cdk.models import FailureType, Level
|
31
34
|
from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
|
32
35
|
from airbyte_cdk.sources.declarative.async_job.job_orchestrator import AsyncJobOrchestrator
|
@@ -107,6 +110,10 @@ from airbyte_cdk.sources.declarative.migrations.legacy_to_per_partition_state_mi
|
|
107
110
|
from airbyte_cdk.sources.declarative.models import (
|
108
111
|
CustomStateMigration,
|
109
112
|
)
|
113
|
+
from airbyte_cdk.sources.declarative.models.base_model_with_deprecations import (
|
114
|
+
DEPRECATION_LOGS_TAG,
|
115
|
+
BaseModelWithDeprecations,
|
116
|
+
)
|
110
117
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
111
118
|
AddedFieldDefinition as AddedFieldDefinitionModel,
|
112
119
|
)
|
@@ -593,6 +600,8 @@ class ModelToComponentFactory:
|
|
593
600
|
self._connector_state_manager = connector_state_manager or ConnectorStateManager()
|
594
601
|
self._api_budget: Optional[Union[APIBudget, HttpAPIBudget]] = None
|
595
602
|
self._job_tracker: JobTracker = JobTracker(max_concurrent_async_job_count or 1)
|
603
|
+
# placeholder for deprecation warnings
|
604
|
+
self._collected_deprecation_logs: List[ConnectorBuilderLogMessage] = []
|
596
605
|
|
597
606
|
def _init_mappings(self) -> None:
|
598
607
|
self.PYDANTIC_MODEL_TO_CONSTRUCTOR: Mapping[Type[BaseModel], Callable[..., Any]] = {
|
@@ -740,8 +749,34 @@ class ModelToComponentFactory:
|
|
740
749
|
component_constructor = self.PYDANTIC_MODEL_TO_CONSTRUCTOR.get(model.__class__)
|
741
750
|
if not component_constructor:
|
742
751
|
raise ValueError(f"Could not find constructor for {model.__class__}")
|
752
|
+
|
753
|
+
# collect deprecation warnings for supported models.
|
754
|
+
if isinstance(model, BaseModelWithDeprecations):
|
755
|
+
self._collect_model_deprecations(model)
|
756
|
+
|
743
757
|
return component_constructor(model=model, config=config, **kwargs)
|
744
758
|
|
759
|
+
def get_model_deprecations(self) -> List[ConnectorBuilderLogMessage]:
|
760
|
+
"""
|
761
|
+
Returns the deprecation warnings that were collected during the creation of components.
|
762
|
+
"""
|
763
|
+
return self._collected_deprecation_logs
|
764
|
+
|
765
|
+
def _collect_model_deprecations(self, model: BaseModelWithDeprecations) -> None:
|
766
|
+
"""
|
767
|
+
Collects deprecation logs from the given model and appends any new logs to the internal collection.
|
768
|
+
|
769
|
+
This method checks if the provided model has deprecation logs (identified by the presence of the DEPRECATION_LOGS_TAG attribute and a non-None `_deprecation_logs` property). It iterates through each deprecation log in the model and appends it to the `_collected_deprecation_logs` list if it has not already been collected, ensuring that duplicate logs are avoided.
|
770
|
+
|
771
|
+
Args:
|
772
|
+
model (BaseModelWithDeprecations): The model instance from which to collect deprecation logs.
|
773
|
+
"""
|
774
|
+
if hasattr(model, DEPRECATION_LOGS_TAG) and model._deprecation_logs is not None:
|
775
|
+
for log in model._deprecation_logs:
|
776
|
+
# avoid duplicates for deprecation logs observed.
|
777
|
+
if log not in self._collected_deprecation_logs:
|
778
|
+
self._collected_deprecation_logs.append(log)
|
779
|
+
|
745
780
|
@staticmethod
|
746
781
|
def create_added_field_definition(
|
747
782
|
model: AddedFieldDefinitionModel, config: Config, **kwargs: Any
|
@@ -2180,7 +2215,7 @@ class ModelToComponentFactory:
|
|
2180
2215
|
self._create_component_from_model(
|
2181
2216
|
model=model.authenticator,
|
2182
2217
|
config=config,
|
2183
|
-
url_base=model.url_base,
|
2218
|
+
url_base=model.url or model.url_base,
|
2184
2219
|
name=name,
|
2185
2220
|
decoder=decoder,
|
2186
2221
|
)
|
@@ -2210,6 +2245,7 @@ class ModelToComponentFactory:
|
|
2210
2245
|
request_parameters = model.request_parameters
|
2211
2246
|
|
2212
2247
|
request_options_provider = InterpolatedRequestOptionsProvider(
|
2248
|
+
request_body=model.request_body,
|
2213
2249
|
request_body_data=model.request_body_data,
|
2214
2250
|
request_body_json=model.request_body_json,
|
2215
2251
|
request_headers=model.request_headers,
|
@@ -2226,6 +2262,7 @@ class ModelToComponentFactory:
|
|
2226
2262
|
|
2227
2263
|
return HttpRequester(
|
2228
2264
|
name=name,
|
2265
|
+
url=model.url,
|
2229
2266
|
url_base=model.url_base,
|
2230
2267
|
path=model.path,
|
2231
2268
|
authenticator=authenticator,
|
@@ -2833,13 +2870,9 @@ class ModelToComponentFactory:
|
|
2833
2870
|
else None
|
2834
2871
|
)
|
2835
2872
|
|
2836
|
-
|
2837
|
-
|
2838
|
-
|
2839
|
-
|
2840
|
-
assert model.transform_before_filtering is not None # for mypy
|
2841
|
-
|
2842
|
-
transform_before_filtering = model.transform_before_filtering
|
2873
|
+
transform_before_filtering = (
|
2874
|
+
False if model.transform_before_filtering is None else model.transform_before_filtering
|
2875
|
+
)
|
2843
2876
|
if client_side_incremental_sync:
|
2844
2877
|
record_filter = ClientSideIncrementalRecordFilterDecorator(
|
2845
2878
|
config=config,
|
@@ -2849,7 +2882,11 @@ class ModelToComponentFactory:
|
|
2849
2882
|
else None,
|
2850
2883
|
**client_side_incremental_sync,
|
2851
2884
|
)
|
2852
|
-
transform_before_filtering =
|
2885
|
+
transform_before_filtering = (
|
2886
|
+
True
|
2887
|
+
if model.transform_before_filtering is None
|
2888
|
+
else model.transform_before_filtering
|
2889
|
+
)
|
2853
2890
|
|
2854
2891
|
if model.schema_normalization is None:
|
2855
2892
|
# default to no schema normalization if not set
|
@@ -2934,6 +2971,25 @@ class ModelToComponentFactory:
|
|
2934
2971
|
use_cache: Optional[bool] = None,
|
2935
2972
|
**kwargs: Any,
|
2936
2973
|
) -> SimpleRetriever:
|
2974
|
+
def _get_url() -> str:
|
2975
|
+
"""
|
2976
|
+
Closure to get the URL from the requester. This is used to get the URL in the case of a lazy retriever.
|
2977
|
+
This is needed because the URL is not set until the requester is created.
|
2978
|
+
"""
|
2979
|
+
|
2980
|
+
_url = (
|
2981
|
+
model.requester.url
|
2982
|
+
if hasattr(model.requester, "url") and model.requester.url is not None
|
2983
|
+
else requester.get_url()
|
2984
|
+
)
|
2985
|
+
_url_base = (
|
2986
|
+
model.requester.url_base
|
2987
|
+
if hasattr(model.requester, "url_base") and model.requester.url_base is not None
|
2988
|
+
else requester.get_url_base()
|
2989
|
+
)
|
2990
|
+
|
2991
|
+
return _url or _url_base
|
2992
|
+
|
2937
2993
|
decoder = (
|
2938
2994
|
self._create_component_from_model(model=model.decoder, config=config)
|
2939
2995
|
if model.decoder
|
@@ -3001,11 +3057,6 @@ class ModelToComponentFactory:
|
|
3001
3057
|
use_cache=use_cache,
|
3002
3058
|
config=config,
|
3003
3059
|
)
|
3004
|
-
url_base = (
|
3005
|
-
model.requester.url_base
|
3006
|
-
if hasattr(model.requester, "url_base")
|
3007
|
-
else requester.get_url_base()
|
3008
|
-
)
|
3009
3060
|
|
3010
3061
|
# Define cursor only if per partition or common incremental support is needed
|
3011
3062
|
cursor = stream_slicer if isinstance(stream_slicer, DeclarativeCursor) else None
|
@@ -3029,7 +3080,7 @@ class ModelToComponentFactory:
|
|
3029
3080
|
self._create_component_from_model(
|
3030
3081
|
model=model.paginator,
|
3031
3082
|
config=config,
|
3032
|
-
url_base=
|
3083
|
+
url_base=_get_url(),
|
3033
3084
|
extractor_model=model.record_selector.extractor,
|
3034
3085
|
decoder=decoder,
|
3035
3086
|
cursor_used_for_stop_condition=cursor_used_for_stop_condition,
|
@@ -3,7 +3,6 @@
|
|
3
3
|
#
|
4
4
|
|
5
5
|
import logging
|
6
|
-
import os
|
7
6
|
from dataclasses import InitVar, dataclass, field
|
8
7
|
from typing import Any, Callable, Mapping, MutableMapping, Optional, Union
|
9
8
|
from urllib.parse import urljoin
|
@@ -53,10 +52,11 @@ class HttpRequester(Requester):
|
|
53
52
|
"""
|
54
53
|
|
55
54
|
name: str
|
56
|
-
url_base: Union[InterpolatedString, str]
|
57
55
|
config: Config
|
58
56
|
parameters: InitVar[Mapping[str, Any]]
|
59
57
|
|
58
|
+
url: Optional[Union[InterpolatedString, str]] = None
|
59
|
+
url_base: Optional[Union[InterpolatedString, str]] = None
|
60
60
|
path: Optional[Union[InterpolatedString, str]] = None
|
61
61
|
authenticator: Optional[DeclarativeAuthenticator] = None
|
62
62
|
http_method: Union[str, HttpMethod] = HttpMethod.GET
|
@@ -71,7 +71,14 @@ class HttpRequester(Requester):
|
|
71
71
|
decoder: Decoder = field(default_factory=lambda: JsonDecoder(parameters={}))
|
72
72
|
|
73
73
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
74
|
-
self.
|
74
|
+
self._url = InterpolatedString.create(
|
75
|
+
self.url if self.url else EmptyString, parameters=parameters
|
76
|
+
)
|
77
|
+
# deprecated
|
78
|
+
self._url_base = InterpolatedString.create(
|
79
|
+
self.url_base if self.url_base else EmptyString, parameters=parameters
|
80
|
+
)
|
81
|
+
# deprecated
|
75
82
|
self._path = InterpolatedString.create(
|
76
83
|
self.path if self.path else EmptyString, parameters=parameters
|
77
84
|
)
|
@@ -120,6 +127,51 @@ class HttpRequester(Requester):
|
|
120
127
|
def get_authenticator(self) -> DeclarativeAuthenticator:
|
121
128
|
return self._authenticator
|
122
129
|
|
130
|
+
def get_url(
|
131
|
+
self,
|
132
|
+
*,
|
133
|
+
stream_state: Optional[StreamState] = None,
|
134
|
+
stream_slice: Optional[StreamSlice] = None,
|
135
|
+
next_page_token: Optional[Mapping[str, Any]] = None,
|
136
|
+
) -> str:
|
137
|
+
interpolation_context = get_interpolation_context(
|
138
|
+
stream_state=stream_state,
|
139
|
+
stream_slice=stream_slice,
|
140
|
+
next_page_token=next_page_token,
|
141
|
+
)
|
142
|
+
|
143
|
+
return str(self._url.eval(self.config, **interpolation_context))
|
144
|
+
|
145
|
+
def _get_url(
|
146
|
+
self,
|
147
|
+
*,
|
148
|
+
path: Optional[str] = None,
|
149
|
+
stream_state: Optional[StreamState] = None,
|
150
|
+
stream_slice: Optional[StreamSlice] = None,
|
151
|
+
next_page_token: Optional[Mapping[str, Any]] = None,
|
152
|
+
) -> str:
|
153
|
+
url = self.get_url(
|
154
|
+
stream_state=stream_state,
|
155
|
+
stream_slice=stream_slice,
|
156
|
+
next_page_token=next_page_token,
|
157
|
+
)
|
158
|
+
|
159
|
+
url_base = self.get_url_base(
|
160
|
+
stream_state=stream_state,
|
161
|
+
stream_slice=stream_slice,
|
162
|
+
next_page_token=next_page_token,
|
163
|
+
)
|
164
|
+
|
165
|
+
path = path or self.get_path(
|
166
|
+
stream_state=stream_state,
|
167
|
+
stream_slice=stream_slice,
|
168
|
+
next_page_token=next_page_token,
|
169
|
+
)
|
170
|
+
|
171
|
+
full_url = self._join_url(url_base, path) if url_base else url + path if path else url
|
172
|
+
|
173
|
+
return full_url
|
174
|
+
|
123
175
|
def get_url_base(
|
124
176
|
self,
|
125
177
|
*,
|
@@ -349,7 +401,7 @@ class HttpRequester(Requester):
|
|
349
401
|
return options
|
350
402
|
|
351
403
|
@classmethod
|
352
|
-
def _join_url(cls, url_base: str, path: str) -> str:
|
404
|
+
def _join_url(cls, url_base: str, path: Optional[str] = None) -> str:
|
353
405
|
"""
|
354
406
|
Joins a base URL with a given path and returns the resulting URL with any trailing slash removed.
|
355
407
|
|
@@ -358,7 +410,7 @@ class HttpRequester(Requester):
|
|
358
410
|
|
359
411
|
Args:
|
360
412
|
url_base (str): The base URL to which the path will be appended.
|
361
|
-
path (str): The path to join with the base URL.
|
413
|
+
path (Optional[str]): The path to join with the base URL.
|
362
414
|
|
363
415
|
Returns:
|
364
416
|
str: The resulting joined URL.
|
@@ -399,18 +451,11 @@ class HttpRequester(Requester):
|
|
399
451
|
) -> Optional[requests.Response]:
|
400
452
|
request, response = self._http_client.send_request(
|
401
453
|
http_method=self.get_method().value,
|
402
|
-
url=self.
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
),
|
408
|
-
path
|
409
|
-
or self.get_path(
|
410
|
-
stream_state=stream_state,
|
411
|
-
stream_slice=stream_slice,
|
412
|
-
next_page_token=next_page_token,
|
413
|
-
),
|
454
|
+
url=self._get_url(
|
455
|
+
path=path,
|
456
|
+
stream_state=stream_state,
|
457
|
+
stream_slice=stream_slice,
|
458
|
+
next_page_token=next_page_token,
|
414
459
|
),
|
415
460
|
request_kwargs={"stream": self.stream_response},
|
416
461
|
headers=self._request_headers(
|
airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py
CHANGED
@@ -6,6 +6,9 @@ from dataclasses import InitVar, dataclass, field
|
|
6
6
|
from typing import Any, List, Mapping, MutableMapping, Optional, Union
|
7
7
|
|
8
8
|
from airbyte_cdk.sources.declarative.interpolation.interpolated_nested_mapping import NestedMapping
|
9
|
+
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
10
|
+
RequestBody,
|
11
|
+
)
|
9
12
|
from airbyte_cdk.sources.declarative.requesters.request_options.interpolated_nested_request_input_provider import (
|
10
13
|
InterpolatedNestedRequestInputProvider,
|
11
14
|
)
|
@@ -38,6 +41,7 @@ class InterpolatedRequestOptionsProvider(RequestOptionsProvider):
|
|
38
41
|
config: Config = field(default_factory=dict)
|
39
42
|
request_parameters: Optional[RequestInput] = None
|
40
43
|
request_headers: Optional[RequestInput] = None
|
44
|
+
request_body: Optional[RequestBody] = None
|
41
45
|
request_body_data: Optional[RequestInput] = None
|
42
46
|
request_body_json: Optional[NestedMapping] = None
|
43
47
|
query_properties_key: Optional[str] = None
|
@@ -47,16 +51,19 @@ class InterpolatedRequestOptionsProvider(RequestOptionsProvider):
|
|
47
51
|
self.request_parameters = {}
|
48
52
|
if self.request_headers is None:
|
49
53
|
self.request_headers = {}
|
54
|
+
# resolve the request body to either data or json
|
55
|
+
self._resolve_request_body()
|
56
|
+
# If request_body is not provided, set request_body_data and request_body_json to empty dicts
|
50
57
|
if self.request_body_data is None:
|
51
58
|
self.request_body_data = {}
|
52
59
|
if self.request_body_json is None:
|
53
60
|
self.request_body_json = {}
|
54
|
-
|
61
|
+
# If both request_body_data and request_body_json are provided, raise an error
|
55
62
|
if self.request_body_json and self.request_body_data:
|
56
63
|
raise ValueError(
|
57
64
|
"RequestOptionsProvider should only contain either 'request_body_data' or 'request_body_json' not both"
|
58
65
|
)
|
59
|
-
|
66
|
+
# set interpolators
|
60
67
|
self._parameter_interpolator = InterpolatedRequestInputProvider(
|
61
68
|
config=self.config, request_inputs=self.request_parameters, parameters=parameters
|
62
69
|
)
|
@@ -70,6 +77,21 @@ class InterpolatedRequestOptionsProvider(RequestOptionsProvider):
|
|
70
77
|
config=self.config, request_inputs=self.request_body_json, parameters=parameters
|
71
78
|
)
|
72
79
|
|
80
|
+
def _resolve_request_body(self) -> None:
|
81
|
+
"""
|
82
|
+
Resolves the request body configuration by setting either `request_body_data` or `request_body_json`
|
83
|
+
based on the type specified in `self.request_body`. If neither is provided, both are initialized as empty
|
84
|
+
dictionaries. Raises a ValueError if both `request_body_data` and `request_body_json` are set simultaneously.
|
85
|
+
Raises:
|
86
|
+
ValueError: If both `request_body_data` and `request_body_json` are provided.
|
87
|
+
"""
|
88
|
+
# Resolve the request body to either data or json
|
89
|
+
if self.request_body is not None and self.request_body.type is not None:
|
90
|
+
if self.request_body.type == "RequestBodyData":
|
91
|
+
self.request_body_data = self.request_body.value
|
92
|
+
elif self.request_body.type == "RequestBodyJson":
|
93
|
+
self.request_body_json = self.request_body.value
|
94
|
+
|
73
95
|
def get_request_params(
|
74
96
|
self,
|
75
97
|
*,
|
@@ -34,6 +34,18 @@ class Requester(RequestOptionsProvider):
|
|
34
34
|
"""
|
35
35
|
pass
|
36
36
|
|
37
|
+
@abstractmethod
|
38
|
+
def get_url(
|
39
|
+
self,
|
40
|
+
*,
|
41
|
+
stream_state: Optional[StreamState],
|
42
|
+
stream_slice: Optional[StreamSlice],
|
43
|
+
next_page_token: Optional[Mapping[str, Any]],
|
44
|
+
) -> str:
|
45
|
+
"""
|
46
|
+
:return: URL base for the API endpoint e.g: if you wanted to hit https://myapi.com/v1/some_entity then this should return "https://myapi.com/v1/"
|
47
|
+
"""
|
48
|
+
|
37
49
|
@abstractmethod
|
38
50
|
def get_url_base(
|
39
51
|
self,
|
@@ -14,13 +14,13 @@ airbyte_cdk/config_observation.py,sha256=7SSPxtN0nXPkm4euGNcTTr1iLbwUL01jy-24V1H
|
|
14
14
|
airbyte_cdk/connector.py,sha256=bO23kdGRkl8XKFytOgrrWFc_VagteTHVEF6IsbizVkM,4224
|
15
15
|
airbyte_cdk/connector_builder/README.md,sha256=Hw3wvVewuHG9-QgsAq1jDiKuLlStDxKBz52ftyNRnBw,1665
|
16
16
|
airbyte_cdk/connector_builder/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
17
|
-
airbyte_cdk/connector_builder/connector_builder_handler.py,sha256=
|
17
|
+
airbyte_cdk/connector_builder/connector_builder_handler.py,sha256=OFTzxyfAevI3Um8fXTOLTgoCc4Sx9NzF0boqYkAATfM,6590
|
18
18
|
airbyte_cdk/connector_builder/main.py,sha256=j1pP5N8RsnvQZ4iYxhLdLEHsJ5Ui7IVFBUi6wYMGBkM,3839
|
19
19
|
airbyte_cdk/connector_builder/models.py,sha256=9pIZ98LW_d6fRS39VdnUOf3cxGt4TkC5MJ0_OrzcCRk,1578
|
20
20
|
airbyte_cdk/connector_builder/test_reader/__init__.py,sha256=iTwBMoI9vaJotEgpqZbFjlxRcbxXYypSVJ9YxeHk7wc,120
|
21
21
|
airbyte_cdk/connector_builder/test_reader/helpers.py,sha256=Iczn-_iczS2CaIAunWwyFcX0uLTra8Wh9JVfzm1Gfxo,26765
|
22
22
|
airbyte_cdk/connector_builder/test_reader/message_grouper.py,sha256=84BAEPIBHMq3WCfO14WNvh_q7OsjGgDt0q1FTu8eW-w,6918
|
23
|
-
airbyte_cdk/connector_builder/test_reader/reader.py,sha256=
|
23
|
+
airbyte_cdk/connector_builder/test_reader/reader.py,sha256=mP1yHK5vG38KxoKoT2QQ7ZNbkdLA1rMAU3EKpucjHls,21098
|
24
24
|
airbyte_cdk/connector_builder/test_reader/types.py,sha256=hPZG3jO03kBaPyW94NI3JHRS1jxXGSNBcN1HFzOxo5Y,2528
|
25
25
|
airbyte_cdk/destinations/__init__.py,sha256=FyDp28PT_YceJD5HDFhA-mrGfX9AONIyMQ4d68CHNxQ,213
|
26
26
|
airbyte_cdk/destinations/destination.py,sha256=CIq-yb8C_0QvcKCtmStaHfiqn53GEfRAIGGCkJhKP1Q,5880
|
@@ -36,6 +36,17 @@ airbyte_cdk/destinations/vector_db_based/writer.py,sha256=nZ00xPiohElJmYktEZZIhr
|
|
36
36
|
airbyte_cdk/entrypoint.py,sha256=NRJv5BNZRSUEVTmNBa9N7ih6fW5sg4DwL0nkB9kI99Y,18570
|
37
37
|
airbyte_cdk/exception_handler.py,sha256=D_doVl3Dt60ASXlJsfviOCswxGyKF2q0RL6rif3fNks,2013
|
38
38
|
airbyte_cdk/logger.py,sha256=1cURbvawbunCAV178q-XhTHcbAQZTSf07WhU7U9AXWU,3744
|
39
|
+
airbyte_cdk/manifest_migrations/README.md,sha256=PvnbrW1gyzhlkeucd0YAOXcXVxi0xBUUynzs4DMqjDo,2942
|
40
|
+
airbyte_cdk/manifest_migrations/__init__.py,sha256=0eq9ic_6GGXMwzE31eAOSA7PLtBauMfgM9XshjYHF84,61
|
41
|
+
airbyte_cdk/manifest_migrations/exceptions.py,sha256=mmMZaCVEkYSGykVL5jKA0xsDWWkybRdQwnh9pGb7VG0,300
|
42
|
+
airbyte_cdk/manifest_migrations/manifest_migration.py,sha256=4ohLfbj2PeuPSgCMVbCArb0d-YdaZIllX4ieXQNiRRw,4420
|
43
|
+
airbyte_cdk/manifest_migrations/migration_handler.py,sha256=CF8in-Eb45TGzFBxEJrXSzqVr8Lgv0vqvZlbuz1rbQk,6096
|
44
|
+
airbyte_cdk/manifest_migrations/migrations/__init__.py,sha256=SJ7imfOgCRYOVaFkW2bVEnSUxbYPlkryWwYT2semsF0,62
|
45
|
+
airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py,sha256=IIn2SjRh1v2yaSBFUCDyBHpX6mBhlckhvbsSg55mREI,2153
|
46
|
+
airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py,sha256=70md8yDu8SWl2JkkFcEs8kyXUbP0F_obIzyHsygyR9k,1777
|
47
|
+
airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py,sha256=EX1MVYVpoWypA28qoH48wA0SYZjGdlR8bcSixTDzfgo,1346
|
48
|
+
airbyte_cdk/manifest_migrations/migrations/registry.yaml,sha256=pMG4JzHQyxvTjxhTZpzUXHb0BhwkY7w_6CtTwaUZ_K0,960
|
49
|
+
airbyte_cdk/manifest_migrations/migrations_registry.py,sha256=zly2fwaOxDukqC7eowzrDlvhA2v71FjW74kDzvRXhSY,2619
|
39
50
|
airbyte_cdk/models/__init__.py,sha256=Et9wJWs5VOWynGbb-3aJRhsdAHAiLkNNLxdwqJAuqkw,2114
|
40
51
|
airbyte_cdk/models/airbyte_protocol.py,sha256=oZdKsZ7yPjUt9hvxdWNpxCtgjSV2RWhf4R9Np03sqyY,3613
|
41
52
|
airbyte_cdk/models/airbyte_protocol_serializers.py,sha256=s6SaFB2CMrG_7jTQGn_fhFbQ1FUxhCxf5kq2RWGHMVI,1749
|
@@ -78,8 +89,8 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=GoZJ8Oxb
|
|
78
89
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
79
90
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
|
80
91
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
81
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
82
|
-
airbyte_cdk/sources/declarative/declarative_source.py,sha256=
|
92
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=C_hjPvQHfNGNTt2rXp9nCl8T_tPZBoPx0D5yEBi6ZWg,165127
|
93
|
+
airbyte_cdk/sources/declarative/declarative_source.py,sha256=qmyMnnet92eGc3C22yBtpvD5UZjqdhsAafP_zxI5wp8,1814
|
83
94
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=dCRlddBUSaJmBNBz1pSO1r2rTw8AP5d2_vlmIeGs2gg,10767
|
84
95
|
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
|
85
96
|
airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py,sha256=Jd7URkDQBoHSDQHQuYUqzeex1HYfLRtGcY_-dVW33pA,7884
|
@@ -111,24 +122,25 @@ airbyte_cdk/sources/declarative/interpolation/__init__.py,sha256=Kh7FxhfetyNVDnA
|
|
111
122
|
airbyte_cdk/sources/declarative/interpolation/filters.py,sha256=cYap5zzOxIJWCLIfbkNlpyfUhjZ8FklLroIG4WGzYVs,5537
|
112
123
|
airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py,sha256=8F3ntT_Mfo8cO9n6dCq8rTfJIpfKmzRCsVtVdhzaoGc,1964
|
113
124
|
airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py,sha256=h36RIng4GZ9v4o_fRmgJjTNOtWmhK7NOILU1oSKPE4Q,2083
|
114
|
-
airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py,sha256=
|
125
|
+
airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py,sha256=myVaNtFqxOAwrbp93rgd1dhkqyuvXvET9rsimQ89ktc,1873
|
115
126
|
airbyte_cdk/sources/declarative/interpolation/interpolated_string.py,sha256=CQkHqGlfa87G6VYMtBAQWin7ECKpfMdrDcg0JO5_rhc,3212
|
116
127
|
airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=9IoeuWam3L6GyN10L6U8xNWXmkt9cnahSDNkez1OmFY,982
|
117
128
|
airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=UQeuS4Vpyp4hlOn-R3tRyeBX0e9IoV6jQ6gH-Jz8lY0,7182
|
118
129
|
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=UYSJ5gW7TkHALYnNvUnRP3RlyGwGuRMObF3BHuNzjJM,5320
|
119
|
-
airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=
|
130
|
+
airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=cZNUOeIogrCmCS7RXeJqQIlnsANigz1cngpLko02M2g,23191
|
120
131
|
airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
121
132
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
|
122
133
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
123
134
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
124
|
-
airbyte_cdk/sources/declarative/models/
|
135
|
+
airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py,sha256=Rq5kzR5bflqBf6td2ZAgw6lP3iN_mNi4tjntn_R01_o,5851
|
136
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=Vf8LSt-leRKOpxQVQsGxWpG2aq9s9yvZKi4DYbpmf0s,117147
|
125
137
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
126
138
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
|
127
139
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=wnRUP0Xeru9Rbu5OexXSDN9QWDo8YU4tT9M2LDVOgGA,802
|
128
140
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=RUyFZS0zslLb7UfQrvqMC--k5CVLNSp7zHw6kbosvKE,9688
|
129
141
|
airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py,sha256=laBy7ebjA-PiNwc-50U4FHvMqS_mmHvnabxgFs4CjGw,17069
|
130
142
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=pJmg78vqE5VfUrF_KJnWjucQ4k9IWFULeAxHCowrHXE,6806
|
131
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
143
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=YZ7WtSFKZ-0HfBq6l-OvmLGkcKcPSg-9wwYMRGYBU0g,166254
|
132
144
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
|
133
145
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
|
134
146
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
@@ -153,7 +165,7 @@ airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_
|
|
153
165
|
airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py,sha256=Tan66odx8VHzfdyyXMQkXz2pJYksllGqvxmpoajgcK4,669
|
154
166
|
airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py,sha256=E-fQbt4ShfxZVoqfnmOx69C6FUPWZz8BIqI3DN9Kcjs,7935
|
155
167
|
airbyte_cdk/sources/declarative/requesters/http_job_repository.py,sha256=uDyLvNsJ183oh3TT-O1PDOgpGt7OD1uqpLTDWTyb9PA,14271
|
156
|
-
airbyte_cdk/sources/declarative/requesters/http_requester.py,sha256=
|
168
|
+
airbyte_cdk/sources/declarative/requesters/http_requester.py,sha256=1qUqNxJ6I_4uSkW4KYXEtygVioURIEmiaDU8GMl_Jcs,18833
|
157
169
|
airbyte_cdk/sources/declarative/requesters/paginators/__init__.py,sha256=uArbKs9JKNCt7t9tZoeWwjDpyI1HoPp29FNW0JzvaEM,644
|
158
170
|
airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py,sha256=SB-Af3CRb4mJwhm4EKNxzl_PK2w5QS4tqrSNNMO2IV4,12760
|
159
171
|
airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py,sha256=b1-zKxYOUMHn7ahdWpzKEzfG4A7s_WQWy-vzRqZWzME,2152
|
@@ -177,10 +189,10 @@ airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_reques
|
|
177
189
|
airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py,sha256=SRROdPJZ5kuqHLOlkh115pWP9nDGfDxRYPgH9oD3hPo,1798
|
178
190
|
airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py,sha256=86YozYuBDfu0t9NbevIvQoGU0vqTP4rt3dRSTsHz3PA,2269
|
179
191
|
airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py,sha256=rR00kE64U2yL0McU1gPr4_W5_sLUqwDgL3Nvj691nRU,2884
|
180
|
-
airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py,sha256=
|
192
|
+
airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py,sha256=TKerU1oGJJRGPk9_AXpKnaQVdNNIYpdLG1lK3HfaHS8,7741
|
181
193
|
airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py,sha256=8YRiDzjYvqJ-aMmKFcjqzv_-e8OZ5QG_TbpZ-nuCu6s,2590
|
182
194
|
airbyte_cdk/sources/declarative/requesters/request_path.py,sha256=S3MeFvcaQrMbOkSY2W2VbXLNomqt_3eXqVd9ZhgNwUs,299
|
183
|
-
airbyte_cdk/sources/declarative/requesters/requester.py,sha256=
|
195
|
+
airbyte_cdk/sources/declarative/requesters/requester.py,sha256=T6tMx_Bx4iT-0YVjY7IzgRil-gaIu9n01b1iwpTh3Ek,5516
|
184
196
|
airbyte_cdk/sources/declarative/resolvers/__init__.py,sha256=NiDcz5qi8HPsfX94MUmnX0Rgs_kQXGvucOmJjNWlxKQ,1207
|
185
197
|
airbyte_cdk/sources/declarative/resolvers/components_resolver.py,sha256=KPjKc0yb9artL4ZkeqN8RmEykHH6FJgqXD7fCEnh1X0,1936
|
186
198
|
airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=dz4iJV9liD_LzY_Mn4XmAStoUll60R3MIGWV4aN3pgg,5223
|
@@ -396,9 +408,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
|
|
396
408
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
397
409
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
398
410
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
399
|
-
airbyte_cdk-6.48.
|
400
|
-
airbyte_cdk-6.48.
|
401
|
-
airbyte_cdk-6.48.
|
402
|
-
airbyte_cdk-6.48.
|
403
|
-
airbyte_cdk-6.48.
|
404
|
-
airbyte_cdk-6.48.
|
411
|
+
airbyte_cdk-6.48.2.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
412
|
+
airbyte_cdk-6.48.2.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
413
|
+
airbyte_cdk-6.48.2.dist-info/METADATA,sha256=0SCcRtnWh4AI7620nilMQ_4gxFiiTljCCpb5AB6B_R4,6323
|
414
|
+
airbyte_cdk-6.48.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
415
|
+
airbyte_cdk-6.48.2.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
|
416
|
+
airbyte_cdk-6.48.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|