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.
@@ -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.0"
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(futures.ThreadPoolExecutor(max_workers=10))
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[key].type, key, mapped_data, v)
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
- def map_defined_data_type(data_type, k, mapped_data, v):
230
- handler = _TYPE_HANDLERS.get(data_type)
231
- if handler:
232
- mapped_data[k] = handler(v)
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: {data_type}. Please use valid data types.")
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.0
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=T0icwbaYQoj9hUiOY8zuJCOLU5i3t1Flc3woIq_IDRY,20768
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=jQyjLNW3L8PfTL8J5VAw68s240euXbBVnGPz0QJ2_AY,11023
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.0.dist-info/METADATA,sha256=vQ1G788vqs7AdJy8JFyDWInLjoUntEZBlzR9LkipE7E,3150
15
- fivetran_connector_sdk-1.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
- fivetran_connector_sdk-1.5.0.dist-info/entry_points.txt,sha256=uQn0KPnFlQmXJfxlk0tifdNsSXWfVlnAFzNqjXZM_xM,57
17
- fivetran_connector_sdk-1.5.0.dist-info/top_level.txt,sha256=-_xk2MFY4psIh7jw1lJePMzFb5-vask8_ZtX-UzYWUI,23
18
- fivetran_connector_sdk-1.5.0.dist-info/RECORD,,
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,,