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.
Files changed (29) hide show
  1. airbyte_cdk/connector_builder/connector_builder_handler.py +11 -0
  2. airbyte_cdk/connector_builder/test_reader/reader.py +11 -0
  3. airbyte_cdk/manifest_migrations/README.md +73 -0
  4. airbyte_cdk/manifest_migrations/__init__.py +3 -0
  5. airbyte_cdk/manifest_migrations/exceptions.py +12 -0
  6. airbyte_cdk/manifest_migrations/manifest_migration.py +134 -0
  7. airbyte_cdk/manifest_migrations/migration_handler.py +163 -0
  8. airbyte_cdk/manifest_migrations/migrations/__init__.py +4 -0
  9. airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py +57 -0
  10. airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py +51 -0
  11. airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py +41 -0
  12. airbyte_cdk/manifest_migrations/migrations/registry.yaml +22 -0
  13. airbyte_cdk/manifest_migrations/migrations_registry.py +76 -0
  14. airbyte_cdk/sources/declarative/declarative_component_schema.yaml +80 -5
  15. airbyte_cdk/sources/declarative/declarative_source.py +10 -1
  16. airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +1 -1
  17. airbyte_cdk/sources/declarative/manifest_declarative_source.py +32 -7
  18. airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py +144 -0
  19. airbyte_cdk/sources/declarative/models/declarative_component_schema.py +54 -5
  20. airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +66 -15
  21. airbyte_cdk/sources/declarative/requesters/http_requester.py +62 -17
  22. airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +24 -2
  23. airbyte_cdk/sources/declarative/requesters/requester.py +12 -0
  24. {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/METADATA +1 -1
  25. {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/RECORD +29 -17
  26. {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/LICENSE.txt +0 -0
  27. {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/LICENSE_SHORT +0 -0
  28. {airbyte_cdk-6.48.0.dist-info → airbyte_cdk-6.48.2.dist-info}/WHEEL +0 -0
  29. {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
- if model.transform_before_filtering is None:
2837
- # default to False if not set
2838
- model.transform_before_filtering = False
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 = True
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=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._url_base = InterpolatedString.create(self.url_base, parameters=parameters)
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._join_url(
403
- self.get_url_base(
404
- stream_state=stream_state,
405
- stream_slice=stream_slice,
406
- next_page_token=next_page_token,
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(
@@ -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,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.48.0
3
+ Version: 6.48.2
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -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=bJ7ufXOWLXN4i8QQ6WhAsnQY2AqlZq0NVL5G-TAPa1g,6241
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=wJtuYTZuc24-JlGF4UBFTJ2PChLjcQrvldqAWJM9Y9Y,20775
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=I0jTe3nUqS5pW-LbdOQlYuHZIJC3nNAf_LV7XgmfA4g,162221
82
- airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
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=vjwvkLk7_l6YDcFClwjCMcTleRjQBh7-dzny7PUaoG8,1857
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=trTSVPJVAs6RN2sMeaLSuQT3jzJk8ZbdkUP6DMU29Ow,22011
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/declarative_component_schema.py,sha256=i38088qAfh5YMIOEkHdOVqMwDDCayAYtj66EHb3eJNE,114915
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=DGHB4nWwsm4YLuWHhuOjAdeyVDY2U3CdbAiGRdm1YF0,163771
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=uEhUmLGVuwfadKz0c1vunrr66ZNYWmotKZWiaPYPDzw,17402
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=dRlG1IyEOVzWFw7wm-8TBPn7JUtZw3jz6oAoH5yuuf0,6375
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=OcDzuCBgD1owK_lBPG0KbRRHRn9kzbuRveU4HejDiv4,5116
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.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
400
- airbyte_cdk-6.48.0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
401
- airbyte_cdk-6.48.0.dist-info/METADATA,sha256=slRcZy2PXZpm5mLpefKQWolH6bgEoo1Wy285FcBhxvc,6323
402
- airbyte_cdk-6.48.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
403
- airbyte_cdk-6.48.0.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
404
- airbyte_cdk-6.48.0.dist-info/RECORD,,
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,,