airbyte-cdk 6.6.6__py3-none-any.whl → 6.6.8__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/source_declarative_manifest/_run.py +2 -1
- airbyte_cdk/config_observation.py +2 -1
- airbyte_cdk/connector.py +1 -0
- airbyte_cdk/connector_builder/connector_builder_handler.py +1 -1
- airbyte_cdk/connector_builder/main.py +2 -1
- airbyte_cdk/destinations/destination.py +2 -1
- airbyte_cdk/destinations/vector_db_based/config.py +2 -1
- airbyte_cdk/destinations/vector_db_based/document_processor.py +4 -3
- airbyte_cdk/destinations/vector_db_based/embedder.py +5 -4
- airbyte_cdk/entrypoint.py +3 -2
- airbyte_cdk/logger.py +2 -1
- airbyte_cdk/models/airbyte_protocol.py +2 -1
- airbyte_cdk/sources/config.py +2 -1
- airbyte_cdk/sources/declarative/auth/jwt.py +1 -0
- airbyte_cdk/sources/declarative/auth/oauth.py +1 -0
- airbyte_cdk/sources/declarative/auth/selective_authenticator.py +1 -0
- airbyte_cdk/sources/declarative/auth/token.py +2 -1
- airbyte_cdk/sources/declarative/auth/token_provider.py +3 -2
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py +6 -4
- airbyte_cdk/sources/declarative/decoders/json_decoder.py +3 -2
- airbyte_cdk/sources/declarative/decoders/noop_decoder.py +1 -0
- airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +1 -0
- airbyte_cdk/sources/declarative/decoders/xml_decoder.py +1 -0
- airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +1 -0
- airbyte_cdk/sources/declarative/extractors/http_selector.py +1 -0
- airbyte_cdk/sources/declarative/extractors/record_selector.py +1 -0
- airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +2 -1
- airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +2 -1
- airbyte_cdk/sources/declarative/interpolation/jinja.py +5 -4
- airbyte_cdk/sources/declarative/manifest_declarative_source.py +4 -3
- airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +1 -1
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +3 -2
- airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +1 -0
- airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +1 -0
- airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +1 -0
- airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +1 -0
- airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +1 -0
- airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +1 -0
- airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +1 -0
- airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +1 -0
- airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +1 -0
- airbyte_cdk/sources/declarative/requesters/http_job_repository.py +2 -1
- airbyte_cdk/sources/declarative/requesters/http_requester.py +1 -0
- airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +1 -0
- airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +1 -0
- airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +1 -0
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +1 -0
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +1 -0
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +1 -0
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +1 -0
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +1 -0
- airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +2 -1
- airbyte_cdk/sources/declarative/requesters/requester.py +1 -0
- airbyte_cdk/sources/declarative/retrievers/async_retriever.py +2 -1
- airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +1 -0
- airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +1 -1
- airbyte_cdk/sources/declarative/transformations/add_fields.py +1 -0
- airbyte_cdk/sources/declarative/transformations/remove_fields.py +1 -0
- airbyte_cdk/sources/declarative/yaml_declarative_source.py +1 -0
- airbyte_cdk/sources/embedded/tools.py +1 -0
- airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +2 -1
- airbyte_cdk/sources/file_based/config/avro_format.py +2 -1
- airbyte_cdk/sources/file_based/config/csv_format.py +2 -1
- airbyte_cdk/sources/file_based/config/excel_format.py +2 -1
- airbyte_cdk/sources/file_based/config/file_based_stream_config.py +2 -1
- airbyte_cdk/sources/file_based/config/jsonl_format.py +2 -1
- airbyte_cdk/sources/file_based/config/parquet_format.py +2 -1
- airbyte_cdk/sources/file_based/config/unstructured_format.py +2 -1
- airbyte_cdk/sources/file_based/file_based_source.py +2 -1
- airbyte_cdk/sources/file_based/file_based_stream_reader.py +2 -1
- airbyte_cdk/sources/file_based/file_types/avro_parser.py +1 -0
- airbyte_cdk/sources/file_based/file_types/csv_parser.py +2 -1
- airbyte_cdk/sources/file_based/file_types/excel_parser.py +5 -5
- airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +2 -1
- airbyte_cdk/sources/file_based/file_types/parquet_parser.py +2 -1
- airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +9 -8
- airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +2 -1
- airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +2 -1
- airbyte_cdk/sources/http_logger.py +1 -0
- airbyte_cdk/sources/streams/call_rate.py +1 -2
- airbyte_cdk/sources/streams/concurrent/abstract_stream.py +2 -1
- airbyte_cdk/sources/streams/concurrent/adapters.py +2 -2
- airbyte_cdk/sources/streams/concurrent/availability_strategy.py +2 -1
- airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +1 -1
- airbyte_cdk/sources/streams/core.py +2 -1
- airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +2 -1
- airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +1 -0
- airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +1 -0
- airbyte_cdk/sources/streams/http/error_handlers/response_models.py +2 -1
- airbyte_cdk/sources/streams/http/http.py +3 -2
- airbyte_cdk/sources/streams/http/http_client.py +34 -2
- airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +2 -1
- airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +1 -0
- airbyte_cdk/sources/utils/schema_helpers.py +3 -2
- airbyte_cdk/sql/secrets.py +2 -1
- airbyte_cdk/sql/shared/sql_processor.py +8 -6
- airbyte_cdk/test/entrypoint_wrapper.py +4 -3
- airbyte_cdk/test/mock_http/mocker.py +1 -0
- airbyte_cdk/utils/schema_inferrer.py +2 -1
- airbyte_cdk/utils/slice_hasher.py +1 -1
- airbyte_cdk/utils/traced_exception.py +2 -1
- {airbyte_cdk-6.6.6.dist-info → airbyte_cdk-6.6.8.dist-info}/METADATA +8 -1
- {airbyte_cdk-6.6.6.dist-info → airbyte_cdk-6.6.8.dist-info}/RECORD +106 -106
- {airbyte_cdk-6.6.6.dist-info → airbyte_cdk-6.6.8.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.6.6.dist-info → airbyte_cdk-6.6.8.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.6.6.dist-info → airbyte_cdk-6.6.8.dist-info}/entry_points.txt +0 -0
@@ -11,6 +11,8 @@ from typing import Any, Callable, Dict, List, Mapping, Optional, Tuple, Union
|
|
11
11
|
import orjson
|
12
12
|
import requests
|
13
13
|
import requests_cache
|
14
|
+
from requests.auth import AuthBase
|
15
|
+
|
14
16
|
from airbyte_cdk.models import (
|
15
17
|
AirbyteMessageSerializer,
|
16
18
|
AirbyteStreamStatus,
|
@@ -43,12 +45,13 @@ from airbyte_cdk.sources.streams.http.rate_limiting import (
|
|
43
45
|
rate_limit_default_backoff_handler,
|
44
46
|
user_defined_backoff_handler,
|
45
47
|
)
|
48
|
+
from airbyte_cdk.sources.utils.types import JsonType
|
49
|
+
from airbyte_cdk.utils.airbyte_secrets_utils import filter_secrets
|
46
50
|
from airbyte_cdk.utils.constants import ENV_REQUEST_CACHE_PATH
|
47
51
|
from airbyte_cdk.utils.stream_status_utils import (
|
48
52
|
as_airbyte_message as stream_status_as_airbyte_message,
|
49
53
|
)
|
50
54
|
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
51
|
-
from requests.auth import AuthBase
|
52
55
|
|
53
56
|
BODY_REQUEST_METHODS = ("GET", "POST", "PUT", "PATCH")
|
54
57
|
|
@@ -333,6 +336,29 @@ class HttpClient:
|
|
333
336
|
|
334
337
|
return response # type: ignore # will either return a valid response of type requests.Response or raise an exception
|
335
338
|
|
339
|
+
def _get_response_body(self, response: requests.Response) -> Optional[JsonType]:
|
340
|
+
"""
|
341
|
+
Extracts and returns the body of an HTTP response.
|
342
|
+
|
343
|
+
This method attempts to parse the response body as JSON. If the response
|
344
|
+
body is not valid JSON, it falls back to decoding the response content
|
345
|
+
as a UTF-8 string. If both attempts fail, it returns None.
|
346
|
+
|
347
|
+
Args:
|
348
|
+
response (requests.Response): The HTTP response object.
|
349
|
+
|
350
|
+
Returns:
|
351
|
+
Optional[JsonType]: The parsed JSON object as a string, the decoded
|
352
|
+
response content as a string, or None if both parsing attempts fail.
|
353
|
+
"""
|
354
|
+
try:
|
355
|
+
return str(response.json())
|
356
|
+
except requests.exceptions.JSONDecodeError:
|
357
|
+
try:
|
358
|
+
return response.content.decode("utf-8")
|
359
|
+
except Exception:
|
360
|
+
return "The Content of the Response couldn't be decoded."
|
361
|
+
|
336
362
|
def _handle_error_resolution(
|
337
363
|
self,
|
338
364
|
response: Optional[requests.Response],
|
@@ -361,12 +387,18 @@ class HttpClient:
|
|
361
387
|
|
362
388
|
if error_resolution.response_action == ResponseAction.FAIL:
|
363
389
|
if response is not None:
|
364
|
-
|
390
|
+
filtered_response_message = filter_secrets(
|
391
|
+
f"Request (body): '{str(request.body)}'. Response (body): '{self._get_response_body(response)}'. Response (headers): '{response.headers}'."
|
392
|
+
)
|
393
|
+
error_message = f"'{request.method}' request to '{request.url}' failed with status code '{response.status_code}' and error message: '{self._error_message_parser.parse_response_error_message(response)}'. {filtered_response_message}"
|
365
394
|
else:
|
366
395
|
error_message = (
|
367
396
|
f"'{request.method}' request to '{request.url}' failed with exception: '{exc}'"
|
368
397
|
)
|
369
398
|
|
399
|
+
# ensure the exception message is emitted before raised
|
400
|
+
self._logger.error(error_message)
|
401
|
+
|
370
402
|
raise MessageRepresentationAirbyteTracedErrors(
|
371
403
|
internal_message=error_message,
|
372
404
|
message=error_resolution.error_message or error_message,
|
@@ -10,12 +10,13 @@ from typing import Any, List, Mapping, MutableMapping, Optional, Tuple, Union
|
|
10
10
|
import backoff
|
11
11
|
import pendulum
|
12
12
|
import requests
|
13
|
+
from requests.auth import AuthBase
|
14
|
+
|
13
15
|
from airbyte_cdk.models import FailureType, Level
|
14
16
|
from airbyte_cdk.sources.http_logger import format_http_message
|
15
17
|
from airbyte_cdk.sources.message import MessageRepository, NoopMessageRepository
|
16
18
|
from airbyte_cdk.utils import AirbyteTracedException
|
17
19
|
from airbyte_cdk.utils.airbyte_secrets_utils import add_to_secrets
|
18
|
-
from requests.auth import AuthBase
|
19
20
|
|
20
21
|
from ..exceptions import DefaultBackoffException
|
21
22
|
|
@@ -10,12 +10,13 @@ import pkgutil
|
|
10
10
|
from typing import Any, ClassVar, Dict, List, Mapping, MutableMapping, Optional, Tuple
|
11
11
|
|
12
12
|
import jsonref
|
13
|
-
from airbyte_cdk.models import ConnectorSpecification, FailureType
|
14
|
-
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
15
13
|
from jsonschema import RefResolver, validate
|
16
14
|
from jsonschema.exceptions import ValidationError
|
17
15
|
from pydantic.v1 import BaseModel, Field
|
18
16
|
|
17
|
+
from airbyte_cdk.models import ConnectorSpecification, FailureType
|
18
|
+
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
19
|
+
|
19
20
|
|
20
21
|
class JsonFileLoader:
|
21
22
|
"""
|
airbyte_cdk/sql/secrets.py
CHANGED
@@ -6,9 +6,10 @@ from __future__ import annotations
|
|
6
6
|
import json
|
7
7
|
from typing import TYPE_CHECKING, Any
|
8
8
|
|
9
|
-
from airbyte_cdk.sql import exceptions as exc
|
10
9
|
from pydantic_core import CoreSchema, core_schema
|
11
10
|
|
11
|
+
from airbyte_cdk.sql import exceptions as exc
|
12
|
+
|
12
13
|
if TYPE_CHECKING:
|
13
14
|
from pydantic import GetCoreSchemaHandler, GetJsonSchemaHandler, ValidationInfo
|
14
15
|
from pydantic.json_schema import JsonSchemaValue
|
@@ -13,6 +13,12 @@ from typing import TYPE_CHECKING, Any, final
|
|
13
13
|
import pandas as pd
|
14
14
|
import sqlalchemy
|
15
15
|
import ulid
|
16
|
+
from airbyte_protocol_dataclasses.models import AirbyteStateMessage
|
17
|
+
from pandas import Index
|
18
|
+
from pydantic import BaseModel, Field
|
19
|
+
from sqlalchemy import Column, Table, and_, create_engine, insert, null, select, text, update
|
20
|
+
from sqlalchemy.exc import ProgrammingError, SQLAlchemyError
|
21
|
+
|
16
22
|
from airbyte_cdk.sql import exceptions as exc
|
17
23
|
from airbyte_cdk.sql._util.hashing import one_way_hash
|
18
24
|
from airbyte_cdk.sql._util.name_normalizers import LowerCaseNormalizer
|
@@ -24,16 +30,10 @@ from airbyte_cdk.sql.constants import (
|
|
24
30
|
)
|
25
31
|
from airbyte_cdk.sql.secrets import SecretString
|
26
32
|
from airbyte_cdk.sql.types import SQLTypeConverter
|
27
|
-
from airbyte_protocol_dataclasses.models import AirbyteStateMessage
|
28
|
-
from pandas import Index
|
29
|
-
from pydantic import BaseModel, Field
|
30
|
-
from sqlalchemy import Column, Table, and_, create_engine, insert, null, select, text, update
|
31
|
-
from sqlalchemy.exc import ProgrammingError, SQLAlchemyError
|
32
33
|
|
33
34
|
if TYPE_CHECKING:
|
34
35
|
from collections.abc import Generator
|
35
36
|
|
36
|
-
from airbyte_cdk.sql.shared.catalog_providers import CatalogProvider
|
37
37
|
from sqlalchemy.engine import Connection, Engine
|
38
38
|
from sqlalchemy.engine.cursor import CursorResult
|
39
39
|
from sqlalchemy.engine.reflection import Inspector
|
@@ -41,6 +41,8 @@ if TYPE_CHECKING:
|
|
41
41
|
from sqlalchemy.sql.elements import TextClause
|
42
42
|
from sqlalchemy.sql.type_api import TypeEngine
|
43
43
|
|
44
|
+
from airbyte_cdk.sql.shared.catalog_providers import CatalogProvider
|
45
|
+
|
44
46
|
|
45
47
|
class SQLRuntimeError(Exception):
|
46
48
|
"""Raised when an SQL operation fails."""
|
@@ -23,6 +23,10 @@ from io import StringIO
|
|
23
23
|
from pathlib import Path
|
24
24
|
from typing import Any, List, Mapping, Optional, Union
|
25
25
|
|
26
|
+
from orjson import orjson
|
27
|
+
from pydantic import ValidationError as V2ValidationError
|
28
|
+
from serpyco_rs import SchemaValidationError
|
29
|
+
|
26
30
|
from airbyte_cdk.entrypoint import AirbyteEntrypoint
|
27
31
|
from airbyte_cdk.exception_handler import assemble_uncaught_exception
|
28
32
|
from airbyte_cdk.logger import AirbyteLogFormatter
|
@@ -40,9 +44,6 @@ from airbyte_cdk.models import (
|
|
40
44
|
Type,
|
41
45
|
)
|
42
46
|
from airbyte_cdk.sources import Source
|
43
|
-
from orjson import orjson
|
44
|
-
from pydantic import ValidationError as V2ValidationError
|
45
|
-
from serpyco_rs import SchemaValidationError
|
46
47
|
|
47
48
|
|
48
49
|
class EntrypointOutput:
|
@@ -5,11 +5,12 @@
|
|
5
5
|
from collections import defaultdict
|
6
6
|
from typing import Any, Dict, List, Mapping, Optional
|
7
7
|
|
8
|
-
from airbyte_cdk.models import AirbyteRecordMessage
|
9
8
|
from genson import SchemaBuilder, SchemaNode
|
10
9
|
from genson.schema.strategies.object import Object
|
11
10
|
from genson.schema.strategies.scalar import Number
|
12
11
|
|
12
|
+
from airbyte_cdk.models import AirbyteRecordMessage
|
13
|
+
|
13
14
|
# schema keywords
|
14
15
|
_TYPE = "type"
|
15
16
|
_NULL_TYPE = "null"
|
@@ -5,6 +5,8 @@ import time
|
|
5
5
|
import traceback
|
6
6
|
from typing import Optional
|
7
7
|
|
8
|
+
from orjson import orjson
|
9
|
+
|
8
10
|
from airbyte_cdk.models import (
|
9
11
|
AirbyteConnectionStatus,
|
10
12
|
AirbyteErrorTraceMessage,
|
@@ -18,7 +20,6 @@ from airbyte_cdk.models import (
|
|
18
20
|
)
|
19
21
|
from airbyte_cdk.models import Type as MessageType
|
20
22
|
from airbyte_cdk.utils.airbyte_secrets_utils import filter_secrets
|
21
|
-
from orjson import orjson
|
22
23
|
|
23
24
|
|
24
25
|
class AirbyteTracedException(Exception):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: airbyte-cdk
|
3
|
-
Version: 6.6.
|
3
|
+
Version: 6.6.8
|
4
4
|
Summary: A framework for writing Airbyte Connectors.
|
5
5
|
Home-page: https://airbyte.com
|
6
6
|
License: MIT
|
@@ -170,6 +170,13 @@ Installing all extras is required to run the full suite of unit tests.
|
|
170
170
|
|
171
171
|
To see all available scripts, run `poetry run poe`.
|
172
172
|
|
173
|
+
#### Formatting the code
|
174
|
+
|
175
|
+
- Iterate on the CDK code locally
|
176
|
+
- Run `poetry run ruff format` to format your changes.
|
177
|
+
|
178
|
+
To see all available `ruff` options, run `poetry run ruff`.
|
179
|
+
|
173
180
|
##### Autogenerated files
|
174
181
|
|
175
182
|
Low-code CDK models are generated from `sources/declarative/declarative_component_schema.yaml`. If
|