airbyte-cdk 6.48.8__py3-none-any.whl → 6.48.10__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/cli/airbyte_cdk/_secrets.py +107 -13
- airbyte_cdk/cli/airbyte_cdk/exceptions.py +23 -0
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml +12 -2
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +10 -0
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +19 -2
- airbyte_cdk/sources/declarative/schema/composite_schema_loader.py +31 -0
- {airbyte_cdk-6.48.8.dist-info → airbyte_cdk-6.48.10.dist-info}/METADATA +1 -1
- {airbyte_cdk-6.48.8.dist-info → airbyte_cdk-6.48.10.dist-info}/RECORD +12 -10
- {airbyte_cdk-6.48.8.dist-info → airbyte_cdk-6.48.10.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.48.8.dist-info → airbyte_cdk-6.48.10.dist-info}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.48.8.dist-info → airbyte_cdk-6.48.10.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.48.8.dist-info → airbyte_cdk-6.48.10.dist-info}/entry_points.txt +0 -0
@@ -43,6 +43,7 @@ from click import style
|
|
43
43
|
from rich.console import Console
|
44
44
|
from rich.table import Table
|
45
45
|
|
46
|
+
from airbyte_cdk.cli.airbyte_cdk.exceptions import ConnectorSecretWithNoValidVersionsError
|
46
47
|
from airbyte_cdk.utils.connector_paths import (
|
47
48
|
resolve_connector_name,
|
48
49
|
resolve_connector_name_and_directory,
|
@@ -131,24 +132,46 @@ def fetch(
|
|
131
132
|
)
|
132
133
|
# Fetch and write secrets
|
133
134
|
secret_count = 0
|
135
|
+
exceptions = []
|
136
|
+
|
134
137
|
for secret in secrets:
|
135
138
|
secret_file_path = _get_secret_filepath(
|
136
139
|
secrets_dir=secrets_dir,
|
137
140
|
secret=secret,
|
138
141
|
)
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
142
|
+
try:
|
143
|
+
_write_secret_file(
|
144
|
+
secret=secret,
|
145
|
+
client=client,
|
146
|
+
file_path=secret_file_path,
|
147
|
+
connector_name=connector_name,
|
148
|
+
gcp_project_id=gcp_project_id,
|
149
|
+
)
|
150
|
+
click.echo(f"Secret written to: {secret_file_path.absolute()!s}", err=True)
|
151
|
+
secret_count += 1
|
152
|
+
except ConnectorSecretWithNoValidVersionsError as e:
|
153
|
+
exceptions.append(e)
|
154
|
+
click.echo(
|
155
|
+
f"Failed to retrieve secret '{e.secret_name}': No enabled version found", err=True
|
156
|
+
)
|
157
|
+
|
158
|
+
if secret_count == 0 and not exceptions:
|
159
|
+
click.echo(
|
160
|
+
f"No secrets found for connector: '{connector_name}'",
|
161
|
+
err=True,
|
143
162
|
)
|
144
|
-
click.echo(f"Secret written to: {secret_file_path.absolute()!s}", err=True)
|
145
|
-
secret_count += 1
|
146
163
|
|
147
|
-
if
|
164
|
+
if exceptions:
|
165
|
+
error_message = f"Failed to retrieve {len(exceptions)} secret(s)"
|
148
166
|
click.echo(
|
149
|
-
|
167
|
+
style(
|
168
|
+
error_message,
|
169
|
+
fg="red",
|
170
|
+
),
|
150
171
|
err=True,
|
151
172
|
)
|
173
|
+
if secret_count == 0:
|
174
|
+
raise exceptions[0]
|
152
175
|
|
153
176
|
if not print_ci_secrets_masks:
|
154
177
|
return
|
@@ -230,9 +253,8 @@ def list_(
|
|
230
253
|
table.add_column("Created", justify="left", style="blue", overflow="fold")
|
231
254
|
for secret in secrets:
|
232
255
|
full_secret_name = secret.name
|
233
|
-
secret_name = full_secret_name
|
234
|
-
|
235
|
-
secret_url = f"https://console.cloud.google.com/security/secret-manager/secret/{secret_name}/versions?hl=en&project={gcp_project_id}"
|
256
|
+
secret_name = _extract_secret_name(full_secret_name)
|
257
|
+
secret_url = _get_secret_url(secret_name, gcp_project_id)
|
236
258
|
table.add_row(
|
237
259
|
f"[link={secret_url}]{secret_name}[/link]",
|
238
260
|
"\n".join([f"{k}={v}" for k, v in secret.labels.items()]),
|
@@ -242,6 +264,43 @@ def list_(
|
|
242
264
|
console.print(table)
|
243
265
|
|
244
266
|
|
267
|
+
def _extract_secret_name(secret_name: str) -> str:
|
268
|
+
"""Extract the secret name from a fully qualified secret path.
|
269
|
+
|
270
|
+
Handles different formats of secret names:
|
271
|
+
- Full path: "projects/project-id/secrets/SECRET_NAME"
|
272
|
+
- Already extracted: "SECRET_NAME"
|
273
|
+
|
274
|
+
Args:
|
275
|
+
secret_name: The secret name or path
|
276
|
+
|
277
|
+
Returns:
|
278
|
+
str: The extracted secret name without project prefix
|
279
|
+
"""
|
280
|
+
if "/secrets/" in secret_name:
|
281
|
+
return secret_name.split("/secrets/")[-1]
|
282
|
+
return secret_name
|
283
|
+
|
284
|
+
|
285
|
+
def _get_secret_url(secret_name: str, gcp_project_id: str) -> str:
|
286
|
+
"""Generate a URL for a secret in the GCP Secret Manager console.
|
287
|
+
|
288
|
+
Note: This URL itself does not contain secrets or sensitive information.
|
289
|
+
The URL itself is only useful for valid logged-in users of the project, and it
|
290
|
+
safe to print this URL in logs.
|
291
|
+
|
292
|
+
Args:
|
293
|
+
secret_name: The name of the secret in GCP.
|
294
|
+
gcp_project_id: The GCP project ID.
|
295
|
+
|
296
|
+
Returns:
|
297
|
+
str: URL to the secret in the GCP console
|
298
|
+
"""
|
299
|
+
# Ensure we have just the secret name without the project prefix
|
300
|
+
secret_name = _extract_secret_name(secret_name)
|
301
|
+
return f"https://console.cloud.google.com/security/secret-manager/secret/{secret_name}/versions?hl=en&project={gcp_project_id}"
|
302
|
+
|
303
|
+
|
245
304
|
def _fetch_secret_handles(
|
246
305
|
connector_name: str,
|
247
306
|
gcp_project_id: str = AIRBYTE_INTERNAL_GCP_PROJECT,
|
@@ -272,9 +331,44 @@ def _write_secret_file(
|
|
272
331
|
secret: "Secret", # type: ignore
|
273
332
|
client: "secretmanager.SecretManagerServiceClient", # type: ignore
|
274
333
|
file_path: Path,
|
334
|
+
connector_name: str,
|
335
|
+
gcp_project_id: str,
|
275
336
|
) -> None:
|
276
|
-
|
277
|
-
|
337
|
+
"""Write the most recent enabled version of a secret to a file.
|
338
|
+
|
339
|
+
Lists all enabled versions of the secret and selects the most recent one.
|
340
|
+
Raises ConnectorSecretWithNoValidVersionsError if no enabled versions are found.
|
341
|
+
|
342
|
+
Args:
|
343
|
+
secret: The secret to write to a file
|
344
|
+
client: The Secret Manager client
|
345
|
+
file_path: The path to write the secret to
|
346
|
+
connector_name: The name of the connector
|
347
|
+
gcp_project_id: The GCP project ID
|
348
|
+
|
349
|
+
Raises:
|
350
|
+
ConnectorSecretWithNoValidVersionsError: If no enabled version is found
|
351
|
+
"""
|
352
|
+
# List all enabled versions of the secret.
|
353
|
+
response = client.list_secret_versions(
|
354
|
+
request={"parent": secret.name, "filter": "state:ENABLED"}
|
355
|
+
)
|
356
|
+
|
357
|
+
# The API returns versions pre-sorted in descending order, with the
|
358
|
+
# 0th item being the latest version.
|
359
|
+
versions = list(response)
|
360
|
+
|
361
|
+
if not versions:
|
362
|
+
secret_name = _extract_secret_name(secret.name)
|
363
|
+
raise ConnectorSecretWithNoValidVersionsError(
|
364
|
+
connector_name=connector_name,
|
365
|
+
secret_name=secret_name,
|
366
|
+
gcp_project_id=gcp_project_id,
|
367
|
+
)
|
368
|
+
|
369
|
+
enabled_version = versions[0]
|
370
|
+
|
371
|
+
response = client.access_secret_version(name=enabled_version.name)
|
278
372
|
file_path.write_text(response.payload.data.decode("UTF-8"))
|
279
373
|
file_path.chmod(0o600) # default to owner read/write only
|
280
374
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
"""Exceptions for the Airbyte CDK CLI."""
|
3
|
+
|
4
|
+
from dataclasses import dataclass
|
5
|
+
|
6
|
+
|
7
|
+
@dataclass(kw_only=True)
|
8
|
+
class ConnectorSecretWithNoValidVersionsError(Exception):
|
9
|
+
"""Error when a connector secret has no valid versions."""
|
10
|
+
|
11
|
+
connector_name: str
|
12
|
+
secret_name: str
|
13
|
+
gcp_project_id: str
|
14
|
+
|
15
|
+
def __str__(self) -> str:
|
16
|
+
"""Return a string representation of the exception."""
|
17
|
+
from airbyte_cdk.cli.airbyte_cdk._secrets import _get_secret_url
|
18
|
+
|
19
|
+
url = _get_secret_url(self.secret_name, self.gcp_project_id)
|
20
|
+
return (
|
21
|
+
f"No valid versions found for secret '{self.secret_name}' in connector '{self.connector_name}'. "
|
22
|
+
f"Please check the following URL for more information:\n- {url}"
|
23
|
+
)
|
@@ -1421,12 +1421,22 @@ definitions:
|
|
1421
1421
|
default: ""
|
1422
1422
|
schema_loader:
|
1423
1423
|
title: Schema Loader
|
1424
|
-
description:
|
1424
|
+
description:
|
1425
|
+
One or many schema loaders can be used to retrieve the schema for the current stream. When
|
1426
|
+
multiple schema loaders are defined, schema properties will be merged together. Schema
|
1427
|
+
loaders defined first taking precedence in the event of a conflict.
|
1425
1428
|
anyOf:
|
1426
1429
|
- "$ref": "#/definitions/InlineSchemaLoader"
|
1427
1430
|
- "$ref": "#/definitions/DynamicSchemaLoader"
|
1428
1431
|
- "$ref": "#/definitions/JsonFileSchemaLoader"
|
1429
1432
|
- "$ref": "#/definitions/CustomSchemaLoader"
|
1433
|
+
- type: array
|
1434
|
+
items:
|
1435
|
+
anyOf:
|
1436
|
+
- "$ref": "#/definitions/InlineSchemaLoader"
|
1437
|
+
- "$ref": "#/definitions/DynamicSchemaLoader"
|
1438
|
+
- "$ref": "#/definitions/JsonFileSchemaLoader"
|
1439
|
+
- "$ref": "#/definitions/CustomSchemaLoader"
|
1430
1440
|
# TODO we have move the transformation to the RecordSelector level in the code but kept this here for
|
1431
1441
|
# compatibility reason. We should eventually move this to align with the code.
|
1432
1442
|
transformations:
|
@@ -4362,4 +4372,4 @@ interpolation:
|
|
4362
4372
|
regex: The regular expression to search for. It must include a capture group.
|
4363
4373
|
return_type: str
|
4364
4374
|
examples:
|
4365
|
-
- '{{ "goodbye, cruel world" | regex_search("goodbye,\s(.*)$") }} -> "cruel world"'
|
4375
|
+
- '{{ "goodbye, cruel world" | regex_search("goodbye,\s(.*)$") }} -> "cruel world"'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
|
1
3
|
# generated by datamodel-codegen:
|
2
4
|
# filename: declarative_component_schema.yaml
|
3
5
|
|
@@ -2151,6 +2153,14 @@ class DeclarativeStream(BaseModel):
|
|
2151
2153
|
DynamicSchemaLoader,
|
2152
2154
|
JsonFileSchemaLoader,
|
2153
2155
|
CustomSchemaLoader,
|
2156
|
+
List[
|
2157
|
+
Union[
|
2158
|
+
InlineSchemaLoader,
|
2159
|
+
DynamicSchemaLoader,
|
2160
|
+
JsonFileSchemaLoader,
|
2161
|
+
CustomSchemaLoader,
|
2162
|
+
]
|
2163
|
+
],
|
2154
2164
|
]
|
2155
2165
|
] = Field(
|
2156
2166
|
None,
|
@@ -504,6 +504,7 @@ from airbyte_cdk.sources.declarative.schema import (
|
|
504
504
|
SchemaTypeIdentifier,
|
505
505
|
TypesMap,
|
506
506
|
)
|
507
|
+
from airbyte_cdk.sources.declarative.schema.composite_schema_loader import CompositeSchemaLoader
|
507
508
|
from airbyte_cdk.sources.declarative.spec import Spec
|
508
509
|
from airbyte_cdk.sources.declarative.stream_slicers import StreamSlicer
|
509
510
|
from airbyte_cdk.sources.declarative.transformations import (
|
@@ -1914,9 +1915,25 @@ class ModelToComponentFactory:
|
|
1914
1915
|
else:
|
1915
1916
|
state_transformations = []
|
1916
1917
|
|
1917
|
-
|
1918
|
+
schema_loader: Union[
|
1919
|
+
CompositeSchemaLoader,
|
1920
|
+
DefaultSchemaLoader,
|
1921
|
+
DynamicSchemaLoader,
|
1922
|
+
InlineSchemaLoader,
|
1923
|
+
JsonFileSchemaLoader,
|
1924
|
+
]
|
1925
|
+
if model.schema_loader and isinstance(model.schema_loader, list):
|
1926
|
+
nested_schema_loaders = [
|
1927
|
+
self._create_component_from_model(model=nested_schema_loader, config=config)
|
1928
|
+
for nested_schema_loader in model.schema_loader
|
1929
|
+
]
|
1930
|
+
schema_loader = CompositeSchemaLoader(
|
1931
|
+
schema_loaders=nested_schema_loaders, parameters={}
|
1932
|
+
)
|
1933
|
+
elif model.schema_loader:
|
1918
1934
|
schema_loader = self._create_component_from_model(
|
1919
|
-
model=model.schema_loader,
|
1935
|
+
model=model.schema_loader, # type: ignore # If defined, schema_loader is guaranteed not to be a list and will be one of the existing base models
|
1936
|
+
config=config,
|
1920
1937
|
)
|
1921
1938
|
else:
|
1922
1939
|
options = model.parameters or {}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from dataclasses import InitVar, dataclass
|
6
|
+
from typing import Any, Dict, List, Mapping
|
7
|
+
|
8
|
+
from airbyte_cdk.sources.declarative.schema.schema_loader import SchemaLoader
|
9
|
+
|
10
|
+
|
11
|
+
@dataclass
|
12
|
+
class CompositeSchemaLoader(SchemaLoader):
|
13
|
+
"""
|
14
|
+
Schema loader that consists of multiple schema loaders that are combined into a single
|
15
|
+
schema. Subsequent schemas do not overwrite existing values so the schema loaders with
|
16
|
+
a higher priority should be defined first.
|
17
|
+
"""
|
18
|
+
|
19
|
+
schema_loaders: List[SchemaLoader]
|
20
|
+
parameters: InitVar[Mapping[str, Any]]
|
21
|
+
|
22
|
+
def get_json_schema(self) -> Mapping[str, Any]:
|
23
|
+
combined_schema: Dict[str, Any] = {
|
24
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
25
|
+
"type": ["null", "object"],
|
26
|
+
"properties": {},
|
27
|
+
}
|
28
|
+
for schema_loader in self.schema_loaders:
|
29
|
+
schema_properties = schema_loader.get_json_schema()["properties"]
|
30
|
+
combined_schema["properties"] = {**schema_properties, **combined_schema["properties"]}
|
31
|
+
return combined_schema
|
@@ -4,8 +4,9 @@ airbyte_cdk/cli/airbyte_cdk/__init__.py,sha256=8IoEcbdYr7CMAh97Xut5__uHH9vV4LKUt
|
|
4
4
|
airbyte_cdk/cli/airbyte_cdk/_connector.py,sha256=drKb_EXJOFX-cSeLwJB8WXE-lesOL0dx2ziWSmW3Jkg,5187
|
5
5
|
airbyte_cdk/cli/airbyte_cdk/_image.py,sha256=AkBEZrRYXEwvhW7hPOPRWeYEZutzi2PIzjpl7_yaE8I,2890
|
6
6
|
airbyte_cdk/cli/airbyte_cdk/_manifest.py,sha256=aFdeeWgek7oXR3YfZPxk7kBZ64Blmsr0dAXN6BVGiIA,482
|
7
|
-
airbyte_cdk/cli/airbyte_cdk/_secrets.py,sha256=
|
7
|
+
airbyte_cdk/cli/airbyte_cdk/_secrets.py,sha256=1IqVz-csoMJoKajSX4DzoWrngswuNHBPkzzchQggAeE,17010
|
8
8
|
airbyte_cdk/cli/airbyte_cdk/_version.py,sha256=ohZNIktLFk91sdzqFW5idaNrZAPX2dIRnz---_fcKOE,352
|
9
|
+
airbyte_cdk/cli/airbyte_cdk/exceptions.py,sha256=bsGmlWN6cXL2jCD1WYAZMqFmK1OLg2xLrcC_60KHSeA,803
|
9
10
|
airbyte_cdk/cli/source_declarative_manifest/__init__.py,sha256=-0ST722Nj65bgRokzpzPkD1NBBW5CytEHFUe38cB86Q,91
|
10
11
|
airbyte_cdk/cli/source_declarative_manifest/_run.py,sha256=9qtbjt-I_stGWzWX6yVUKO_eE-Ga7g-uTuibML9qLBs,8330
|
11
12
|
airbyte_cdk/cli/source_declarative_manifest/spec.json,sha256=Earc1L6ngcdIr514oFQlUoOxdF4RHqtUyStSIAquXdY,554
|
@@ -88,7 +89,7 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=GoZJ8Oxb
|
|
88
89
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
89
90
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
|
90
91
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
91
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
92
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=7tB0-d4lbI97GB5lBI6-qezxLoKZN4QeN_4Vht9TDFo,167270
|
92
93
|
airbyte_cdk/sources/declarative/declarative_source.py,sha256=qmyMnnet92eGc3C22yBtpvD5UZjqdhsAafP_zxI5wp8,1814
|
93
94
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=dCRlddBUSaJmBNBz1pSO1r2rTw8AP5d2_vlmIeGs2gg,10767
|
94
95
|
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
|
@@ -132,14 +133,14 @@ airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migrati
|
|
132
133
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
133
134
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
134
135
|
airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py,sha256=Imnj3yef0aqRdLfaUxkIYISUb8YkiPrRH_wBd-x8HjM,5999
|
135
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
136
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=FjZ2WrItKCqMVxc14XRbMPu11Jhl1Ds3Lugy_2wPoQ8,118235
|
136
137
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
137
138
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
|
138
139
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=wnRUP0Xeru9Rbu5OexXSDN9QWDo8YU4tT9M2LDVOgGA,802
|
139
140
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=RUyFZS0zslLb7UfQrvqMC--k5CVLNSp7zHw6kbosvKE,9688
|
140
141
|
airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py,sha256=laBy7ebjA-PiNwc-50U4FHvMqS_mmHvnabxgFs4CjGw,17069
|
141
142
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=pJmg78vqE5VfUrF_KJnWjucQ4k9IWFULeAxHCowrHXE,6806
|
142
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
143
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=88ko64Gdfipyg9Uegz-XVCErWms0x5nHNZHCO7CRhVA,167112
|
143
144
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
|
144
145
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
|
145
146
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
@@ -208,6 +209,7 @@ airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py,sha
|
|
208
209
|
airbyte_cdk/sources/declarative/retrievers/retriever.py,sha256=XPLs593Xv8c5cKMc37XzUAYmzlXd1a7eSsspM-CMuWA,1696
|
209
210
|
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=O7qpM71L1_ATIbEKa8y658jdiSJSPw0KmuGKgnaruQU,31008
|
210
211
|
airbyte_cdk/sources/declarative/schema/__init__.py,sha256=xU45UvM5O4c1PSM13UHpCdh5hpW3HXy9vRRGEiAC1rg,795
|
212
|
+
airbyte_cdk/sources/declarative/schema/composite_schema_loader.py,sha256=ymGbvxS_QyGc4nnjEyRo5ch8bVedELO41PAUxKXZyMw,1113
|
211
213
|
airbyte_cdk/sources/declarative/schema/default_schema_loader.py,sha256=UnbzlExmwoQiVV8zDg4lhAEaqA_0pRfwbMRe8yqOuWk,1834
|
212
214
|
airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py,sha256=J8Q_iJYhcSQLWyt0bTZCbDAGpxt9G8FCc6Q9jtGsNzw,10703
|
213
215
|
airbyte_cdk/sources/declarative/schema/inline_schema_loader.py,sha256=bVETE10hRsatRJq3R3BeyRR0wIoK3gcP1gcpVRQ_P5U,464
|
@@ -406,9 +408,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
|
|
406
408
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
407
409
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
408
410
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
409
|
-
airbyte_cdk-6.48.
|
410
|
-
airbyte_cdk-6.48.
|
411
|
-
airbyte_cdk-6.48.
|
412
|
-
airbyte_cdk-6.48.
|
413
|
-
airbyte_cdk-6.48.
|
414
|
-
airbyte_cdk-6.48.
|
411
|
+
airbyte_cdk-6.48.10.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
412
|
+
airbyte_cdk-6.48.10.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
413
|
+
airbyte_cdk-6.48.10.dist-info/METADATA,sha256=j6-W6yWj9uT1PuC976m8r6xZy0S1ifMec_7m7qIRLF8,6344
|
414
|
+
airbyte_cdk-6.48.10.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
415
|
+
airbyte_cdk-6.48.10.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
|
416
|
+
airbyte_cdk-6.48.10.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|