airbyte-cdk 7.1.0.post4.dev17948197380__py3-none-any.whl → 7.2.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.
- airbyte_cdk/sources/declarative/auth/jwt.py +29 -2
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml +6 -0
- airbyte_cdk/sources/declarative/interpolation/macros.py +12 -0
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +6 -0
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +25 -40
- airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +1 -5
- {airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/METADATA +1 -1
- {airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/RECORD +12 -12
- {airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/LICENSE_SHORT +0 -0
- {airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/WHEEL +0 -0
- {airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/entry_points.txt +0 -0
@@ -6,15 +6,26 @@ import base64
|
|
6
6
|
import json
|
7
7
|
from dataclasses import InitVar, dataclass
|
8
8
|
from datetime import datetime
|
9
|
-
from typing import Any, Mapping, Optional, Union
|
9
|
+
from typing import Any, Mapping, Optional, Union, cast
|
10
10
|
|
11
11
|
import jwt
|
12
|
+
from cryptography.hazmat.primitives import serialization
|
13
|
+
from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePrivateKey
|
14
|
+
from cryptography.hazmat.primitives.asymmetric.ed448 import Ed448PrivateKey
|
15
|
+
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
|
16
|
+
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey
|
17
|
+
from cryptography.hazmat.primitives.asymmetric.types import PrivateKeyTypes
|
12
18
|
|
13
19
|
from airbyte_cdk.sources.declarative.auth.declarative_authenticator import DeclarativeAuthenticator
|
14
20
|
from airbyte_cdk.sources.declarative.interpolation.interpolated_boolean import InterpolatedBoolean
|
15
21
|
from airbyte_cdk.sources.declarative.interpolation.interpolated_mapping import InterpolatedMapping
|
16
22
|
from airbyte_cdk.sources.declarative.interpolation.interpolated_string import InterpolatedString
|
17
23
|
|
24
|
+
# Type alias for keys that JWT library accepts
|
25
|
+
JwtKeyTypes = Union[
|
26
|
+
RSAPrivateKey, EllipticCurvePrivateKey, Ed25519PrivateKey, Ed448PrivateKey, str, bytes
|
27
|
+
]
|
28
|
+
|
18
29
|
|
19
30
|
class JwtAlgorithm(str):
|
20
31
|
"""
|
@@ -74,6 +85,7 @@ class JwtAuthenticator(DeclarativeAuthenticator):
|
|
74
85
|
aud: Optional[Union[InterpolatedString, str]] = None
|
75
86
|
additional_jwt_headers: Optional[Mapping[str, Any]] = None
|
76
87
|
additional_jwt_payload: Optional[Mapping[str, Any]] = None
|
88
|
+
passphrase: Optional[Union[InterpolatedString, str]] = None
|
77
89
|
|
78
90
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
79
91
|
self._secret_key = InterpolatedString.create(self.secret_key, parameters=parameters)
|
@@ -103,6 +115,11 @@ class JwtAuthenticator(DeclarativeAuthenticator):
|
|
103
115
|
self._additional_jwt_payload = InterpolatedMapping(
|
104
116
|
self.additional_jwt_payload or {}, parameters=parameters
|
105
117
|
)
|
118
|
+
self._passphrase = (
|
119
|
+
InterpolatedString.create(self.passphrase, parameters=parameters)
|
120
|
+
if self.passphrase
|
121
|
+
else None
|
122
|
+
)
|
106
123
|
|
107
124
|
def _get_jwt_headers(self) -> dict[str, Any]:
|
108
125
|
"""
|
@@ -149,11 +166,21 @@ class JwtAuthenticator(DeclarativeAuthenticator):
|
|
149
166
|
payload["nbf"] = nbf
|
150
167
|
return payload
|
151
168
|
|
152
|
-
def _get_secret_key(self) ->
|
169
|
+
def _get_secret_key(self) -> JwtKeyTypes:
|
153
170
|
"""
|
154
171
|
Returns the secret key used to sign the JWT.
|
155
172
|
"""
|
156
173
|
secret_key: str = self._secret_key.eval(self.config, json_loads=json.loads)
|
174
|
+
|
175
|
+
if self._passphrase:
|
176
|
+
passphrase_value = self._passphrase.eval(self.config, json_loads=json.loads)
|
177
|
+
if passphrase_value:
|
178
|
+
private_key = serialization.load_pem_private_key(
|
179
|
+
secret_key.encode(),
|
180
|
+
password=passphrase_value.encode(),
|
181
|
+
)
|
182
|
+
return cast(JwtKeyTypes, private_key)
|
183
|
+
|
157
184
|
return (
|
158
185
|
base64.b64encode(secret_key.encode()).decode()
|
159
186
|
if self._base64_encode_secret_key
|
@@ -1270,6 +1270,12 @@ definitions:
|
|
1270
1270
|
title: Additional JWT Payload Properties
|
1271
1271
|
description: Additional properties to be added to the JWT payload.
|
1272
1272
|
additionalProperties: true
|
1273
|
+
passphrase:
|
1274
|
+
title: Passphrase
|
1275
|
+
description: A passphrase/password used to encrypt the private key. Only provide a passphrase if required by the API for JWT authentication. The API will typically provide the passphrase when generating the public/private key pair.
|
1276
|
+
type: string
|
1277
|
+
examples:
|
1278
|
+
- "{{ config['passphrase'] }}"
|
1273
1279
|
$parameters:
|
1274
1280
|
type: object
|
1275
1281
|
additionalProperties: true
|
@@ -6,6 +6,7 @@ import builtins
|
|
6
6
|
import datetime
|
7
7
|
import re
|
8
8
|
import typing
|
9
|
+
import uuid
|
9
10
|
from typing import Optional, Union
|
10
11
|
from urllib.parse import quote_plus
|
11
12
|
|
@@ -207,6 +208,16 @@ def camel_case_to_snake_case(value: str) -> str:
|
|
207
208
|
return re.sub(r"(?<!^)(?=[A-Z])", "_", value).lower()
|
208
209
|
|
209
210
|
|
211
|
+
def generate_uuid() -> str:
|
212
|
+
"""
|
213
|
+
Generates a UUID4
|
214
|
+
|
215
|
+
Usage:
|
216
|
+
`"{{ generate_uuid() }}"`
|
217
|
+
"""
|
218
|
+
return str(uuid.uuid4())
|
219
|
+
|
220
|
+
|
210
221
|
_macros_list = [
|
211
222
|
now_utc,
|
212
223
|
today_utc,
|
@@ -220,5 +231,6 @@ _macros_list = [
|
|
220
231
|
str_to_datetime,
|
221
232
|
sanitize_url,
|
222
233
|
camel_case_to_snake_case,
|
234
|
+
generate_uuid,
|
223
235
|
]
|
224
236
|
macros = {f.__name__: f for f in _macros_list}
|
@@ -448,6 +448,12 @@ class JwtAuthenticator(BaseModel):
|
|
448
448
|
description="Additional properties to be added to the JWT payload.",
|
449
449
|
title="Additional JWT Payload Properties",
|
450
450
|
)
|
451
|
+
passphrase: Optional[str] = Field(
|
452
|
+
None,
|
453
|
+
description="A passphrase/password used to encrypt the private key. Only provide a passphrase if required by the API for JWT authentication. The API will typically provide the passphrase when generating the public/private key pair.",
|
454
|
+
examples=["{{ config['passphrase'] }}"],
|
455
|
+
title="Passphrase",
|
456
|
+
)
|
451
457
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
452
458
|
|
453
459
|
|
@@ -1264,22 +1264,12 @@ class ModelToComponentFactory:
|
|
1264
1264
|
component_definition: ComponentDefinition,
|
1265
1265
|
stream_name: str,
|
1266
1266
|
stream_namespace: Optional[str],
|
1267
|
+
stream_state: MutableMapping[str, Any],
|
1267
1268
|
config: Config,
|
1268
1269
|
message_repository: Optional[MessageRepository] = None,
|
1269
1270
|
runtime_lookback_window: Optional[datetime.timedelta] = None,
|
1270
|
-
stream_state_migrations: Optional[List[Any]] = None,
|
1271
1271
|
**kwargs: Any,
|
1272
1272
|
) -> ConcurrentCursor:
|
1273
|
-
# Per-partition incremental streams can dynamically create child cursors which will pass their current
|
1274
|
-
# state via the stream_state keyword argument. Incremental syncs without parent streams use the
|
1275
|
-
# incoming state and connector_state_manager that is initialized when the component factory is created
|
1276
|
-
stream_state = (
|
1277
|
-
self._connector_state_manager.get_stream_state(stream_name, stream_namespace)
|
1278
|
-
if "stream_state" not in kwargs
|
1279
|
-
else kwargs["stream_state"]
|
1280
|
-
)
|
1281
|
-
stream_state = self.apply_stream_state_migrations(stream_state_migrations, stream_state)
|
1282
|
-
|
1283
1273
|
component_type = component_definition.get("type")
|
1284
1274
|
if component_definition.get("type") != model_type.__name__:
|
1285
1275
|
raise ValueError(
|
@@ -1498,21 +1488,11 @@ class ModelToComponentFactory:
|
|
1498
1488
|
component_definition: ComponentDefinition,
|
1499
1489
|
stream_name: str,
|
1500
1490
|
stream_namespace: Optional[str],
|
1491
|
+
stream_state: MutableMapping[str, Any],
|
1501
1492
|
config: Config,
|
1502
1493
|
message_repository: Optional[MessageRepository] = None,
|
1503
|
-
stream_state_migrations: Optional[List[Any]] = None,
|
1504
1494
|
**kwargs: Any,
|
1505
1495
|
) -> ConcurrentCursor:
|
1506
|
-
# Per-partition incremental streams can dynamically create child cursors which will pass their current
|
1507
|
-
# state via the stream_state keyword argument. Incremental syncs without parent streams use the
|
1508
|
-
# incoming state and connector_state_manager that is initialized when the component factory is created
|
1509
|
-
stream_state = (
|
1510
|
-
self._connector_state_manager.get_stream_state(stream_name, stream_namespace)
|
1511
|
-
if "stream_state" not in kwargs
|
1512
|
-
else kwargs["stream_state"]
|
1513
|
-
)
|
1514
|
-
stream_state = self.apply_stream_state_migrations(stream_state_migrations, stream_state)
|
1515
|
-
|
1516
1496
|
component_type = component_definition.get("type")
|
1517
1497
|
if component_definition.get("type") != model_type.__name__:
|
1518
1498
|
raise ValueError(
|
@@ -1587,7 +1567,6 @@ class ModelToComponentFactory:
|
|
1587
1567
|
config: Config,
|
1588
1568
|
stream_state: MutableMapping[str, Any],
|
1589
1569
|
partition_router: PartitionRouter,
|
1590
|
-
stream_state_migrations: Optional[List[Any]] = None,
|
1591
1570
|
attempt_to_create_cursor_if_not_provided: bool = False,
|
1592
1571
|
**kwargs: Any,
|
1593
1572
|
) -> ConcurrentPerPartitionCursor:
|
@@ -1647,11 +1626,9 @@ class ModelToComponentFactory:
|
|
1647
1626
|
stream_namespace=stream_namespace,
|
1648
1627
|
config=config,
|
1649
1628
|
message_repository=NoopMessageRepository(),
|
1650
|
-
# stream_state_migrations=stream_state_migrations, # FIXME is it expected to run migration on per partition state too?
|
1651
1629
|
)
|
1652
1630
|
)
|
1653
1631
|
|
1654
|
-
stream_state = self.apply_stream_state_migrations(stream_state_migrations, stream_state)
|
1655
1632
|
# Per-partition state doesn't make sense for GroupingPartitionRouter, so force the global state
|
1656
1633
|
use_global_cursor = isinstance(
|
1657
1634
|
partition_router, GroupingPartitionRouter
|
@@ -1974,6 +1951,7 @@ class ModelToComponentFactory:
|
|
1974
1951
|
self, model: DeclarativeStreamModel, config: Config, is_parent: bool = False, **kwargs: Any
|
1975
1952
|
) -> AbstractStream:
|
1976
1953
|
primary_key = model.primary_key.__root__ if model.primary_key else None
|
1954
|
+
self._migrate_state(model, config)
|
1977
1955
|
|
1978
1956
|
partition_router = self._build_stream_slicer_from_partition_router(
|
1979
1957
|
model.retriever,
|
@@ -2135,6 +2113,23 @@ class ModelToComponentFactory:
|
|
2135
2113
|
supports_file_transfer=hasattr(model, "file_uploader") and bool(model.file_uploader),
|
2136
2114
|
)
|
2137
2115
|
|
2116
|
+
def _migrate_state(self, model: DeclarativeStreamModel, config: Config) -> None:
|
2117
|
+
stream_name = model.name or ""
|
2118
|
+
stream_state = self._connector_state_manager.get_stream_state(
|
2119
|
+
stream_name=stream_name, namespace=None
|
2120
|
+
)
|
2121
|
+
if model.state_migrations:
|
2122
|
+
state_transformations = [
|
2123
|
+
self._create_component_from_model(state_migration, config, declarative_stream=model)
|
2124
|
+
for state_migration in model.state_migrations
|
2125
|
+
]
|
2126
|
+
else:
|
2127
|
+
state_transformations = []
|
2128
|
+
stream_state = self.apply_stream_state_migrations(state_transformations, stream_state)
|
2129
|
+
self._connector_state_manager.update_state_for_stream(
|
2130
|
+
stream_name=stream_name, namespace=None, value=stream_state
|
2131
|
+
)
|
2132
|
+
|
2138
2133
|
def _is_stop_condition_on_cursor(self, model: DeclarativeStreamModel) -> bool:
|
2139
2134
|
return bool(
|
2140
2135
|
model.incremental_sync
|
@@ -2206,17 +2201,7 @@ class ModelToComponentFactory:
|
|
2206
2201
|
config: Config,
|
2207
2202
|
) -> Cursor:
|
2208
2203
|
stream_name = model.name or ""
|
2209
|
-
stream_state = self._connector_state_manager.get_stream_state(
|
2210
|
-
stream_name=stream_name, namespace=None
|
2211
|
-
)
|
2212
|
-
|
2213
|
-
if model.state_migrations:
|
2214
|
-
state_transformations = [
|
2215
|
-
self._create_component_from_model(state_migration, config, declarative_stream=model)
|
2216
|
-
for state_migration in model.state_migrations
|
2217
|
-
]
|
2218
|
-
else:
|
2219
|
-
state_transformations = []
|
2204
|
+
stream_state = self._connector_state_manager.get_stream_state(stream_name, None)
|
2220
2205
|
|
2221
2206
|
if (
|
2222
2207
|
model.incremental_sync
|
@@ -2228,10 +2213,9 @@ class ModelToComponentFactory:
|
|
2228
2213
|
model_type=DatetimeBasedCursorModel,
|
2229
2214
|
component_definition=model.incremental_sync.__dict__,
|
2230
2215
|
stream_name=stream_name,
|
2216
|
+
stream_state=stream_state,
|
2231
2217
|
stream_namespace=None,
|
2232
2218
|
config=config or {},
|
2233
|
-
stream_state=stream_state,
|
2234
|
-
stream_state_migrations=state_transformations,
|
2235
2219
|
partition_router=stream_slicer,
|
2236
2220
|
attempt_to_create_cursor_if_not_provided=True, # FIXME can we remove that now?
|
2237
2221
|
)
|
@@ -2242,8 +2226,8 @@ class ModelToComponentFactory:
|
|
2242
2226
|
component_definition=model.incremental_sync.__dict__,
|
2243
2227
|
stream_name=stream_name,
|
2244
2228
|
stream_namespace=None,
|
2229
|
+
stream_state=stream_state,
|
2245
2230
|
config=config or {},
|
2246
|
-
stream_state_migrations=state_transformations,
|
2247
2231
|
)
|
2248
2232
|
elif type(model.incremental_sync) == DatetimeBasedCursorModel:
|
2249
2233
|
return self.create_concurrent_cursor_from_datetime_based_cursor( # type: ignore # This is a known issue that we are creating and returning a ConcurrentCursor which does not technically implement the (low-code) StreamSlicer. However, (low-code) StreamSlicer and ConcurrentCursor both implement StreamSlicer.stream_slices() which is the primary method needed for checkpointing
|
@@ -2251,8 +2235,8 @@ class ModelToComponentFactory:
|
|
2251
2235
|
component_definition=model.incremental_sync.__dict__,
|
2252
2236
|
stream_name=stream_name,
|
2253
2237
|
stream_namespace=None,
|
2238
|
+
stream_state=stream_state,
|
2254
2239
|
config=config or {},
|
2255
|
-
stream_state_migrations=state_transformations,
|
2256
2240
|
attempt_to_create_cursor_if_not_provided=True,
|
2257
2241
|
)
|
2258
2242
|
else:
|
@@ -2721,6 +2705,7 @@ class ModelToComponentFactory:
|
|
2721
2705
|
aud=jwt_payload.aud,
|
2722
2706
|
additional_jwt_headers=model.additional_jwt_headers,
|
2723
2707
|
additional_jwt_payload=model.additional_jwt_payload,
|
2708
|
+
passphrase=model.passphrase,
|
2724
2709
|
)
|
2725
2710
|
|
2726
2711
|
def create_list_partition_router(
|
@@ -177,11 +177,7 @@ class ConfigComponentsResolver(ComponentsResolver):
|
|
177
177
|
)
|
178
178
|
|
179
179
|
path = [path.eval(self.config, **kwargs) for path in resolved_component.field_path]
|
180
|
-
|
181
|
-
if not (isinstance(value, str) and valid_types == (str,)):
|
182
|
-
parsed_value = self._parse_yaml_if_possible(value)
|
183
|
-
else:
|
184
|
-
parsed_value = value
|
180
|
+
parsed_value = self._parse_yaml_if_possible(value)
|
185
181
|
updated = dpath.set(updated_config, path, parsed_value)
|
186
182
|
|
187
183
|
if parsed_value and not updated and resolved_component.create_or_update:
|
@@ -115,7 +115,7 @@ airbyte_cdk/sources/declarative/async_job/status.py,sha256=mkExR-uOAO1ckUnclaUOa
|
|
115
115
|
airbyte_cdk/sources/declarative/async_job/timer.py,sha256=Fb8P72CQ7jIzJyzMSSNuBf2vt8bmrg9SrfmNxKwph2A,1242
|
116
116
|
airbyte_cdk/sources/declarative/auth/__init__.py,sha256=e2CRrcBWGhz3sQu3Oh34d1riEIwXipGS8hrSB1pu0Oo,284
|
117
117
|
airbyte_cdk/sources/declarative/auth/declarative_authenticator.py,sha256=nf-OmRUHYG4ORBwyb5CANzuHEssE-oNmL-Lccn41Td8,1099
|
118
|
-
airbyte_cdk/sources/declarative/auth/jwt.py,sha256=
|
118
|
+
airbyte_cdk/sources/declarative/auth/jwt.py,sha256=zZANSwaq-LkO22VbcdZloRrv5u7zTaC770xvWRtSKrE,9779
|
119
119
|
airbyte_cdk/sources/declarative/auth/oauth.py,sha256=bCwf3f3Td_CA8DZ6CXMVPNiImM9QEGDxkcLKzSo3-f0,14339
|
120
120
|
airbyte_cdk/sources/declarative/auth/selective_authenticator.py,sha256=qGwC6YsCldr1bIeKG6Qo-A9a5cTdHw-vcOn3OtQrS4c,1540
|
121
121
|
airbyte_cdk/sources/declarative/auth/token.py,sha256=2EnE78EhBOY9hbeZnQJ9AuFaM-G7dccU-oKo_LThRQk,11070
|
@@ -130,7 +130,7 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=z0AgJ6AZ
|
|
130
130
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
131
131
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
|
132
132
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
133
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
133
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=dWfbQUSNdW1HuY1NZslMNL8sTF-I3mKFXa9Fo3747-0,187551
|
134
134
|
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
|
135
135
|
airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py,sha256=qB4lRUrCXLTE-a3VlpOLaazHiC7RIF_FIVJesuz7ebw,8078
|
136
136
|
airbyte_cdk/sources/declarative/decoders/decoder.py,sha256=1PeKwuMK8x9dsA2zqUjSVinEWVSEgYcUS6npiW3aC2c,855
|
@@ -159,20 +159,20 @@ airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py,sha
|
|
159
159
|
airbyte_cdk/sources/declarative/interpolation/interpolated_string.py,sha256=CQkHqGlfa87G6VYMtBAQWin7ECKpfMdrDcg0JO5_rhc,3212
|
160
160
|
airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=9IoeuWam3L6GyN10L6U8xNWXmkt9cnahSDNkez1OmFY,982
|
161
161
|
airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=oFGKs3oX0xO6DOL4E9x8rhxwbEoRcgx4HJVIL1RQ9c4,7269
|
162
|
-
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=
|
162
|
+
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=SgTnnFH6krDfFUuvZFEBQnhHjZNKar2t2ArElRPnQVU,6201
|
163
163
|
airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
164
164
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=58MfDN0zD8M1Wv1jlgWIJ1jF3mbg7_jdS1glk_NFIaE,3962
|
165
165
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
166
166
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
167
167
|
airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py,sha256=Imnj3yef0aqRdLfaUxkIYISUb8YkiPrRH_wBd-x8HjM,5999
|
168
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
168
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=THYAUpV9dDO3n7nTshHrq9iMulGDy60QKM1_jy5t8Ak,131930
|
169
169
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
170
170
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
|
171
171
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=wnRUP0Xeru9Rbu5OexXSDN9QWDo8YU4tT9M2LDVOgGA,802
|
172
172
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=la9Ulpc0lQewiBLKJ0FpsWxyU5XISv-ulmFRHJLJ1Pc,11292
|
173
173
|
airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py,sha256=EtKjS9c94yNp3AwQC8KUCQaAYW5T3zvFYxoWYjc_buI,19729
|
174
174
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=pJmg78vqE5VfUrF_KJnWjucQ4k9IWFULeAxHCowrHXE,6806
|
175
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
175
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=1U2IMabGxODG9-sh2zNNHUBk3bkcWFssPisFL76vIVk,183420
|
176
176
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
|
177
177
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
|
178
178
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=ocm4hZ4k-tEGs5HLrtI8ecWSK0hGqNH0Rvz2byx_HZk,6927
|
@@ -228,7 +228,7 @@ airbyte_cdk/sources/declarative/requesters/request_path.py,sha256=S3MeFvcaQrMbOk
|
|
228
228
|
airbyte_cdk/sources/declarative/requesters/requester.py,sha256=T6tMx_Bx4iT-0YVjY7IzgRil-gaIu9n01b1iwpTh3Ek,5516
|
229
229
|
airbyte_cdk/sources/declarative/resolvers/__init__.py,sha256=xVhOWLQW0wFBTAtRYu3GdFebPqKCDSt1uoP2TiBGrvs,1643
|
230
230
|
airbyte_cdk/sources/declarative/resolvers/components_resolver.py,sha256=rkNatGGhPQhasor95CujY7StmVn5q2UDGAcEzMKueGE,2213
|
231
|
-
airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=
|
231
|
+
airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=OqL3Xil-2905pNfGwE-uPtEu53ksnT99Aec91cu5eSM,8408
|
232
232
|
airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py,sha256=Y3P2tViKhJaOPp7Zl-uiCn5RiHkVEkpBAMi50PVXfoI,4830
|
233
233
|
airbyte_cdk/sources/declarative/resolvers/parametrized_components_resolver.py,sha256=BUmvbsMeIGusZSCd80NiTFcwcosq-uhXHGNheAFs-10,5147
|
234
234
|
airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=LQQspOQS9oyOx9cGnRIz1mq-8DZCBysyDJDPqjy1HvM,449
|
@@ -457,9 +457,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
|
|
457
457
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=9YDJmnIGFsT51CVQf2tSSvTapGimITjEFGbUTSZAGTI,963
|
458
458
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
459
459
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
460
|
-
airbyte_cdk-7.
|
461
|
-
airbyte_cdk-7.
|
462
|
-
airbyte_cdk-7.
|
463
|
-
airbyte_cdk-7.
|
464
|
-
airbyte_cdk-7.
|
465
|
-
airbyte_cdk-7.
|
460
|
+
airbyte_cdk-7.2.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
461
|
+
airbyte_cdk-7.2.0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
462
|
+
airbyte_cdk-7.2.0.dist-info/METADATA,sha256=ED1_ERExNBHJb7zIlVC9sCkx0QreL_PHmikMB71G7SI,6798
|
463
|
+
airbyte_cdk-7.2.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
464
|
+
airbyte_cdk-7.2.0.dist-info/entry_points.txt,sha256=eLZ2UYvJZGm1s07Pplcs--1Gim60YhZWTb53j_dghwU,195
|
465
|
+
airbyte_cdk-7.2.0.dist-info/RECORD,,
|
{airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/LICENSE.txt
RENAMED
File without changes
|
{airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/LICENSE_SHORT
RENAMED
File without changes
|
File without changes
|
{airbyte_cdk-7.1.0.post4.dev17948197380.dist-info → airbyte_cdk-7.2.0.dist-info}/entry_points.txt
RENAMED
File without changes
|