airbyte-cdk 6.33.2.dev0__py3-none-any.whl → 6.33.3__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/sources/declarative/auth/oauth.py +6 -1
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py +15 -1
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml +23 -288
- airbyte_cdk/sources/declarative/decoders/__init__.py +0 -4
- airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +7 -2
- airbyte_cdk/sources/declarative/decoders/json_decoder.py +12 -58
- airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +6 -11
- airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -4
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +14 -202
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +53 -196
- airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -3
- airbyte_cdk/sources/streams/call_rate.py +40 -116
- airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +3 -0
- {airbyte_cdk-6.33.2.dev0.dist-info → airbyte_cdk-6.33.3.dist-info}/METADATA +1 -1
- {airbyte_cdk-6.33.2.dev0.dist-info → airbyte_cdk-6.33.3.dist-info}/RECORD +19 -19
- {airbyte_cdk-6.33.2.dev0.dist-info → airbyte_cdk-6.33.3.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.33.2.dev0.dist-info → airbyte_cdk-6.33.3.dist-info}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.33.2.dev0.dist-info → airbyte_cdk-6.33.3.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.33.2.dev0.dist-info → airbyte_cdk-6.33.3.dist-info}/entry_points.txt +0 -0
@@ -6,12 +6,10 @@ import abc
|
|
6
6
|
import dataclasses
|
7
7
|
import datetime
|
8
8
|
import logging
|
9
|
-
import re
|
10
9
|
import time
|
11
|
-
from dataclasses import InitVar, dataclass, field
|
12
10
|
from datetime import timedelta
|
13
11
|
from threading import RLock
|
14
|
-
from typing import TYPE_CHECKING, Any, Mapping, Optional
|
12
|
+
from typing import TYPE_CHECKING, Any, Mapping, Optional
|
15
13
|
from urllib import parse
|
16
14
|
|
17
15
|
import requests
|
@@ -162,100 +160,6 @@ class HttpRequestMatcher(RequestMatcher):
|
|
162
160
|
return True
|
163
161
|
|
164
162
|
|
165
|
-
class HttpRequestRegexMatcher(RequestMatcher):
|
166
|
-
"""
|
167
|
-
Extended RequestMatcher for HTTP requests that supports matching on:
|
168
|
-
- HTTP method (case-insensitive)
|
169
|
-
- URL base (scheme + netloc) optionally
|
170
|
-
- URL path pattern (a regex applied to the path portion of the URL)
|
171
|
-
- Query parameters (must be present)
|
172
|
-
- Headers (header names compared case-insensitively)
|
173
|
-
"""
|
174
|
-
|
175
|
-
def __init__(
|
176
|
-
self,
|
177
|
-
method: Optional[str] = None,
|
178
|
-
url_base: Optional[str] = None,
|
179
|
-
url_path_pattern: Optional[str] = None,
|
180
|
-
params: Optional[Mapping[str, Any]] = None,
|
181
|
-
headers: Optional[Mapping[str, Any]] = None,
|
182
|
-
):
|
183
|
-
"""
|
184
|
-
:param method: HTTP method (e.g. "GET", "POST"); compared case-insensitively.
|
185
|
-
:param url_base: Base URL (scheme://host) that must match.
|
186
|
-
:param url_path_pattern: A regex pattern that will be applied to the path portion of the URL.
|
187
|
-
:param params: Dictionary of query parameters that must be present in the request.
|
188
|
-
:param headers: Dictionary of headers that must be present (header keys are compared case-insensitively).
|
189
|
-
"""
|
190
|
-
self._method = method.upper() if method else None
|
191
|
-
|
192
|
-
# Normalize the url_base if provided: remove trailing slash.
|
193
|
-
self._url_base = url_base.rstrip("/") if url_base else None
|
194
|
-
|
195
|
-
# Compile the URL path pattern if provided.
|
196
|
-
self._url_path_pattern = re.compile(url_path_pattern) if url_path_pattern else None
|
197
|
-
|
198
|
-
# Normalize query parameters to strings.
|
199
|
-
self._params = {str(k): str(v) for k, v in (params or {}).items()}
|
200
|
-
|
201
|
-
# Normalize header keys to lowercase.
|
202
|
-
self._headers = {str(k).lower(): str(v) for k, v in (headers or {}).items()}
|
203
|
-
|
204
|
-
@staticmethod
|
205
|
-
def _match_dict(obj: Mapping[str, Any], pattern: Mapping[str, Any]) -> bool:
|
206
|
-
"""Check that every key/value in the pattern exists in the object."""
|
207
|
-
return pattern.items() <= obj.items()
|
208
|
-
|
209
|
-
def __call__(self, request: Any) -> bool:
|
210
|
-
"""
|
211
|
-
:param request: A requests.Request or requests.PreparedRequest instance.
|
212
|
-
:return: True if the request matches all provided criteria; False otherwise.
|
213
|
-
"""
|
214
|
-
# Prepare the request (if needed) and extract the URL details.
|
215
|
-
if isinstance(request, requests.Request):
|
216
|
-
prepared_request = request.prepare()
|
217
|
-
elif isinstance(request, requests.PreparedRequest):
|
218
|
-
prepared_request = request
|
219
|
-
else:
|
220
|
-
return False
|
221
|
-
|
222
|
-
# Check HTTP method.
|
223
|
-
if self._method is not None and prepared_request.method is not None:
|
224
|
-
if prepared_request.method.upper() != self._method:
|
225
|
-
return False
|
226
|
-
|
227
|
-
# Parse the URL.
|
228
|
-
parsed_url = parse.urlsplit(prepared_request.url)
|
229
|
-
# Reconstruct the base: scheme://netloc
|
230
|
-
request_url_base = f"{str(parsed_url.scheme)}://{str(parsed_url.netloc)}"
|
231
|
-
# The path (without query parameters)
|
232
|
-
request_path = str(parsed_url.path).rstrip("/")
|
233
|
-
|
234
|
-
# If a base URL is provided, check that it matches.
|
235
|
-
if self._url_base is not None:
|
236
|
-
if request_url_base != self._url_base:
|
237
|
-
return False
|
238
|
-
|
239
|
-
# If a URL path pattern is provided, ensure the path matches the regex.
|
240
|
-
if self._url_path_pattern is not None:
|
241
|
-
if not self._url_path_pattern.search(request_path):
|
242
|
-
return False
|
243
|
-
|
244
|
-
# Check query parameters.
|
245
|
-
if self._params:
|
246
|
-
query_params = dict(parse.parse_qsl(str(parsed_url.query)))
|
247
|
-
if not self._match_dict(query_params, self._params):
|
248
|
-
return False
|
249
|
-
|
250
|
-
# Check headers (normalize keys to lower-case).
|
251
|
-
if self._headers:
|
252
|
-
req_headers = {k.lower(): v for k, v in prepared_request.headers.items()}
|
253
|
-
if not self._match_dict(req_headers, self._headers):
|
254
|
-
return False
|
255
|
-
|
256
|
-
return True
|
257
|
-
|
258
|
-
|
259
163
|
class BaseCallRatePolicy(AbstractCallRatePolicy, abc.ABC):
|
260
164
|
def __init__(self, matchers: list[RequestMatcher]):
|
261
165
|
self._matchers = matchers
|
@@ -495,17 +399,24 @@ class AbstractAPIBudget(abc.ABC):
|
|
495
399
|
"""
|
496
400
|
|
497
401
|
|
498
|
-
@dataclass
|
499
402
|
class APIBudget(AbstractAPIBudget):
|
500
|
-
"""
|
501
|
-
|
502
|
-
|
403
|
+
"""Default APIBudget implementation"""
|
404
|
+
|
405
|
+
def __init__(
|
406
|
+
self, policies: list[AbstractCallRatePolicy], maximum_attempts_to_acquire: int = 100000
|
407
|
+
) -> None:
|
408
|
+
"""Constructor
|
409
|
+
|
410
|
+
:param policies: list of policies in this budget
|
411
|
+
:param maximum_attempts_to_acquire: number of attempts before throwing hit ratelimit exception, we put some big number here
|
412
|
+
to avoid situations when many threads compete with each other for a few lots over a significant amount of time
|
413
|
+
"""
|
503
414
|
|
504
|
-
|
505
|
-
|
415
|
+
self._policies = policies
|
416
|
+
self._maximum_attempts_to_acquire = maximum_attempts_to_acquire
|
506
417
|
|
507
418
|
def get_matching_policy(self, request: Any) -> Optional[AbstractCallRatePolicy]:
|
508
|
-
for policy in self.
|
419
|
+
for policy in self._policies:
|
509
420
|
if policy.matches(request):
|
510
421
|
return policy
|
511
422
|
return None
|
@@ -526,7 +437,7 @@ class APIBudget(AbstractAPIBudget):
|
|
526
437
|
policy = self.get_matching_policy(request)
|
527
438
|
if policy:
|
528
439
|
self._do_acquire(request=request, policy=policy, block=block, timeout=timeout)
|
529
|
-
elif self.
|
440
|
+
elif self._policies:
|
530
441
|
logger.info("no policies matched with requests, allow call by default")
|
531
442
|
|
532
443
|
def update_from_response(self, request: Any, response: Any) -> None:
|
@@ -549,7 +460,7 @@ class APIBudget(AbstractAPIBudget):
|
|
549
460
|
"""
|
550
461
|
last_exception = None
|
551
462
|
# sometimes we spend all budget before a second attempt, so we have few more here
|
552
|
-
for attempt in range(1, self.
|
463
|
+
for attempt in range(1, self._maximum_attempts_to_acquire):
|
553
464
|
try:
|
554
465
|
policy.try_acquire(request, weight=1)
|
555
466
|
return
|
@@ -573,18 +484,31 @@ class APIBudget(AbstractAPIBudget):
|
|
573
484
|
|
574
485
|
if last_exception:
|
575
486
|
logger.info(
|
576
|
-
"we used all %s attempts to acquire and failed", self.
|
487
|
+
"we used all %s attempts to acquire and failed", self._maximum_attempts_to_acquire
|
577
488
|
)
|
578
489
|
raise last_exception
|
579
490
|
|
580
491
|
|
581
|
-
@dataclass
|
582
492
|
class HttpAPIBudget(APIBudget):
|
583
493
|
"""Implementation of AbstractAPIBudget for HTTP"""
|
584
494
|
|
585
|
-
|
586
|
-
|
587
|
-
|
495
|
+
def __init__(
|
496
|
+
self,
|
497
|
+
ratelimit_reset_header: str = "ratelimit-reset",
|
498
|
+
ratelimit_remaining_header: str = "ratelimit-remaining",
|
499
|
+
status_codes_for_ratelimit_hit: tuple[int] = (429,),
|
500
|
+
**kwargs: Any,
|
501
|
+
):
|
502
|
+
"""Constructor
|
503
|
+
|
504
|
+
:param ratelimit_reset_header: name of the header that has a timestamp of the next reset of call budget
|
505
|
+
:param ratelimit_remaining_header: name of the header that has the number of calls left
|
506
|
+
:param status_codes_for_ratelimit_hit: list of HTTP status codes that signal about rate limit being hit
|
507
|
+
"""
|
508
|
+
self._ratelimit_reset_header = ratelimit_reset_header
|
509
|
+
self._ratelimit_remaining_header = ratelimit_remaining_header
|
510
|
+
self._status_codes_for_ratelimit_hit = status_codes_for_ratelimit_hit
|
511
|
+
super().__init__(**kwargs)
|
588
512
|
|
589
513
|
def update_from_response(self, request: Any, response: Any) -> None:
|
590
514
|
policy = self.get_matching_policy(request)
|
@@ -599,17 +523,17 @@ class HttpAPIBudget(APIBudget):
|
|
599
523
|
def get_reset_ts_from_response(
|
600
524
|
self, response: requests.Response
|
601
525
|
) -> Optional[datetime.datetime]:
|
602
|
-
if response.headers.get(self.
|
526
|
+
if response.headers.get(self._ratelimit_reset_header):
|
603
527
|
return datetime.datetime.fromtimestamp(
|
604
|
-
int(response.headers[self.
|
528
|
+
int(response.headers[self._ratelimit_reset_header])
|
605
529
|
)
|
606
530
|
return None
|
607
531
|
|
608
532
|
def get_calls_left_from_response(self, response: requests.Response) -> Optional[int]:
|
609
|
-
if response.headers.get(self.
|
610
|
-
return int(response.headers[self.
|
533
|
+
if response.headers.get(self._ratelimit_remaining_header):
|
534
|
+
return int(response.headers[self._ratelimit_remaining_header])
|
611
535
|
|
612
|
-
if response.status_code in self.
|
536
|
+
if response.status_code in self._status_codes_for_ratelimit_hit:
|
613
537
|
return 0
|
614
538
|
|
615
539
|
return None
|
@@ -261,6 +261,9 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
261
261
|
|
262
262
|
:return: expiration datetime
|
263
263
|
"""
|
264
|
+
if not value and not self.token_has_expired():
|
265
|
+
# No expiry token was provided but the previous one is not expired so it's fine
|
266
|
+
return self.get_token_expiry_date()
|
264
267
|
|
265
268
|
if self.token_expiry_is_time_of_expiration:
|
266
269
|
if not self.token_expiry_date_format:
|
@@ -53,7 +53,7 @@ airbyte_cdk/sources/declarative/async_job/timer.py,sha256=Fb8P72CQ7jIzJyzMSSNuBf
|
|
53
53
|
airbyte_cdk/sources/declarative/auth/__init__.py,sha256=e2CRrcBWGhz3sQu3Oh34d1riEIwXipGS8hrSB1pu0Oo,284
|
54
54
|
airbyte_cdk/sources/declarative/auth/declarative_authenticator.py,sha256=nf-OmRUHYG4ORBwyb5CANzuHEssE-oNmL-Lccn41Td8,1099
|
55
55
|
airbyte_cdk/sources/declarative/auth/jwt.py,sha256=SICqNsN2Cn_EgKadIgWuZpQxuMHyzrMZD_2-Uwy10rY,8539
|
56
|
-
airbyte_cdk/sources/declarative/auth/oauth.py,sha256=
|
56
|
+
airbyte_cdk/sources/declarative/auth/oauth.py,sha256=SUfib1oSzlyRRnOSg8Bui73mfyrcyr9OssdchbKdu4s,14162
|
57
57
|
airbyte_cdk/sources/declarative/auth/selective_authenticator.py,sha256=qGwC6YsCldr1bIeKG6Qo-A9a5cTdHw-vcOn3OtQrS4c,1540
|
58
58
|
airbyte_cdk/sources/declarative/auth/token.py,sha256=2EnE78EhBOY9hbeZnQJ9AuFaM-G7dccU-oKo_LThRQk,11070
|
59
59
|
airbyte_cdk/sources/declarative/auth/token_provider.py,sha256=9CuSsmOoHkvlc4k-oZ3Jx5luAgfTMm1I_5HOZxw7wMU,3075
|
@@ -63,17 +63,17 @@ airbyte_cdk/sources/declarative/checks/check_stream.py,sha256=dAA-UhmMj0WLXCkRQr
|
|
63
63
|
airbyte_cdk/sources/declarative/checks/connection_checker.py,sha256=MBRJo6WJlZQHpIfOGaNOkkHUmgUl_4wDM6VPo41z5Ss,1383
|
64
64
|
airbyte_cdk/sources/declarative/concurrency_level/__init__.py,sha256=5XUqrmlstYlMM0j6crktlKQwALek0uiz2D3WdM46MyA,191
|
65
65
|
airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py,sha256=YIwCTCpOr_QSNW4ltQK0yUGWInI8PKNY216HOOegYLk,2101
|
66
|
-
airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=
|
66
|
+
airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=ThOqmaaqPykS2gTDKnlLSPy0p7djjV1Svazes58Rmic,28844
|
67
67
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=l9LG7Qm6e5r_qgqfVKnx3mXYtg1I9MmMjomVIPfU4XA,177
|
68
68
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=SX9JjdesN1edN2WVUVMzU_ptqp2QB1OnsnjZ4mwcX7w,2579
|
69
69
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
70
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
70
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=wmw4ZN8WF_QOWpe7bkzu31VHW-OjKIZ3g7z9nBoDdTo,138922
|
71
71
|
airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
|
72
72
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=venZjfpvtqr3oFSuvMBWtn4h9ayLhD4L65ACuXCDZ64,10445
|
73
|
-
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=
|
74
|
-
airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py,sha256=
|
73
|
+
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
|
74
|
+
airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py,sha256=kg5_kNlhXj8p9GZFztlbG16pk1XcMtP9ezqulq1VNg4,4545
|
75
75
|
airbyte_cdk/sources/declarative/decoders/decoder.py,sha256=sl-Gt8lXi7yD2Q-sD8je5QS2PbgrgsYjxRLWsay7DMc,826
|
76
|
-
airbyte_cdk/sources/declarative/decoders/json_decoder.py,sha256=
|
76
|
+
airbyte_cdk/sources/declarative/decoders/json_decoder.py,sha256=BdWpXXPhEGf_zknggJmhojLosmxuw51RBVTS0jvdCPc,2080
|
77
77
|
airbyte_cdk/sources/declarative/decoders/noop_decoder.py,sha256=iZh0yKY_JzgBnJWiubEusf5c0o6Khd-8EWFWT-8EgFo,542
|
78
78
|
airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py,sha256=ZVBZhAOl0I0MymXN5CKTC-kIXG4GuUQAEyn0XpUDuSE,1081
|
79
79
|
airbyte_cdk/sources/declarative/decoders/xml_decoder.py,sha256=EU-7t-5vIGRHZ14h-f0GUE4V5-eTM9Flux-A8xgI1Rc,3117
|
@@ -88,7 +88,7 @@ airbyte_cdk/sources/declarative/extractors/record_selector.py,sha256=tjNwcURmlyD
|
|
88
88
|
airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py,sha256=LhqGDfX06_dDYLKsIVnwQ_nAWCln-v8PV7Wgt_QVeTI,6533
|
89
89
|
airbyte_cdk/sources/declarative/extractors/type_transformer.py,sha256=d6Y2Rfg8pMVEEnHllfVksWZdNVOU55yk34O03dP9muY,1626
|
90
90
|
airbyte_cdk/sources/declarative/incremental/__init__.py,sha256=U1oZKtBaEC6IACmvziY9Wzg7Z8EgF4ZuR7NwvjlB_Sk,1255
|
91
|
-
airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py,sha256=
|
91
|
+
airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py,sha256=5dbO47TFmC5Oz8TZ8DKXwXeZElz70xy2v2HJlZr5qVs,17751
|
92
92
|
airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py,sha256=5Bl_2EeA4as0e3J23Yxp8Q8BXzh0nJ2NcGSgj3V0h2o,21954
|
93
93
|
airbyte_cdk/sources/declarative/incremental/declarative_cursor.py,sha256=5Bhw9VRPyIuCaD0wmmq_L3DZsa-rJgtKSEUzSd8YYD0,536
|
94
94
|
airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py,sha256=9HO-QbL9akvjq2NP7l498RwLA4iQZlBMQW1tZbt34I8,15943
|
@@ -104,18 +104,18 @@ airbyte_cdk/sources/declarative/interpolation/interpolated_string.py,sha256=LYEZ
|
|
104
104
|
airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=-V5UddGm69UKEB6o_O1EIES9kfY8FV_X4Ji8w1yOuSA,981
|
105
105
|
airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=BtsY_jtT4MihFqeQgc05HXj3Ndt-e2ESQgGwbg3Sdxc,6430
|
106
106
|
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=Y5AWYxbJTUtJ_Jm7DV9qrZDiymFR9LST7fBt4piT2-U,4585
|
107
|
-
airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=
|
107
|
+
airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=26qMXRugdPAd3zyYRH6YpNi--TorGZVOtxzY5O6muL0,16912
|
108
108
|
airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
109
109
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
|
110
110
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
111
111
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
112
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
112
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=had38ukkEWp1ShNoGphnYu2dSbxZP6BAymO2Po-ZAvU,98100
|
113
113
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
114
114
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=958MMX6_ZOJUlDDdNr9Krosgi2bCKGx2Z765M2Woz18,5505
|
115
115
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
|
116
116
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=CXwTfD3wSQq3okcqwigpprbHhSURUokh4GK2OmOyKC8,9132
|
117
117
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=IWUOdF03o-aQn0Occo1BJCxU0Pz-QILk5L67nzw2thw,6803
|
118
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
118
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=rzWM5R9CBwS2Gg-f0Umkk1kq-QBfvXv9NaUHXMLKPKg,128859
|
119
119
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=HJ-Syp3p7RpyR_OK0X_a2kSyISfu3W-PKrRI16iY0a8,957
|
120
120
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
|
121
121
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
@@ -139,7 +139,7 @@ airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_
|
|
139
139
|
airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py,sha256=Tan66odx8VHzfdyyXMQkXz2pJYksllGqvxmpoajgcK4,669
|
140
140
|
airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py,sha256=E-fQbt4ShfxZVoqfnmOx69C6FUPWZz8BIqI3DN9Kcjs,7935
|
141
141
|
airbyte_cdk/sources/declarative/requesters/http_job_repository.py,sha256=3GtOefPH08evlSUxaILkiKLTHbIspFY4qd5B3ZqNE60,10063
|
142
|
-
airbyte_cdk/sources/declarative/requesters/http_requester.py,sha256=
|
142
|
+
airbyte_cdk/sources/declarative/requesters/http_requester.py,sha256=C6YT7t4UZMfarFeQ9fc362R5TbQ2jNSew8ESP-9yuZQ,14851
|
143
143
|
airbyte_cdk/sources/declarative/requesters/paginators/__init__.py,sha256=uArbKs9JKNCt7t9tZoeWwjDpyI1HoPp29FNW0JzvaEM,644
|
144
144
|
airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py,sha256=dSm_pKGOZjzvg-X_Vif-MjrnlUG23fCa69bocq8dVIs,11693
|
145
145
|
airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py,sha256=j6j9QRPaTbKQ2N661RFVKthhkWiodEp6ut0tKeEd0Ng,2019
|
@@ -249,7 +249,7 @@ airbyte_cdk/sources/message/repository.py,sha256=SG7avgti_-dj8FcRHTTrhgLLGJbElv1
|
|
249
249
|
airbyte_cdk/sources/source.py,sha256=KIBBH5VLEb8BZ8B9aROlfaI6OLoJqKDPMJ10jkAR7nk,3611
|
250
250
|
airbyte_cdk/sources/streams/__init__.py,sha256=8fzTKpRTnSx5PggXgQPKJzHNZUV2BCA40N-dI6JM1xI,256
|
251
251
|
airbyte_cdk/sources/streams/availability_strategy.py,sha256=_RU4JITrxMEN36g1RDHMu0iSw0I_3yWGfo5N8_YRvOg,3247
|
252
|
-
airbyte_cdk/sources/streams/call_rate.py,sha256=
|
252
|
+
airbyte_cdk/sources/streams/call_rate.py,sha256=Um_Ny8R7WZ2B0PWoxr-wrWPsgc5we7HrHalaMcozuVs,21052
|
253
253
|
airbyte_cdk/sources/streams/checkpoint/__init__.py,sha256=3oy7Hd4ivVWTZlN6dKAf4Fv_G7U5iZrvhO9hT871UIo,712
|
254
254
|
airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py,sha256=6HMT2NI-FQuaW0nt95NcyWrt5rZN4gF-Arx0sxdgbv4,15221
|
255
255
|
airbyte_cdk/sources/streams/checkpoint/cursor.py,sha256=3e-3c-54k8U7Awno7DMmAD9ndbnl9OM48EnbEgeDUO0,3499
|
@@ -295,7 +295,7 @@ airbyte_cdk/sources/streams/http/http.py,sha256=0uariNq8OFnlX7iqOHwBhecxA-Hfd5hS
|
|
295
295
|
airbyte_cdk/sources/streams/http/http_client.py,sha256=tDE0ROtxjGMVphvsw8INvGMtZ97hIF-v47pZ3jIyiwc,23011
|
296
296
|
airbyte_cdk/sources/streams/http/rate_limiting.py,sha256=IwdjrHKUnU97XO4qONgYRv4YYW51xQ8SJm4WLafXDB8,6351
|
297
297
|
airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py,sha256=RN0D3nOX1xLgwEwKWu6pkGy3XqBFzKSNZ8Lf6umU2eY,413
|
298
|
-
airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=
|
298
|
+
airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=cM5CM1mnbTEMiY6gKHblGXr9KTS5VEziGoc-TXC302k,18791
|
299
299
|
airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py,sha256=Y3n7J-sk5yGjv_OxtY6Z6k0PEsFZmtIRi-x0KCbaHdA,1010
|
300
300
|
airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py,sha256=C2j2uVfi9d-3KgHO3NGxIiFdfASjHOtsd6g_LWPYOAs,20311
|
301
301
|
airbyte_cdk/sources/streams/http/requests_native_auth/token.py,sha256=h5PTzcdH-RQLeCg7xZ45w_484OPUDSwNWl_iMJQmZoI,2526
|
@@ -351,9 +351,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
|
|
351
351
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
352
352
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
353
353
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
354
|
-
airbyte_cdk-6.33.
|
355
|
-
airbyte_cdk-6.33.
|
356
|
-
airbyte_cdk-6.33.
|
357
|
-
airbyte_cdk-6.33.
|
358
|
-
airbyte_cdk-6.33.
|
359
|
-
airbyte_cdk-6.33.
|
354
|
+
airbyte_cdk-6.33.3.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
355
|
+
airbyte_cdk-6.33.3.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
356
|
+
airbyte_cdk-6.33.3.dist-info/METADATA,sha256=9HhcwQNXxm0uygxeyX-dbdTPECBMbnDvXEM561ZP6fQ,6010
|
357
|
+
airbyte_cdk-6.33.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
358
|
+
airbyte_cdk-6.33.3.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
|
359
|
+
airbyte_cdk-6.33.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|