airbyte-cdk 6.52.0.dev1__py3-none-any.whl → 6.53.0.post2.dev15405329474__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/declarative_component_schema.yaml +5 -0
- airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +3 -0
- airbyte_cdk/sources/declarative/interpolation/macros.py +13 -0
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +6 -1
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +5 -1
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/METADATA +1 -1
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/RECORD +11 -11
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/entry_points.txt +0 -0
@@ -3630,6 +3630,9 @@ definitions:
|
|
3630
3630
|
delimiter:
|
3631
3631
|
type: string
|
3632
3632
|
default: ","
|
3633
|
+
set_empty_cell_to_none:
|
3634
|
+
type: boolean
|
3635
|
+
default: false
|
3633
3636
|
AsyncJobStatusMap:
|
3634
3637
|
description: Matches the api job status to Async Job Status.
|
3635
3638
|
type: object
|
@@ -4056,6 +4059,8 @@ definitions:
|
|
4056
4059
|
description: The expected data type of the value. If omitted, the type will be inferred from the value provided.
|
4057
4060
|
"$ref": "#/definitions/ValueType"
|
4058
4061
|
create_or_update:
|
4062
|
+
title: Create or Update
|
4063
|
+
description: Determines whether to create a new path if it doesn't exist (true) or only update existing paths (false). When set to true, the resolver will create new paths in the stream template if they don't exist. When false (default), it will only update existing paths.
|
4059
4064
|
type: boolean
|
4060
4065
|
default: false
|
4061
4066
|
$parameters:
|
@@ -103,6 +103,7 @@ class CsvParser(Parser):
|
|
103
103
|
# TODO: migrate implementation to re-use file-base classes
|
104
104
|
encoding: Optional[str] = "utf-8"
|
105
105
|
delimiter: Optional[str] = ","
|
106
|
+
set_empty_cell_to_none: Optional[bool] = False
|
106
107
|
|
107
108
|
def _get_delimiter(self) -> Optional[str]:
|
108
109
|
"""
|
@@ -121,6 +122,8 @@ class CsvParser(Parser):
|
|
121
122
|
text_data = TextIOWrapper(data, encoding=self.encoding) # type: ignore
|
122
123
|
reader = csv.DictReader(text_data, delimiter=self._get_delimiter() or ",")
|
123
124
|
for row in reader:
|
125
|
+
if self.set_empty_cell_to_none:
|
126
|
+
row = {k: (None if v == "" else v) for k, v in row.items()}
|
124
127
|
yield row
|
125
128
|
|
126
129
|
|
@@ -6,6 +6,7 @@ import builtins
|
|
6
6
|
import datetime
|
7
7
|
import typing
|
8
8
|
from typing import Optional, Union
|
9
|
+
from urllib.parse import quote_plus
|
9
10
|
|
10
11
|
import isodate
|
11
12
|
import pytz
|
@@ -182,6 +183,17 @@ def format_datetime(
|
|
182
183
|
return DatetimeParser().format(dt=dt_datetime, format=format)
|
183
184
|
|
184
185
|
|
186
|
+
def sanitize_url(value: str) -> str:
|
187
|
+
"""
|
188
|
+
Sanitizes a value by via urllib.parse.quote_plus
|
189
|
+
|
190
|
+
Usage:
|
191
|
+
`"{{ sanitize_url('https://example.com/path?query=value') }}"`
|
192
|
+
"""
|
193
|
+
sanitization_strategy = quote_plus
|
194
|
+
return sanitization_strategy(value)
|
195
|
+
|
196
|
+
|
185
197
|
_macros_list = [
|
186
198
|
now_utc,
|
187
199
|
today_utc,
|
@@ -193,5 +205,6 @@ _macros_list = [
|
|
193
205
|
format_datetime,
|
194
206
|
today_with_timezone,
|
195
207
|
str_to_datetime,
|
208
|
+
sanitize_url,
|
196
209
|
]
|
197
210
|
macros = {f.__name__: f for f in _macros_list}
|
@@ -1383,6 +1383,7 @@ class CsvDecoder(BaseModel):
|
|
1383
1383
|
type: Literal["CsvDecoder"]
|
1384
1384
|
encoding: Optional[str] = "utf-8"
|
1385
1385
|
delimiter: Optional[str] = ","
|
1386
|
+
set_empty_cell_to_none: Optional[bool] = False
|
1386
1387
|
|
1387
1388
|
|
1388
1389
|
class AsyncJobStatusMap(BaseModel):
|
@@ -1478,7 +1479,11 @@ class ComponentMappingDefinition(BaseModel):
|
|
1478
1479
|
description="The expected data type of the value. If omitted, the type will be inferred from the value provided.",
|
1479
1480
|
title="Value Type",
|
1480
1481
|
)
|
1481
|
-
create_or_update: Optional[bool] =
|
1482
|
+
create_or_update: Optional[bool] = Field(
|
1483
|
+
False,
|
1484
|
+
description="Determines whether to create a new path if it doesn't exist (true) or only update existing paths (false). When set to true, the resolver will create new paths in the stream template if they don't exist. When false (default), it will only update existing paths.",
|
1485
|
+
title="Create or Update",
|
1486
|
+
)
|
1482
1487
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
1483
1488
|
|
1484
1489
|
|
@@ -2646,7 +2646,11 @@ class ModelToComponentFactory:
|
|
2646
2646
|
elif isinstance(model, JsonlDecoderModel):
|
2647
2647
|
return JsonLineParser()
|
2648
2648
|
elif isinstance(model, CsvDecoderModel):
|
2649
|
-
return CsvParser(
|
2649
|
+
return CsvParser(
|
2650
|
+
encoding=model.encoding,
|
2651
|
+
delimiter=model.delimiter,
|
2652
|
+
set_empty_cell_to_none=model.set_empty_cell_to_none,
|
2653
|
+
)
|
2650
2654
|
elif isinstance(model, GzipDecoderModel):
|
2651
2655
|
return GzipParser(
|
2652
2656
|
inner_parser=ModelToComponentFactory._get_parser(model.decoder, config)
|
{airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/RECORD
RENAMED
@@ -89,11 +89,11 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=OKor1mDD
|
|
89
89
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
90
90
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
|
91
91
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
92
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
92
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=sFHlde6dHSjs2q7lRF6Tv2_9tR2bsVzrjxAIQqi0lNg,177464
|
93
93
|
airbyte_cdk/sources/declarative/declarative_source.py,sha256=qmyMnnet92eGc3C22yBtpvD5UZjqdhsAafP_zxI5wp8,1814
|
94
94
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=dCRlddBUSaJmBNBz1pSO1r2rTw8AP5d2_vlmIeGs2gg,10767
|
95
95
|
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
|
96
|
-
airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py,sha256=
|
96
|
+
airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py,sha256=71_84brT5nSQs-h2QnFfcz66ecgVnXsvTo1AHI-wEtc,8055
|
97
97
|
airbyte_cdk/sources/declarative/decoders/decoder.py,sha256=1PeKwuMK8x9dsA2zqUjSVinEWVSEgYcUS6npiW3aC2c,855
|
98
98
|
airbyte_cdk/sources/declarative/decoders/decoder_parser.py,sha256=e0be6kfzvbnhmcou-AuloFTSoLxiV9sG9YaglWo5mto,714
|
99
99
|
airbyte_cdk/sources/declarative/decoders/json_decoder.py,sha256=BdWpXXPhEGf_zknggJmhojLosmxuw51RBVTS0jvdCPc,2080
|
@@ -126,21 +126,21 @@ airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py,sha
|
|
126
126
|
airbyte_cdk/sources/declarative/interpolation/interpolated_string.py,sha256=CQkHqGlfa87G6VYMtBAQWin7ECKpfMdrDcg0JO5_rhc,3212
|
127
127
|
airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=9IoeuWam3L6GyN10L6U8xNWXmkt9cnahSDNkez1OmFY,982
|
128
128
|
airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=UQeuS4Vpyp4hlOn-R3tRyeBX0e9IoV6jQ6gH-Jz8lY0,7182
|
129
|
-
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=
|
129
|
+
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=xRcmjape4_WGmKMJpmBsKY0k4OHJDM46Hv3V-dlSz3w,5640
|
130
130
|
airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=aS_YxqUWgxyfyzwAZpV736RFg-m5a0sn-V7PPMBGVr4,24660
|
131
131
|
airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
132
132
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=V2lpYE9LJKvz6BUViHk4vaRGndxNABmPbDCtyYdkqaE,4013
|
133
133
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
134
134
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
135
135
|
airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py,sha256=Imnj3yef0aqRdLfaUxkIYISUb8YkiPrRH_wBd-x8HjM,5999
|
136
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
136
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=36uZnvm9la9gEr4FqkjxA_l1-3TiApCWLfPApP9vBcw,125817
|
137
137
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
138
138
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
|
139
139
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=wnRUP0Xeru9Rbu5OexXSDN9QWDo8YU4tT9M2LDVOgGA,802
|
140
140
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=2UdpCz3yi7ISZTyqkQXSSy3dMxeyOWqV7OlAS5b9GVg,11568
|
141
141
|
airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py,sha256=laBy7ebjA-PiNwc-50U4FHvMqS_mmHvnabxgFs4CjGw,17069
|
142
142
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=pJmg78vqE5VfUrF_KJnWjucQ4k9IWFULeAxHCowrHXE,6806
|
143
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
143
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=9BhRsOhCk3FxkqOlNDNhJIDeLKr3BP_nJZAV9sTXekU,174846
|
144
144
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
|
145
145
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
|
146
146
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
@@ -419,9 +419,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
|
|
419
419
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
420
420
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
421
421
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
422
|
-
airbyte_cdk-6.
|
423
|
-
airbyte_cdk-6.
|
424
|
-
airbyte_cdk-6.
|
425
|
-
airbyte_cdk-6.
|
426
|
-
airbyte_cdk-6.
|
427
|
-
airbyte_cdk-6.
|
422
|
+
airbyte_cdk-6.53.0.post2.dev15405329474.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
423
|
+
airbyte_cdk-6.53.0.post2.dev15405329474.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
424
|
+
airbyte_cdk-6.53.0.post2.dev15405329474.dist-info/METADATA,sha256=t1npAyfmm609rLEMi0ic_4o1FXCo5D4Zh4BiiO92qB4,6364
|
425
|
+
airbyte_cdk-6.53.0.post2.dev15405329474.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
426
|
+
airbyte_cdk-6.53.0.post2.dev15405329474.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
|
427
|
+
airbyte_cdk-6.53.0.post2.dev15405329474.dist-info/RECORD,,
|
{airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/LICENSE.txt
RENAMED
File without changes
|
File without changes
|
{airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.0.post2.dev15405329474.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|