fivetran-connector-sdk 1.5.0__py3-none-any.whl → 1.5.1__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.
- fivetran_connector_sdk/__init__.py +9 -2
- fivetran_connector_sdk/operations.py +43 -29
- {fivetran_connector_sdk-1.5.0.dist-info → fivetran_connector_sdk-1.5.1.dist-info}/METADATA +1 -1
- {fivetran_connector_sdk-1.5.0.dist-info → fivetran_connector_sdk-1.5.1.dist-info}/RECORD +7 -7
- {fivetran_connector_sdk-1.5.0.dist-info → fivetran_connector_sdk-1.5.1.dist-info}/WHEEL +0 -0
- {fivetran_connector_sdk-1.5.0.dist-info → fivetran_connector_sdk-1.5.1.dist-info}/entry_points.txt +0 -0
- {fivetran_connector_sdk-1.5.0.dist-info → fivetran_connector_sdk-1.5.1.dist-info}/top_level.txt +0 -0
@@ -39,8 +39,9 @@ from fivetran_connector_sdk.connector_helper import (
|
|
39
39
|
|
40
40
|
# Version format: <major_version>.<minor_version>.<patch_version>
|
41
41
|
# (where Major Version = 1 for GA, Minor Version is incremental MM from Jan 25 onwards, Patch Version is incremental within a month)
|
42
|
-
__version__ = "1.5.
|
42
|
+
__version__ = "1.5.1"
|
43
43
|
TESTER_VERSION = TESTER_VER
|
44
|
+
MAX_MESSAGE_LENGTH = 32 * 1024 * 1024 # 32MB
|
44
45
|
|
45
46
|
__all__ = [cls.__name__ for cls in [Logging, Operations]]
|
46
47
|
|
@@ -177,7 +178,13 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
|
|
177
178
|
if not constants.DEBUGGING:
|
178
179
|
print_library_log(f"Running on fivetran_connector_sdk: {__version__}")
|
179
180
|
|
180
|
-
server = grpc.server(
|
181
|
+
server = grpc.server(
|
182
|
+
futures.ThreadPoolExecutor(max_workers=10),
|
183
|
+
options=[
|
184
|
+
('grpc.max_send_message_length', MAX_MESSAGE_LENGTH),
|
185
|
+
('grpc.max_receive_message_length', MAX_MESSAGE_LENGTH),
|
186
|
+
]
|
187
|
+
)
|
181
188
|
connector_sdk_pb2_grpc.add_ConnectorServicer_to_server(self, server)
|
182
189
|
server.add_insecure_port("[::]:" + str(port))
|
183
190
|
server.start()
|
@@ -18,29 +18,6 @@ from fivetran_connector_sdk.helpers import (
|
|
18
18
|
from fivetran_connector_sdk.logger import Logging
|
19
19
|
from fivetran_connector_sdk.protos import connector_sdk_pb2, common_pb2
|
20
20
|
|
21
|
-
_TYPE_HANDLERS = {
|
22
|
-
common_pb2.DataType.BOOLEAN: lambda val: common_pb2.ValueType(bool=val),
|
23
|
-
common_pb2.DataType.SHORT: lambda val: common_pb2.ValueType(short=val),
|
24
|
-
common_pb2.DataType.INT: lambda val: common_pb2.ValueType(int=val),
|
25
|
-
common_pb2.DataType.LONG: lambda val: common_pb2.ValueType(long=val),
|
26
|
-
common_pb2.DataType.DECIMAL: lambda val: common_pb2.ValueType(decimal=val),
|
27
|
-
common_pb2.DataType.FLOAT: lambda val: common_pb2.ValueType(float=val),
|
28
|
-
common_pb2.DataType.DOUBLE: lambda val: common_pb2.ValueType(double=val),
|
29
|
-
common_pb2.DataType.NAIVE_DATE: lambda val: common_pb2.ValueType(naive_date=
|
30
|
-
timestamp_pb2.Timestamp().FromDatetime(
|
31
|
-
datetime.strptime(val, "%Y-%m-%d")) or timestamp_pb2.Timestamp()),
|
32
|
-
common_pb2.DataType.NAIVE_DATETIME: lambda val: common_pb2.ValueType(naive_datetime=
|
33
|
-
timestamp_pb2.Timestamp().FromDatetime(
|
34
|
-
datetime.strptime(val + ".0" if '.' not in val else val, "%Y-%m-%dT%H:%M:%S.%f")) or timestamp_pb2.Timestamp()),
|
35
|
-
common_pb2.DataType.UTC_DATETIME: lambda val: common_pb2.ValueType(utc_datetime=
|
36
|
-
timestamp_pb2.Timestamp().FromDatetime(
|
37
|
-
val if isinstance(val, datetime) else _parse_datetime_str(val)) or timestamp_pb2.Timestamp()),
|
38
|
-
common_pb2.DataType.BINARY: lambda val: common_pb2.ValueType(binary=val),
|
39
|
-
common_pb2.DataType.XML: lambda val: common_pb2.ValueType(xml=val),
|
40
|
-
common_pb2.DataType.STRING: lambda val: common_pb2.ValueType(string=val if isinstance(val, str) else str(val)),
|
41
|
-
common_pb2.DataType.JSON: lambda val: common_pb2.ValueType(json=json.dumps(val))
|
42
|
-
}
|
43
|
-
|
44
21
|
class Operations:
|
45
22
|
@staticmethod
|
46
23
|
def upsert(table: str, data: dict) -> list[connector_sdk_pb2.UpdateResponse]:
|
@@ -197,7 +174,7 @@ def _map_data_to_columns(data: dict, columns: dict) -> dict:
|
|
197
174
|
if v is None:
|
198
175
|
mapped_data[key] = common_pb2.ValueType(null=True)
|
199
176
|
elif (key in columns) and columns[key].type != common_pb2.DataType.UNSPECIFIED:
|
200
|
-
map_defined_data_type(columns
|
177
|
+
map_defined_data_type(columns, key, mapped_data, v)
|
201
178
|
else:
|
202
179
|
map_inferred_data_type(key, mapped_data, v)
|
203
180
|
return mapped_data
|
@@ -226,12 +203,49 @@ def map_inferred_data_type(k, mapped_data, v):
|
|
226
203
|
# Convert arbitrary objects to string
|
227
204
|
mapped_data[k] = common_pb2.ValueType(string=str(v))
|
228
205
|
|
229
|
-
|
230
|
-
|
231
|
-
if
|
232
|
-
mapped_data[k] =
|
206
|
+
|
207
|
+
def map_defined_data_type(columns, k, mapped_data, v):
|
208
|
+
if columns[k].type == common_pb2.DataType.BOOLEAN:
|
209
|
+
mapped_data[k] = common_pb2.ValueType(bool=v)
|
210
|
+
elif columns[k].type == common_pb2.DataType.SHORT:
|
211
|
+
mapped_data[k] = common_pb2.ValueType(short=v)
|
212
|
+
elif columns[k].type == common_pb2.DataType.INT:
|
213
|
+
mapped_data[k] = common_pb2.ValueType(int=v)
|
214
|
+
elif columns[k].type == common_pb2.DataType.LONG:
|
215
|
+
mapped_data[k] = common_pb2.ValueType(long=v)
|
216
|
+
elif columns[k].type == common_pb2.DataType.DECIMAL:
|
217
|
+
mapped_data[k] = common_pb2.ValueType(decimal=v)
|
218
|
+
elif columns[k].type == common_pb2.DataType.FLOAT:
|
219
|
+
mapped_data[k] = common_pb2.ValueType(float=v)
|
220
|
+
elif columns[k].type == common_pb2.DataType.DOUBLE:
|
221
|
+
mapped_data[k] = common_pb2.ValueType(double=v)
|
222
|
+
elif columns[k].type == common_pb2.DataType.NAIVE_DATE:
|
223
|
+
timestamp = timestamp_pb2.Timestamp()
|
224
|
+
dt = datetime.strptime(v, "%Y-%m-%d")
|
225
|
+
timestamp.FromDatetime(dt)
|
226
|
+
mapped_data[k] = common_pb2.ValueType(naive_date=timestamp)
|
227
|
+
elif columns[k].type == common_pb2.DataType.NAIVE_DATETIME:
|
228
|
+
if '.' not in v: v = v + ".0"
|
229
|
+
timestamp = timestamp_pb2.Timestamp()
|
230
|
+
dt = datetime.strptime(v, "%Y-%m-%dT%H:%M:%S.%f")
|
231
|
+
timestamp.FromDatetime(dt)
|
232
|
+
mapped_data[k] = common_pb2.ValueType(naive_datetime=timestamp)
|
233
|
+
elif columns[k].type == common_pb2.DataType.UTC_DATETIME:
|
234
|
+
timestamp = timestamp_pb2.Timestamp()
|
235
|
+
dt = v if isinstance(v, datetime) else _parse_datetime_str(v)
|
236
|
+
timestamp.FromDatetime(dt)
|
237
|
+
mapped_data[k] = common_pb2.ValueType(utc_datetime=timestamp)
|
238
|
+
elif columns[k].type == common_pb2.DataType.BINARY:
|
239
|
+
mapped_data[k] = common_pb2.ValueType(binary=v)
|
240
|
+
elif columns[k].type == common_pb2.DataType.XML:
|
241
|
+
mapped_data[k] = common_pb2.ValueType(xml=v)
|
242
|
+
elif columns[k].type == common_pb2.DataType.STRING:
|
243
|
+
incoming = v if isinstance(v, str) else str(v)
|
244
|
+
mapped_data[k] = common_pb2.ValueType(string=incoming)
|
245
|
+
elif columns[k].type == common_pb2.DataType.JSON:
|
246
|
+
mapped_data[k] = common_pb2.ValueType(json=json.dumps(v))
|
233
247
|
else:
|
234
|
-
raise ValueError(f"Unsupported data type encountered: {
|
248
|
+
raise ValueError(f"Unsupported data type encountered: {columns[k].type}. Please use valid data types.")
|
235
249
|
|
236
250
|
def _parse_datetime_str(dt):
|
237
251
|
return datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S.%f%z" if '.' in dt else "%Y-%m-%dT%H:%M:%S%z")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: fivetran_connector_sdk
|
3
|
-
Version: 1.5.
|
3
|
+
Version: 1.5.1
|
4
4
|
Summary: Build custom connectors on Fivetran platform
|
5
5
|
Author-email: Fivetran <developers@fivetran.com>
|
6
6
|
Project-URL: Homepage, https://fivetran.com/docs/connectors/connector-sdk
|
@@ -1,9 +1,9 @@
|
|
1
|
-
fivetran_connector_sdk/__init__.py,sha256=
|
1
|
+
fivetran_connector_sdk/__init__.py,sha256=kJvmt5ngLmwZ9yxKtg-rD10lSz1NjHuUdLgllGK78Xc,21015
|
2
2
|
fivetran_connector_sdk/connector_helper.py,sha256=4NnHlr40dUPdta9gctN0WE8OYBKnZDEJKaurh8e45UE,38960
|
3
3
|
fivetran_connector_sdk/constants.py,sha256=tY8-fwB7O11orifFcDIELxfvYNz9-bNUhh6f5cXXws0,2287
|
4
4
|
fivetran_connector_sdk/helpers.py,sha256=5rPlqN4uYYLvmNLq0-awp3Xqv1LwyEUqp-TGfXsb9ts,12386
|
5
5
|
fivetran_connector_sdk/logger.py,sha256=arI6eNUfm_AvE3EV_PmbSRzrpTVpZKJ8pZMtDn93TKU,3018
|
6
|
-
fivetran_connector_sdk/operations.py,sha256=
|
6
|
+
fivetran_connector_sdk/operations.py,sha256=fg-6JtRoIrklBEzRroYNqj2xoXmWA1q-v9bQQA5SATs,11060
|
7
7
|
fivetran_connector_sdk/protos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
fivetran_connector_sdk/protos/common_pb2.py,sha256=kUwVcyZHgLigNR-KnHZn7dHrlxaMnUXqzprsRx6T72M,6831
|
9
9
|
fivetran_connector_sdk/protos/common_pb2.pyi,sha256=S0hdIzoXyyOKD5cjiGeDDLYpQ9J3LjAvu4rCj1JvJWE,9038
|
@@ -11,8 +11,8 @@ fivetran_connector_sdk/protos/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXH
|
|
11
11
|
fivetran_connector_sdk/protos/connector_sdk_pb2.py,sha256=9Ke_Ti1s0vAeXapfXT-EryrT2-TSGQb8mhs4gxTpUMk,7732
|
12
12
|
fivetran_connector_sdk/protos/connector_sdk_pb2.pyi,sha256=FWYxRgshEF3QDYAE0TM_mv4N2gGvkxCH_uPpxnMc4oA,8406
|
13
13
|
fivetran_connector_sdk/protos/connector_sdk_pb2_grpc.py,sha256=ZfJLp4DW7uP4pFOZ74s_wQ6tD3eIPi-08UfnLwe4tzo,7163
|
14
|
-
fivetran_connector_sdk-1.5.
|
15
|
-
fivetran_connector_sdk-1.5.
|
16
|
-
fivetran_connector_sdk-1.5.
|
17
|
-
fivetran_connector_sdk-1.5.
|
18
|
-
fivetran_connector_sdk-1.5.
|
14
|
+
fivetran_connector_sdk-1.5.1.dist-info/METADATA,sha256=d-RWY3rrZr_fPBWn4Iimos9TP-8Fd6ZtQqazFqHtHtM,3150
|
15
|
+
fivetran_connector_sdk-1.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
16
|
+
fivetran_connector_sdk-1.5.1.dist-info/entry_points.txt,sha256=uQn0KPnFlQmXJfxlk0tifdNsSXWfVlnAFzNqjXZM_xM,57
|
17
|
+
fivetran_connector_sdk-1.5.1.dist-info/top_level.txt,sha256=-_xk2MFY4psIh7jw1lJePMzFb5-vask8_ZtX-UzYWUI,23
|
18
|
+
fivetran_connector_sdk-1.5.1.dist-info/RECORD,,
|
File without changes
|
{fivetran_connector_sdk-1.5.0.dist-info → fivetran_connector_sdk-1.5.1.dist-info}/entry_points.txt
RENAMED
File without changes
|
{fivetran_connector_sdk-1.5.0.dist-info → fivetran_connector_sdk-1.5.1.dist-info}/top_level.txt
RENAMED
File without changes
|