fivetran-connector-sdk 0.4.27.1__py3-none-any.whl → 0.6.6.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.
@@ -1,29 +1,35 @@
1
1
  import argparse
2
- import docker
3
2
  import grpc
4
3
  import importlib.util
5
4
  import inspect
6
5
  import json
7
6
  import os
7
+ import platform
8
8
  import requests as rq
9
+ import subprocess
9
10
  import sys
10
11
 
11
12
  from concurrent import futures
12
13
  from datetime import datetime
13
- from docker.types import Mount
14
14
  from google.protobuf import timestamp_pb2
15
+ from zipfile import ZipFile, ZIP_DEFLATED
15
16
 
16
17
  from fivetran_connector_sdk.protos import common_pb2
17
18
  from fivetran_connector_sdk.protos import connector_sdk_pb2
18
19
  from fivetran_connector_sdk.protos import connector_sdk_pb2_grpc
19
20
 
20
- TESTER_IMAGE_NAME = "fivetrandocker/sdk-connector-tester"
21
- TESTER_IMAGE_VERSION = "024.0408.001"
22
- TESTER_CONTAINER_NAME = "fivetran_connector_tester"
21
+ MAC_OS = "mac"
22
+ WIN_OS = "windows"
23
+ LINUX_OS = "linux"
23
24
 
24
- BUILDER_IMAGE_NAME = "fivetrandocker/connector-sdk-binary-builder"
25
- BUILDER_IMAGE_VERSION = "024.0304.002"
26
- BUILDER_CONTAINER_NAME = "fivetran_binary_builder"
25
+ TESTER_VERSION = "024.0408.001"
26
+ TESTER_FILENAME = "sdk_connector_tester.jar"
27
+ VERSION_FILENAME = "version.txt"
28
+ UPLOAD_FILENAME = "code.zip"
29
+ ROOT_LOCATION = ".ft_sdk_connector_tester"
30
+ OUTPUT_FILES_DIR = "files"
31
+
32
+ EXCLUDED_FILES = ['.DS_Store', UPLOAD_FILENAME]
27
33
 
28
34
  DEBUGGING = False
29
35
  TABLES = {}
@@ -46,21 +52,19 @@ class Operations:
46
52
  TABLES[table] = new_table
47
53
 
48
54
  responses.append(connector_sdk_pb2.UpdateResponse(
49
- operation=connector_sdk_pb2.Operation(
50
- schema_change=connector_sdk_pb2.SchemaChange(
51
- without_schema=common_pb2.TableList(tables=[new_table])))))
55
+ schema_change=connector_sdk_pb2.SchemaChange(
56
+ without_schema=common_pb2.TableList(tables=[new_table]))))
52
57
 
53
58
  mapped_data = _map_data_to_columns(data, columns)
54
59
  record = connector_sdk_pb2.Record(
55
60
  schema_name=None,
56
61
  table_name=table,
57
- type=common_pb2.OpType.UPSERT,
62
+ type=common_pb2.RecordType.UPSERT,
58
63
  data=mapped_data
59
64
  )
60
65
 
61
66
  responses.append(
62
- connector_sdk_pb2.UpdateResponse(
63
- operation=connector_sdk_pb2.Operation(record=record)))
67
+ connector_sdk_pb2.UpdateResponse(record=record))
64
68
 
65
69
  return responses
66
70
 
@@ -73,12 +77,11 @@ class Operations:
73
77
  record = connector_sdk_pb2.Record(
74
78
  schema_name=None,
75
79
  table_name=table,
76
- type=common_pb2.OpType.UPDATE,
80
+ type=common_pb2.RecordType.UPDATE,
77
81
  data=mapped_data
78
82
  )
79
83
 
80
- return connector_sdk_pb2.UpdateResponse(
81
- operation=connector_sdk_pb2.Operation(record=record))
84
+ return connector_sdk_pb2.UpdateResponse(record=record)
82
85
 
83
86
  @staticmethod
84
87
  def delete(table: str, keys: dict) -> connector_sdk_pb2.UpdateResponse:
@@ -89,20 +92,18 @@ class Operations:
89
92
  record = connector_sdk_pb2.Record(
90
93
  schema_name=None,
91
94
  table_name=table,
92
- type=common_pb2.OpType.DELETE,
95
+ type=common_pb2.RecordType.DELETE,
93
96
  data=mapped_data
94
97
  )
95
98
 
96
- return connector_sdk_pb2.UpdateResponse(
97
- operation=connector_sdk_pb2.Operation(record=record))
98
-
99
+ return connector_sdk_pb2.UpdateResponse(record=record)
99
100
 
100
101
  @staticmethod
101
102
  def checkpoint(state: dict) -> connector_sdk_pb2.UpdateResponse:
102
103
  _yield_check(inspect.stack())
103
104
  return connector_sdk_pb2.UpdateResponse(
104
- operation=connector_sdk_pb2.Operation(checkpoint=connector_sdk_pb2.Checkpoint(
105
- state_json=json.dumps(state))))
105
+ checkpoint=connector_sdk_pb2.Checkpoint(
106
+ state_json=json.dumps(state)))
106
107
 
107
108
 
108
109
  def _get_columns(table: str) -> dict:
@@ -229,7 +230,7 @@ def _check_dict(incoming: dict, string_only: bool = False):
229
230
  return incoming
230
231
 
231
232
 
232
- class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
233
+ class Connector(connector_sdk_pb2_grpc.SourceConnectorServicer):
233
234
  def __init__(self, update, schema=None):
234
235
  self.schema_method = schema
235
236
  self.update_method = update
@@ -255,11 +256,10 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
255
256
  }
256
257
  group_id, group_name = self.__get_group_info(group, deploy_key)
257
258
  print(f"Deploying '{project_path}' to '{group_name}/{connection}'")
258
- self.__write_run_py(project_path)
259
- # TODO: we need to do this step on the server (upload code instead)
260
- self.__create_standalone_binary(project_path)
261
- upload_file_path = os.path.join(project_path, "dist", "__run")
262
- if not self.__upload(upload_file_path, deploy_key,group_id,connection):
259
+ upload_file_path = self.__create_upload_file(project_path)
260
+ upload_result = self.__upload(upload_file_path, deploy_key,group_id,connection)
261
+ os.remove(upload_file_path)
262
+ if not upload_result:
263
263
  os._exit(1)
264
264
  connection_id = self.__get_connection_id(connection, group, group_id, deploy_key)
265
265
  if connection_id:
@@ -325,58 +325,53 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
325
325
  })
326
326
  return response
327
327
 
328
- @staticmethod
329
- def __create_standalone_binary(project_path: str):
330
- print("Preparing artifacts ..")
331
- print("1 of 4 .. ", end="", flush=True)
332
- docker_client = docker.from_env()
333
- image = f"{BUILDER_IMAGE_NAME}:{BUILDER_IMAGE_VERSION}"
334
- result = docker_client.images.list(image)
335
- if not result:
336
- # Pull the builder image if missing
337
- docker_client.images.pull(BUILDER_IMAGE_NAME, BUILDER_IMAGE_VERSION, platform="linux/amd64")
338
-
339
- for container in docker_client.containers.list(all=True):
340
- if container.name == BUILDER_CONTAINER_NAME:
341
- if container.status == "running":
342
- print("ERROR: Another deploy process is running")
343
- os._exit(1)
344
-
345
- container = None
346
- try:
347
- # TODO: Check responses in each step and look for "success" phrases
348
- container = docker_client.containers.run(
349
- image=image,
350
- name=BUILDER_CONTAINER_NAME,
351
- command="/bin/sh",
352
- mounts=[Mount("/myapp", project_path, read_only=False, type="bind")],
353
- tty=True,
354
- detach=True,
355
- working_dir="/myapp",
356
- remove=True)
357
- print("✓")
358
-
359
- print("2 of 4 .. ", end="", flush=True)
360
- resp = container.exec_run("pip install fivetran_connector_sdk")
361
- print("✓")
362
-
363
- print("3 of 4 .. ", end="", flush=True)
364
- if os.path.isfile(os.path.join(project_path, "requirements.txt")):
365
- resp = container.exec_run("pip install -r requirements.txt")
366
- print("✓")
367
-
368
- print("4 of 4 .. ", end="", flush=True)
369
- resp = container.exec_run("rm __run")
370
- resp = container.exec_run("pyinstaller --onefile --clean __run.py")
371
- print("✓")
372
-
373
- if not os.path.isfile(os.path.join(project_path, "dist", "__run")):
374
- print("Failed to create deployment file")
375
- os._exit(1)
328
+ def __create_upload_file(self, project_path: str) -> str:
329
+ print("Packaging project for upload ..")
330
+ zip_file_path = self.__zip_folder(project_path)
331
+ print("")
332
+ return zip_file_path
333
+
334
+ def __zip_folder(self, project_path: str) -> str:
335
+ upload_filepath = os.path.join(project_path, UPLOAD_FILENAME)
336
+
337
+ with ZipFile(upload_filepath, 'w', ZIP_DEFLATED) as zipf:
338
+ for root, files in self.__dir_walker(project_path):
339
+ for file in files:
340
+ file_path = os.path.join(root, file)
341
+ arcname = os.path.relpath(file_path, project_path)
342
+ zipf.write(file_path, arcname)
343
+
344
+ # with ZipFile(upload_filepath, 'w', ZIP_DEFLATED) as zip_file:
345
+ # for root, folders, files in os.walk(project_path):
346
+ # for folder_name in folders:
347
+ # if folder_name == OUTPUT_FILES_DIR: continue
348
+ # absolute_path = os.path.join(root, folder_name)
349
+ # relative_path = absolute_path.replace(project_path + os.sep, '')
350
+ # zip_file.write(absolute_path, relative_path)
351
+ # for file in files:
352
+ # if file in EXCLUDED_FILES: continue
353
+ # absolute_path = os.path.join(root, file)
354
+ # relative_path = absolute_path.replace(project_path + os.sep, '')
355
+ # zip_file.write(absolute_path, relative_path)
356
+ #
357
+ return upload_filepath
358
+
359
+ def __dir_walker(self, top):
360
+ dirs, files = [], []
361
+ for name in os.listdir(top):
362
+ path = os.path.join(top, name)
363
+ if os.path.isdir(path):
364
+ if name != OUTPUT_FILES_DIR:
365
+ dirs.append(name)
366
+ else:
367
+ if name not in EXCLUDED_FILES:
368
+ files.append(name)
376
369
 
377
- finally:
378
- if container:
379
- container.stop()
370
+ yield top, files
371
+ for name in dirs:
372
+ new_path = os.path.join(top, name)
373
+ for x in self.__dir_walker(new_path):
374
+ yield x
380
375
 
381
376
  @staticmethod
382
377
  def __upload(local_path: str, deploy_key: str, group_id: str, connection: str) -> bool:
@@ -392,16 +387,15 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
392
387
  return False
393
388
 
394
389
  @staticmethod
395
- def __write_run_py(project_path: str):
396
- with open(os.path.join(project_path, "__run.py"), "w") as fo:
397
- fo.writelines([
398
- "import sys\n",
399
- "from connector import connector\n",
400
- "if len(sys.argv) == 3 and sys.argv[1] == '--port':\n",
401
- " server = connector.run(port=int(sys.argv[2]))\n",
402
- "else:\n",
403
- " server = connector.run()\n"
404
- ])
390
+ def __get_os_name() -> str:
391
+ os_sysname = platform.system().lower()
392
+ if os_sysname.startswith("darwin"):
393
+ return MAC_OS
394
+ elif os_sysname.startswith("windows"):
395
+ return WIN_OS
396
+ elif os_sysname.startswith("linux"):
397
+ return LINUX_OS
398
+ raise ValueError(f"Unrecognized OS: {os_sysname}")
405
399
 
406
400
  @staticmethod
407
401
  def __get_group_info(group: str, deploy_key: str) -> tuple[str, str]:
@@ -440,7 +434,7 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
440
434
  self.state = _check_dict(state)
441
435
 
442
436
  server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
443
- connector_sdk_pb2_grpc.add_ConnectorServicer_to_server(self, server)
437
+ connector_sdk_pb2_grpc.add_SourceConnectorServicer_to_server(self, server)
444
438
  server.add_insecure_port("[::]:" + str(port))
445
439
  server.start()
446
440
  print("Connector started, listening on " + str(port))
@@ -454,56 +448,86 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
454
448
  DEBUGGING = True
455
449
 
456
450
  project_path = os.getcwd() if project_path is None else project_path
457
- print(f"Debugging connector: {project_path}")
451
+ print(f"Debugging connector at: {project_path}")
452
+
453
+ os_name = self.__get_os_name()
454
+ tester_root_dir = os.path.join(os.path.expanduser("~"), ROOT_LOCATION)
455
+ java_exe = self.__java_exe(tester_root_dir, os_name)
456
+ if not os.path.isdir(tester_root_dir):
457
+ # create folder in HOME directory
458
+ os.makedirs(tester_root_dir)
459
+
460
+ version_file = os.path.join(tester_root_dir, VERSION_FILENAME)
461
+ if os.path.isfile(version_file):
462
+ # TODO: Check version number & upgrade if necessary
463
+ pass
464
+ else:
465
+ print(f"Downloading connector tester (version {TESTER_VERSION}) .. ", end="", flush=True)
466
+ # download tester zip for the local OS
467
+ download_filename = f"sdk-connector-tester-{os_name}-{TESTER_VERSION}.zip"
468
+ download_filepath = os.path.join(tester_root_dir, download_filename)
469
+ download_url = f"https://github.com/fivetran/fivetran_sdk_tools/releases/download/v{TESTER_VERSION}/{download_filename}"
470
+ r = rq.get(download_url)
471
+ with open(download_filepath, 'wb') as fo:
472
+ fo.write(r.content)
473
+ # unzip it
474
+ with ZipFile(download_filepath, 'r') as z_object:
475
+ z_object.extractall(path=tester_root_dir)
476
+ # delete tester zip
477
+ os.remove(download_filepath)
478
+ # make java binary executable
479
+ import stat
480
+ st = os.stat(java_exe)
481
+ os.chmod(java_exe, st.st_mode | stat.S_IEXEC)
482
+ print("✓")
483
+
484
+ print(f"Running connector code..")
458
485
  server = self.run(port, configuration, state)
459
486
 
460
487
  # Uncomment this to run the tester manually
461
488
  #server.wait_for_termination()
462
489
 
463
- docker_client = docker.from_env()
464
- image = f"{TESTER_IMAGE_NAME}:{TESTER_IMAGE_VERSION}"
465
- result = docker_client.images.list(image)
466
- # Pull the tester image if missing
467
- if not result:
468
- print(f"Downloading connector tester {TESTER_IMAGE_VERSION} .. ", end="", flush=True)
469
- docker_client.images.pull(TESTER_IMAGE_NAME, TESTER_IMAGE_VERSION, platform="linux/amd64")
470
- print("✓")
471
-
472
490
  error = False
473
491
  try:
474
- for container in docker_client.containers.list(all=True):
475
- if container.name == TESTER_CONTAINER_NAME:
476
- if container.status == "running":
477
- container.stop()
478
- else:
479
- container.remove()
480
- break
481
-
482
- working_dir = os.path.join(project_path, "files")
483
- try:
484
- os.mkdir(working_dir)
485
- except FileExistsError:
486
- pass
487
-
488
- container = docker_client.containers.run(
489
- image=image,
490
- name=TESTER_CONTAINER_NAME,
491
- command="--connector-sdk=true",
492
- mounts=[Mount("/data", working_dir, read_only=False, type="bind")],
493
- network="host",
494
- remove=True,
495
- detach=True,
496
- environment=["GRPC_HOSTNAME=host.docker.internal"])
497
-
498
- for line in container.attach(stdout=True, stderr=True, stream=True):
499
- msg = line.decode("utf-8")
500
- print(msg, end="")
501
- if ("Exception in thread" in msg) or ("SEVERE:" in msg):
502
- error = True
492
+ print(f"Starting connector tester..")
493
+ for log_msg in self.__run_tester(java_exe, tester_root_dir, project_path):
494
+ print(log_msg, end="")
495
+
496
+ except:
497
+ import traceback
498
+ print(traceback.format_exc())
499
+ error = True
503
500
 
504
501
  finally:
505
502
  server.stop(grace=2.0)
506
- return not error
503
+ return error
504
+
505
+ @staticmethod
506
+ def __java_exe(location: str, os_name: str):
507
+ java_exe_base = os.path.join(location, "bin", "java")
508
+ return f"{java_exe_base}.exe" if os_name == WIN_OS else java_exe_base
509
+
510
+ @staticmethod
511
+ def __run_tester(java_exe: str, root_dir: str, project_path: str):
512
+ working_dir = os.path.join(project_path, OUTPUT_FILES_DIR)
513
+ try:
514
+ os.mkdir(working_dir)
515
+ except FileExistsError:
516
+ pass
517
+
518
+ cmd = [java_exe,
519
+ "-jar",
520
+ os.path.join(root_dir, TESTER_FILENAME),
521
+ "--connector-sdk=true",
522
+ f"--working-dir={working_dir}"]
523
+
524
+ popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
525
+ for stdout_line in iter(popen.stdout.readline, ""):
526
+ yield stdout_line
527
+ popen.stdout.close()
528
+ return_code = popen.wait()
529
+ if return_code:
530
+ raise subprocess.CalledProcessError(return_code, cmd)
507
531
 
508
532
  # -- Methods below override ConnectorServicer methods
509
533
  def ConfigurationForm(self, request, context):
@@ -554,8 +578,12 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
554
578
  column.type = common_pb2.DataType.BOOLEAN
555
579
  elif type.upper() == "SHORT":
556
580
  column.type = common_pb2.DataType.SHORT
581
+ elif type.upper() == "INT":
582
+ column.type = common_pb2.DataType.SHORT
557
583
  elif type.upper() == "LONG":
558
584
  column.type = common_pb2.DataType.LONG
585
+ elif type.upper() == "DECIMAL":
586
+ raise ValueError("DECIMAL data type missing precision and scale")
559
587
  elif type.upper() == "FLOAT":
560
588
  column.type = common_pb2.DataType.FLOAT
561
589
  elif type.upper() == "DOUBLE":
@@ -1 +0,0 @@
1
-
@@ -14,52 +14,58 @@ _sym_db = _symbol_database.Default()
14
14
  from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommon.proto\x12\x0c\x66ivetran_sdk\x1a\x1fgoogle/protobuf/timestamp.proto\"\x1a\n\x18\x43onfigurationFormRequest\"\xbb\x01\n\x19\x43onfigurationFormResponse\x12\"\n\x1aschema_selection_supported\x18\x01 \x01(\x08\x12!\n\x19table_selection_supported\x18\x02 \x01(\x08\x12\'\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x17.fivetran_sdk.FormField\x12.\n\x05tests\x18\x04 \x03(\x0b\x32\x1f.fivetran_sdk.ConfigurationTest\"\x85\x02\n\tFormField\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08required\x18\x03 \x01(\x08\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01\x88\x01\x01\x12-\n\ntext_field\x18\x05 \x01(\x0e\x32\x17.fivetran_sdk.TextFieldH\x00\x12\x35\n\x0e\x64ropdown_field\x18\x06 \x01(\x0b\x32\x1b.fivetran_sdk.DropdownFieldH\x00\x12\x31\n\x0ctoggle_field\x18\x07 \x01(\x0b\x32\x19.fivetran_sdk.ToggleFieldH\x00\x42\x06\n\x04typeB\x0e\n\x0c_description\"\'\n\rDropdownField\x12\x16\n\x0e\x64ropdown_field\x18\x01 \x03(\t\"\r\n\x0bToggleField\"0\n\x11\x43onfigurationTest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\"\x96\x01\n\x0bTestRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x43\n\rconfiguration\x18\x02 \x03(\x0b\x32,.fivetran_sdk.TestRequest.ConfigurationEntry\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"@\n\x0cTestResponse\x12\x11\n\x07success\x18\x01 \x01(\x08H\x00\x12\x11\n\x07\x66\x61ilure\x18\x02 \x01(\tH\x00\x42\n\n\x08response\"3\n\nSchemaList\x12%\n\x07schemas\x18\x01 \x03(\x0b\x32\x14.fivetran_sdk.Schema\"0\n\tTableList\x12#\n\x06tables\x18\x01 \x03(\x0b\x32\x13.fivetran_sdk.Table\";\n\x06Schema\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.fivetran_sdk.Table\"1\n\rDecimalParams\x12\x11\n\tprecision\x18\x01 \x01(\r\x12\r\n\x05scale\x18\x02 \x01(\r\"\xf9\x02\n\tValueType\x12\x0e\n\x04null\x18\x01 \x01(\x08H\x00\x12\x0e\n\x04\x62ool\x18\x02 \x01(\x08H\x00\x12\x0f\n\x05short\x18\x03 \x01(\x05H\x00\x12\r\n\x03int\x18\x04 \x01(\x05H\x00\x12\x0e\n\x04long\x18\x05 \x01(\x03H\x00\x12\x0f\n\x05\x66loat\x18\x06 \x01(\x02H\x00\x12\x10\n\x06\x64ouble\x18\x07 \x01(\x01H\x00\x12\x30\n\nnaive_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x34\n\x0enaive_datetime\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x32\n\x0cutc_datetime\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x11\n\x07\x64\x65\x63imal\x18\x0b \x01(\tH\x00\x12\x10\n\x06\x62inary\x18\x0c \x01(\x0cH\x00\x12\x10\n\x06string\x18\r \x01(\tH\x00\x12\x0e\n\x04json\x18\x0e \x01(\tH\x00\x12\r\n\x03xml\x18\x0f \x01(\tH\x00\x42\x07\n\x05inner\"<\n\x05Table\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\x07\x63olumns\x18\x02 \x03(\x0b\x32\x14.fivetran_sdk.Column\"\x90\x01\n\x06\x43olumn\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x04type\x18\x02 \x01(\x0e\x32\x16.fivetran_sdk.DataType\x12\x13\n\x0bprimary_key\x18\x03 \x01(\x08\x12\x31\n\x07\x64\x65\x63imal\x18\x04 \x01(\x0b\x32\x1b.fivetran_sdk.DecimalParamsH\x00\x88\x01\x01\x42\n\n\x08_decimal*4\n\tTextField\x12\r\n\tPlainText\x10\x00\x12\x0c\n\x08Password\x10\x01\x12\n\n\x06Hidden\x10\x02*\xcb\x01\n\x08\x44\x61taType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07\x42OOLEAN\x10\x01\x12\t\n\x05SHORT\x10\x02\x12\x07\n\x03INT\x10\x03\x12\x08\n\x04LONG\x10\x04\x12\x0b\n\x07\x44\x45\x43IMAL\x10\x05\x12\t\n\x05\x46LOAT\x10\x06\x12\n\n\x06\x44OUBLE\x10\x07\x12\x0e\n\nNAIVE_DATE\x10\x08\x12\x12\n\x0eNAIVE_DATETIME\x10\t\x12\x10\n\x0cUTC_DATETIME\x10\n\x12\n\n\x06\x42INARY\x10\x0b\x12\x07\n\x03XML\x10\x0c\x12\n\n\x06STRING\x10\r\x12\x08\n\x04JSON\x10\x0e*:\n\x06OpType\x12\n\n\x06UPSERT\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x12\x0c\n\x08TRUNCATE\x10\x03\x42\x1fH\x01P\x01Z\x19\x66ivetran.com/fivetran_sdkb\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommon.proto\x12\x0f\x66ivetran_sdk.v2\x1a\x1fgoogle/protobuf/timestamp.proto\"\x1a\n\x18\x43onfigurationFormRequest\"\xc1\x01\n\x19\x43onfigurationFormResponse\x12\"\n\x1aschema_selection_supported\x18\x01 \x01(\x08\x12!\n\x19table_selection_supported\x18\x02 \x01(\x08\x12*\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x1a.fivetran_sdk.v2.FormField\x12\x31\n\x05tests\x18\x04 \x03(\x0b\x32\".fivetran_sdk.v2.ConfigurationTest\"n\n\tFormField\x12(\n\x06single\x18\x01 \x01(\x0b\x32\x16.fivetran_sdk.v2.FieldH\x00\x12.\n\tfield_set\x18\x02 \x01(\x0b\x32\x19.fivetran_sdk.v2.FieldSetH\x00\x42\x07\n\x05\x66ield\"\xe2\x02\n\x05\x46ield\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08required\x18\x03 \x01(\x08\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rdefault_value\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0bplaceholder\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x30\n\ntext_field\x18\x07 \x01(\x0e\x32\x1a.fivetran_sdk.v2.TextFieldH\x00\x12\x38\n\x0e\x64ropdown_field\x18\x08 \x01(\x0b\x32\x1e.fivetran_sdk.v2.DropdownFieldH\x00\x12\x34\n\x0ctoggle_field\x18\t \x01(\x0b\x32\x1c.fivetran_sdk.v2.ToggleFieldH\x00\x42\x06\n\x04typeB\x0e\n\x0c_descriptionB\x10\n\x0e_default_valueB\x0e\n\x0c_placeholder\"\x82\x01\n\x08\x46ieldSet\x12*\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x1a.fivetran_sdk.v2.FormField\x12<\n\tcondition\x18\x02 \x01(\x0b\x32$.fivetran_sdk.v2.VisibilityConditionH\x00\x88\x01\x01\x42\x0c\n\n_condition\"\x85\x01\n\x13VisibilityCondition\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12\x18\n\x0ehas_bool_value\x18\x02 \x01(\x08H\x00\x12\x1a\n\x10has_string_value\x18\x03 \x01(\tH\x00\x12\x17\n\rhas_any_value\x18\x04 \x01(\x08H\x00\x42\x0b\n\tcondition\"\'\n\rDropdownField\x12\x16\n\x0e\x64ropdown_field\x18\x01 \x03(\t\"\r\n\x0bToggleField\"0\n\x11\x43onfigurationTest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\"\x99\x01\n\x0bTestRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x46\n\rconfiguration\x18\x02 \x03(\x0b\x32/.fivetran_sdk.v2.TestRequest.ConfigurationEntry\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"@\n\x0cTestResponse\x12\x11\n\x07success\x18\x01 \x01(\x08H\x00\x12\x11\n\x07\x66\x61ilure\x18\x02 \x01(\tH\x00\x42\n\n\x08response\"6\n\nSchemaList\x12(\n\x07schemas\x18\x01 \x03(\x0b\x32\x17.fivetran_sdk.v2.Schema\"3\n\tTableList\x12&\n\x06tables\x18\x01 \x03(\x0b\x32\x16.fivetran_sdk.v2.Table\">\n\x06Schema\x12\x0c\n\x04name\x18\x01 \x01(\t\x12&\n\x06tables\x18\x02 \x03(\x0b\x32\x16.fivetran_sdk.v2.Table\"1\n\rDecimalParams\x12\x11\n\tprecision\x18\x01 \x01(\r\x12\r\n\x05scale\x18\x02 \x01(\r\"\xab\x03\n\tValueType\x12\x0e\n\x04null\x18\x01 \x01(\x08H\x00\x12\x0e\n\x04\x62ool\x18\x02 \x01(\x08H\x00\x12\x0f\n\x05short\x18\x03 \x01(\x05H\x00\x12\r\n\x03int\x18\x04 \x01(\x05H\x00\x12\x0e\n\x04long\x18\x05 \x01(\x03H\x00\x12\x0f\n\x05\x66loat\x18\x06 \x01(\x02H\x00\x12\x10\n\x06\x64ouble\x18\x07 \x01(\x01H\x00\x12\x30\n\nnaive_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x30\n\nnaive_date\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x34\n\x0enaive_datetime\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x32\n\x0cutc_datetime\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x11\n\x07\x64\x65\x63imal\x18\x0c \x01(\tH\x00\x12\x10\n\x06\x62inary\x18\r \x01(\x0cH\x00\x12\x10\n\x06string\x18\x0e \x01(\tH\x00\x12\x0e\n\x04json\x18\x0f \x01(\tH\x00\x12\r\n\x03xml\x18\x10 \x01(\tH\x00\x42\x07\n\x05inner\"?\n\x05Table\x12\x0c\n\x04name\x18\x01 \x01(\t\x12(\n\x07\x63olumns\x18\x02 \x03(\x0b\x32\x17.fivetran_sdk.v2.Column\"\x96\x01\n\x06\x43olumn\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\'\n\x04type\x18\x02 \x01(\x0e\x32\x19.fivetran_sdk.v2.DataType\x12\x13\n\x0bprimary_key\x18\x03 \x01(\x08\x12\x34\n\x07\x64\x65\x63imal\x18\x04 \x01(\x0b\x32\x1e.fivetran_sdk.v2.DecimalParamsH\x00\x88\x01\x01\x42\n\n\x08_decimal*4\n\tTextField\x12\r\n\tPlainText\x10\x00\x12\x0c\n\x08Password\x10\x01\x12\n\n\x06Hidden\x10\x02*\xdb\x01\n\x08\x44\x61taType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07\x42OOLEAN\x10\x01\x12\t\n\x05SHORT\x10\x02\x12\x07\n\x03INT\x10\x03\x12\x08\n\x04LONG\x10\x04\x12\x0b\n\x07\x44\x45\x43IMAL\x10\x05\x12\t\n\x05\x46LOAT\x10\x06\x12\n\n\x06\x44OUBLE\x10\x07\x12\x0e\n\nNAIVE_TIME\x10\x08\x12\x0e\n\nNAIVE_DATE\x10\t\x12\x12\n\x0eNAIVE_DATETIME\x10\n\x12\x10\n\x0cUTC_DATETIME\x10\x0b\x12\n\n\x06\x42INARY\x10\x0c\x12\x07\n\x03XML\x10\r\x12\n\n\x06STRING\x10\x0e\x12\x08\n\x04JSON\x10\x0f*>\n\nRecordType\x12\n\n\x06UPSERT\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x12\x0c\n\x08TRUNCATE\x10\x03\x42%H\x01P\x01Z\x1f\x66ivetran.com/fivetran_sdk/toolsb\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
21
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common_pb2', _globals)
22
22
  if _descriptor._USE_C_DESCRIPTORS == False:
23
23
  DESCRIPTOR._options = None
24
- DESCRIPTOR._serialized_options = b'H\001P\001Z\031fivetran.com/fivetran_sdk'
24
+ DESCRIPTOR._serialized_options = b'H\001P\001Z\037fivetran.com/fivetran_sdk/tools'
25
25
  _TESTREQUEST_CONFIGURATIONENTRY._options = None
26
26
  _TESTREQUEST_CONFIGURATIONENTRY._serialized_options = b'8\001'
27
- _globals['_TEXTFIELD']._serialized_start=1674
28
- _globals['_TEXTFIELD']._serialized_end=1726
29
- _globals['_DATATYPE']._serialized_start=1729
30
- _globals['_DATATYPE']._serialized_end=1932
31
- _globals['_OPTYPE']._serialized_start=1934
32
- _globals['_OPTYPE']._serialized_end=1992
33
- _globals['_CONFIGURATIONFORMREQUEST']._serialized_start=63
34
- _globals['_CONFIGURATIONFORMREQUEST']._serialized_end=89
35
- _globals['_CONFIGURATIONFORMRESPONSE']._serialized_start=92
36
- _globals['_CONFIGURATIONFORMRESPONSE']._serialized_end=279
37
- _globals['_FORMFIELD']._serialized_start=282
38
- _globals['_FORMFIELD']._serialized_end=543
39
- _globals['_DROPDOWNFIELD']._serialized_start=545
40
- _globals['_DROPDOWNFIELD']._serialized_end=584
41
- _globals['_TOGGLEFIELD']._serialized_start=586
42
- _globals['_TOGGLEFIELD']._serialized_end=599
43
- _globals['_CONFIGURATIONTEST']._serialized_start=601
44
- _globals['_CONFIGURATIONTEST']._serialized_end=649
45
- _globals['_TESTREQUEST']._serialized_start=652
46
- _globals['_TESTREQUEST']._serialized_end=802
47
- _globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_start=750
48
- _globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_end=802
49
- _globals['_TESTRESPONSE']._serialized_start=804
50
- _globals['_TESTRESPONSE']._serialized_end=868
51
- _globals['_SCHEMALIST']._serialized_start=870
52
- _globals['_SCHEMALIST']._serialized_end=921
53
- _globals['_TABLELIST']._serialized_start=923
54
- _globals['_TABLELIST']._serialized_end=971
55
- _globals['_SCHEMA']._serialized_start=973
56
- _globals['_SCHEMA']._serialized_end=1032
57
- _globals['_DECIMALPARAMS']._serialized_start=1034
58
- _globals['_DECIMALPARAMS']._serialized_end=1083
59
- _globals['_VALUETYPE']._serialized_start=1086
60
- _globals['_VALUETYPE']._serialized_end=1463
61
- _globals['_TABLE']._serialized_start=1465
62
- _globals['_TABLE']._serialized_end=1525
63
- _globals['_COLUMN']._serialized_start=1528
64
- _globals['_COLUMN']._serialized_end=1672
27
+ _globals['_TEXTFIELD']._serialized_start=2228
28
+ _globals['_TEXTFIELD']._serialized_end=2280
29
+ _globals['_DATATYPE']._serialized_start=2283
30
+ _globals['_DATATYPE']._serialized_end=2502
31
+ _globals['_RECORDTYPE']._serialized_start=2504
32
+ _globals['_RECORDTYPE']._serialized_end=2566
33
+ _globals['_CONFIGURATIONFORMREQUEST']._serialized_start=66
34
+ _globals['_CONFIGURATIONFORMREQUEST']._serialized_end=92
35
+ _globals['_CONFIGURATIONFORMRESPONSE']._serialized_start=95
36
+ _globals['_CONFIGURATIONFORMRESPONSE']._serialized_end=288
37
+ _globals['_FORMFIELD']._serialized_start=290
38
+ _globals['_FORMFIELD']._serialized_end=400
39
+ _globals['_FIELD']._serialized_start=403
40
+ _globals['_FIELD']._serialized_end=757
41
+ _globals['_FIELDSET']._serialized_start=760
42
+ _globals['_FIELDSET']._serialized_end=890
43
+ _globals['_VISIBILITYCONDITION']._serialized_start=893
44
+ _globals['_VISIBILITYCONDITION']._serialized_end=1026
45
+ _globals['_DROPDOWNFIELD']._serialized_start=1028
46
+ _globals['_DROPDOWNFIELD']._serialized_end=1067
47
+ _globals['_TOGGLEFIELD']._serialized_start=1069
48
+ _globals['_TOGGLEFIELD']._serialized_end=1082
49
+ _globals['_CONFIGURATIONTEST']._serialized_start=1084
50
+ _globals['_CONFIGURATIONTEST']._serialized_end=1132
51
+ _globals['_TESTREQUEST']._serialized_start=1135
52
+ _globals['_TESTREQUEST']._serialized_end=1288
53
+ _globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_start=1236
54
+ _globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_end=1288
55
+ _globals['_TESTRESPONSE']._serialized_start=1290
56
+ _globals['_TESTRESPONSE']._serialized_end=1354
57
+ _globals['_SCHEMALIST']._serialized_start=1356
58
+ _globals['_SCHEMALIST']._serialized_end=1410
59
+ _globals['_TABLELIST']._serialized_start=1412
60
+ _globals['_TABLELIST']._serialized_end=1463
61
+ _globals['_SCHEMA']._serialized_start=1465
62
+ _globals['_SCHEMA']._serialized_end=1527
63
+ _globals['_DECIMALPARAMS']._serialized_start=1529
64
+ _globals['_DECIMALPARAMS']._serialized_end=1578
65
+ _globals['_VALUETYPE']._serialized_start=1581
66
+ _globals['_VALUETYPE']._serialized_end=2008
67
+ _globals['_TABLE']._serialized_start=2010
68
+ _globals['_TABLE']._serialized_end=2073
69
+ _globals['_COLUMN']._serialized_start=2076
70
+ _globals['_COLUMN']._serialized_end=2226
65
71
  # @@protoc_insertion_point(module_scope)
@@ -23,6 +23,7 @@ class DataType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
23
23
  DECIMAL: _ClassVar[DataType]
24
24
  FLOAT: _ClassVar[DataType]
25
25
  DOUBLE: _ClassVar[DataType]
26
+ NAIVE_TIME: _ClassVar[DataType]
26
27
  NAIVE_DATE: _ClassVar[DataType]
27
28
  NAIVE_DATETIME: _ClassVar[DataType]
28
29
  UTC_DATETIME: _ClassVar[DataType]
@@ -31,12 +32,12 @@ class DataType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
31
32
  STRING: _ClassVar[DataType]
32
33
  JSON: _ClassVar[DataType]
33
34
 
34
- class OpType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
35
+ class RecordType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
35
36
  __slots__ = []
36
- UPSERT: _ClassVar[OpType]
37
- UPDATE: _ClassVar[OpType]
38
- DELETE: _ClassVar[OpType]
39
- TRUNCATE: _ClassVar[OpType]
37
+ UPSERT: _ClassVar[RecordType]
38
+ UPDATE: _ClassVar[RecordType]
39
+ DELETE: _ClassVar[RecordType]
40
+ TRUNCATE: _ClassVar[RecordType]
40
41
  PlainText: TextField
41
42
  Password: TextField
42
43
  Hidden: TextField
@@ -48,6 +49,7 @@ LONG: DataType
48
49
  DECIMAL: DataType
49
50
  FLOAT: DataType
50
51
  DOUBLE: DataType
52
+ NAIVE_TIME: DataType
51
53
  NAIVE_DATE: DataType
52
54
  NAIVE_DATETIME: DataType
53
55
  UTC_DATETIME: DataType
@@ -55,10 +57,10 @@ BINARY: DataType
55
57
  XML: DataType
56
58
  STRING: DataType
57
59
  JSON: DataType
58
- UPSERT: OpType
59
- UPDATE: OpType
60
- DELETE: OpType
61
- TRUNCATE: OpType
60
+ UPSERT: RecordType
61
+ UPDATE: RecordType
62
+ DELETE: RecordType
63
+ TRUNCATE: RecordType
62
64
 
63
65
  class ConfigurationFormRequest(_message.Message):
64
66
  __slots__ = []
@@ -77,11 +79,21 @@ class ConfigurationFormResponse(_message.Message):
77
79
  def __init__(self, schema_selection_supported: bool = ..., table_selection_supported: bool = ..., fields: _Optional[_Iterable[_Union[FormField, _Mapping]]] = ..., tests: _Optional[_Iterable[_Union[ConfigurationTest, _Mapping]]] = ...) -> None: ...
78
80
 
79
81
  class FormField(_message.Message):
80
- __slots__ = ["name", "label", "required", "description", "text_field", "dropdown_field", "toggle_field"]
82
+ __slots__ = ["single", "field_set"]
83
+ SINGLE_FIELD_NUMBER: _ClassVar[int]
84
+ FIELD_SET_FIELD_NUMBER: _ClassVar[int]
85
+ single: Field
86
+ field_set: FieldSet
87
+ def __init__(self, single: _Optional[_Union[Field, _Mapping]] = ..., field_set: _Optional[_Union[FieldSet, _Mapping]] = ...) -> None: ...
88
+
89
+ class Field(_message.Message):
90
+ __slots__ = ["name", "label", "required", "description", "default_value", "placeholder", "text_field", "dropdown_field", "toggle_field"]
81
91
  NAME_FIELD_NUMBER: _ClassVar[int]
82
92
  LABEL_FIELD_NUMBER: _ClassVar[int]
83
93
  REQUIRED_FIELD_NUMBER: _ClassVar[int]
84
94
  DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
95
+ DEFAULT_VALUE_FIELD_NUMBER: _ClassVar[int]
96
+ PLACEHOLDER_FIELD_NUMBER: _ClassVar[int]
85
97
  TEXT_FIELD_FIELD_NUMBER: _ClassVar[int]
86
98
  DROPDOWN_FIELD_FIELD_NUMBER: _ClassVar[int]
87
99
  TOGGLE_FIELD_FIELD_NUMBER: _ClassVar[int]
@@ -89,10 +101,32 @@ class FormField(_message.Message):
89
101
  label: str
90
102
  required: bool
91
103
  description: str
104
+ default_value: str
105
+ placeholder: str
92
106
  text_field: TextField
93
107
  dropdown_field: DropdownField
94
108
  toggle_field: ToggleField
95
- def __init__(self, name: _Optional[str] = ..., label: _Optional[str] = ..., required: bool = ..., description: _Optional[str] = ..., text_field: _Optional[_Union[TextField, str]] = ..., dropdown_field: _Optional[_Union[DropdownField, _Mapping]] = ..., toggle_field: _Optional[_Union[ToggleField, _Mapping]] = ...) -> None: ...
109
+ def __init__(self, name: _Optional[str] = ..., label: _Optional[str] = ..., required: bool = ..., description: _Optional[str] = ..., default_value: _Optional[str] = ..., placeholder: _Optional[str] = ..., text_field: _Optional[_Union[TextField, str]] = ..., dropdown_field: _Optional[_Union[DropdownField, _Mapping]] = ..., toggle_field: _Optional[_Union[ToggleField, _Mapping]] = ...) -> None: ...
110
+
111
+ class FieldSet(_message.Message):
112
+ __slots__ = ["fields", "condition"]
113
+ FIELDS_FIELD_NUMBER: _ClassVar[int]
114
+ CONDITION_FIELD_NUMBER: _ClassVar[int]
115
+ fields: _containers.RepeatedCompositeFieldContainer[FormField]
116
+ condition: VisibilityCondition
117
+ def __init__(self, fields: _Optional[_Iterable[_Union[FormField, _Mapping]]] = ..., condition: _Optional[_Union[VisibilityCondition, _Mapping]] = ...) -> None: ...
118
+
119
+ class VisibilityCondition(_message.Message):
120
+ __slots__ = ["field_name", "has_bool_value", "has_string_value", "has_any_value"]
121
+ FIELD_NAME_FIELD_NUMBER: _ClassVar[int]
122
+ HAS_BOOL_VALUE_FIELD_NUMBER: _ClassVar[int]
123
+ HAS_STRING_VALUE_FIELD_NUMBER: _ClassVar[int]
124
+ HAS_ANY_VALUE_FIELD_NUMBER: _ClassVar[int]
125
+ field_name: str
126
+ has_bool_value: bool
127
+ has_string_value: str
128
+ has_any_value: bool
129
+ def __init__(self, field_name: _Optional[str] = ..., has_bool_value: bool = ..., has_string_value: _Optional[str] = ..., has_any_value: bool = ...) -> None: ...
96
130
 
97
131
  class DropdownField(_message.Message):
98
132
  __slots__ = ["dropdown_field"]
@@ -164,7 +198,7 @@ class DecimalParams(_message.Message):
164
198
  def __init__(self, precision: _Optional[int] = ..., scale: _Optional[int] = ...) -> None: ...
165
199
 
166
200
  class ValueType(_message.Message):
167
- __slots__ = ["null", "bool", "short", "int", "long", "float", "double", "naive_date", "naive_datetime", "utc_datetime", "decimal", "binary", "string", "json", "xml"]
201
+ __slots__ = ["null", "bool", "short", "int", "long", "float", "double", "naive_time", "naive_date", "naive_datetime", "utc_datetime", "decimal", "binary", "string", "json", "xml"]
168
202
  NULL_FIELD_NUMBER: _ClassVar[int]
169
203
  BOOL_FIELD_NUMBER: _ClassVar[int]
170
204
  SHORT_FIELD_NUMBER: _ClassVar[int]
@@ -172,6 +206,7 @@ class ValueType(_message.Message):
172
206
  LONG_FIELD_NUMBER: _ClassVar[int]
173
207
  FLOAT_FIELD_NUMBER: _ClassVar[int]
174
208
  DOUBLE_FIELD_NUMBER: _ClassVar[int]
209
+ NAIVE_TIME_FIELD_NUMBER: _ClassVar[int]
175
210
  NAIVE_DATE_FIELD_NUMBER: _ClassVar[int]
176
211
  NAIVE_DATETIME_FIELD_NUMBER: _ClassVar[int]
177
212
  UTC_DATETIME_FIELD_NUMBER: _ClassVar[int]
@@ -187,6 +222,7 @@ class ValueType(_message.Message):
187
222
  long: int
188
223
  float: float
189
224
  double: float
225
+ naive_time: _timestamp_pb2.Timestamp
190
226
  naive_date: _timestamp_pb2.Timestamp
191
227
  naive_datetime: _timestamp_pb2.Timestamp
192
228
  utc_datetime: _timestamp_pb2.Timestamp
@@ -195,7 +231,7 @@ class ValueType(_message.Message):
195
231
  string: str
196
232
  json: str
197
233
  xml: str
198
- def __init__(self, null: bool = ..., bool: bool = ..., short: _Optional[int] = ..., int: _Optional[int] = ..., long: _Optional[int] = ..., float: _Optional[float] = ..., double: _Optional[float] = ..., naive_date: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., naive_datetime: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., utc_datetime: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., decimal: _Optional[str] = ..., binary: _Optional[bytes] = ..., string: _Optional[str] = ..., json: _Optional[str] = ..., xml: _Optional[str] = ...) -> None: ...
234
+ def __init__(self, null: bool = ..., bool: bool = ..., short: _Optional[int] = ..., int: _Optional[int] = ..., long: _Optional[int] = ..., float: _Optional[float] = ..., double: _Optional[float] = ..., naive_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., naive_date: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., naive_datetime: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., utc_datetime: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., decimal: _Optional[str] = ..., binary: _Optional[bytes] = ..., string: _Optional[str] = ..., json: _Optional[str] = ..., xml: _Optional[str] = ...) -> None: ...
199
235
 
200
236
  class Table(_message.Message):
201
237
  __slots__ = ["name", "columns"]
@@ -11,7 +11,11 @@ from google.protobuf.internal import builder as _builder
11
11
  _sym_db = _symbol_database.Default()
12
12
 
13
13
 
14
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x63onnector_sdk.proto\x12\x0c\x66ivetran_sdk\x1a\x0c\x63ommon.proto\"\x8c\x01\n\rSchemaRequest\x12\x45\n\rconfiguration\x18\x01 \x03(\x0b\x32..fivetran_sdk.SchemaRequest.ConfigurationEntry\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xeb\x01\n\x0eSchemaResponse\x12\'\n\x1dschema_response_not_supported\x18\x01 \x01(\x08H\x00\x12/\n\x0bwith_schema\x18\x02 \x01(\x0b\x32\x18.fivetran_sdk.SchemaListH\x00\x12\x31\n\x0ewithout_schema\x18\x03 \x01(\x0b\x32\x17.fivetran_sdk.TableListH\x00\x12$\n\x17selection_not_supported\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08responseB\x1a\n\x18_selection_not_supported\"\xf3\x01\n\rUpdateRequest\x12\x45\n\rconfiguration\x18\x01 \x03(\x0b\x32..fivetran_sdk.UpdateRequest.ConfigurationEntry\x12/\n\tselection\x18\x02 \x01(\x0b\x32\x17.fivetran_sdk.SelectionH\x00\x88\x01\x01\x12\x17\n\nstate_json\x18\x03 \x01(\tH\x01\x88\x01\x01\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0c\n\n_selectionB\r\n\x0b_state_json\"\x8b\x01\n\tSelection\x12:\n\x0ewithout_schema\x18\x01 \x01(\x0b\x32 .fivetran_sdk.TablesWithNoSchemaH\x00\x12\x35\n\x0bwith_schema\x18\x02 \x01(\x0b\x32\x1e.fivetran_sdk.TablesWithSchemaH\x00\x42\x0b\n\tselection\"^\n\x12TablesWithNoSchema\x12,\n\x06tables\x18\x01 \x03(\x0b\x32\x1c.fivetran_sdk.TableSelection\x12\x1a\n\x12include_new_tables\x18\x02 \x01(\x08\"_\n\x10TablesWithSchema\x12.\n\x07schemas\x18\x01 \x03(\x0b\x32\x1d.fivetran_sdk.SchemaSelection\x12\x1b\n\x13include_new_schemas\x18\x02 \x01(\x08\"\x82\x01\n\x0fSchemaSelection\x12\x10\n\x08included\x18\x01 \x01(\x08\x12\x13\n\x0bschema_name\x18\x02 \x01(\t\x12,\n\x06tables\x18\x03 \x03(\x0b\x32\x1c.fivetran_sdk.TableSelection\x12\x1a\n\x12include_new_tables\x18\x04 \x01(\x08\"\xbf\x01\n\x0eTableSelection\x12\x10\n\x08included\x18\x01 \x01(\x08\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12:\n\x07\x63olumns\x18\x03 \x03(\x0b\x32).fivetran_sdk.TableSelection.ColumnsEntry\x12\x1b\n\x13include_new_columns\x18\x04 \x01(\x08\x1a.\n\x0c\x43olumnsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\"w\n\x0eUpdateResponse\x12+\n\tlog_entry\x18\x01 \x01(\x0b\x32\x16.fivetran_sdk.LogEntryH\x00\x12,\n\toperation\x18\x02 \x01(\x0b\x32\x17.fivetran_sdk.OperationH\x00\x42\n\n\x08response\"B\n\x08LogEntry\x12%\n\x05level\x18\x01 \x01(\x0e\x32\x16.fivetran_sdk.LogLevel\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x9e\x01\n\tOperation\x12&\n\x06record\x18\x01 \x01(\x0b\x32\x14.fivetran_sdk.RecordH\x00\x12\x33\n\rschema_change\x18\x02 \x01(\x0b\x32\x1a.fivetran_sdk.SchemaChangeH\x00\x12.\n\ncheckpoint\x18\x03 \x01(\x0b\x32\x18.fivetran_sdk.CheckpointH\x00\x42\x04\n\x02op\"|\n\x0cSchemaChange\x12/\n\x0bwith_schema\x18\x01 \x01(\x0b\x32\x18.fivetran_sdk.SchemaListH\x00\x12\x31\n\x0ewithout_schema\x18\x02 \x01(\x0b\x32\x17.fivetran_sdk.TableListH\x00\x42\x08\n\x06\x63hange\"\xde\x01\n\x06Record\x12\x18\n\x0bschema_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12\"\n\x04type\x18\x03 \x01(\x0e\x32\x14.fivetran_sdk.OpType\x12,\n\x04\x64\x61ta\x18\x04 \x03(\x0b\x32\x1e.fivetran_sdk.Record.DataEntry\x1a\x44\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.fivetran_sdk.ValueType:\x02\x38\x01\x42\x0e\n\x0c_schema_name\" \n\nCheckpoint\x12\x12\n\nstate_json\x18\x01 \x01(\t*-\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\x0b\n\x07WARNING\x10\x01\x12\n\n\x06SEVERE\x10\x02\x32\xc4\x02\n\tConnector\x12\x66\n\x11\x43onfigurationForm\x12&.fivetran_sdk.ConfigurationFormRequest\x1a\'.fivetran_sdk.ConfigurationFormResponse\"\x00\x12?\n\x04Test\x12\x19.fivetran_sdk.TestRequest\x1a\x1a.fivetran_sdk.TestResponse\"\x00\x12\x45\n\x06Schema\x12\x1b.fivetran_sdk.SchemaRequest\x1a\x1c.fivetran_sdk.SchemaResponse\"\x00\x12G\n\x06Update\x12\x1b.fivetran_sdk.UpdateRequest\x1a\x1c.fivetran_sdk.UpdateResponse\"\x00\x30\x01\x42\x1fH\x01P\x01Z\x19\x66ivetran.com/fivetran_sdkb\x06proto3')
14
+ # This is generated code but we need to make this adjustment
15
+ from fivetran_connector_sdk import common_pb2 as common__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x63onnector_sdk.proto\x12\x0f\x66ivetran_sdk.v2\x1a\x0c\x63ommon.proto\"\x8f\x01\n\rSchemaRequest\x12H\n\rconfiguration\x18\x01 \x03(\x0b\x32\x31.fivetran_sdk.v2.SchemaRequest.ConfigurationEntry\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf1\x01\n\x0eSchemaResponse\x12\'\n\x1dschema_response_not_supported\x18\x01 \x01(\x08H\x00\x12\x32\n\x0bwith_schema\x18\x02 \x01(\x0b\x32\x1b.fivetran_sdk.v2.SchemaListH\x00\x12\x34\n\x0ewithout_schema\x18\x03 \x01(\x0b\x32\x1a.fivetran_sdk.v2.TableListH\x00\x12$\n\x17selection_not_supported\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08responseB\x1a\n\x18_selection_not_supported\"\xf9\x01\n\rUpdateRequest\x12H\n\rconfiguration\x18\x01 \x03(\x0b\x32\x31.fivetran_sdk.v2.UpdateRequest.ConfigurationEntry\x12\x32\n\tselection\x18\x02 \x01(\x0b\x32\x1a.fivetran_sdk.v2.SelectionH\x00\x88\x01\x01\x12\x17\n\nstate_json\x18\x03 \x01(\tH\x01\x88\x01\x01\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0c\n\n_selectionB\r\n\x0b_state_json\"\x91\x01\n\tSelection\x12=\n\x0ewithout_schema\x18\x01 \x01(\x0b\x32#.fivetran_sdk.v2.TablesWithNoSchemaH\x00\x12\x38\n\x0bwith_schema\x18\x02 \x01(\x0b\x32!.fivetran_sdk.v2.TablesWithSchemaH\x00\x42\x0b\n\tselection\"a\n\x12TablesWithNoSchema\x12/\n\x06tables\x18\x01 \x03(\x0b\x32\x1f.fivetran_sdk.v2.TableSelection\x12\x1a\n\x12include_new_tables\x18\x02 \x01(\x08\"b\n\x10TablesWithSchema\x12\x31\n\x07schemas\x18\x01 \x03(\x0b\x32 .fivetran_sdk.v2.SchemaSelection\x12\x1b\n\x13include_new_schemas\x18\x02 \x01(\x08\"\x85\x01\n\x0fSchemaSelection\x12\x10\n\x08included\x18\x01 \x01(\x08\x12\x13\n\x0bschema_name\x18\x02 \x01(\t\x12/\n\x06tables\x18\x03 \x03(\x0b\x32\x1f.fivetran_sdk.v2.TableSelection\x12\x1a\n\x12include_new_tables\x18\x04 \x01(\x08\"\xc2\x01\n\x0eTableSelection\x12\x10\n\x08included\x18\x01 \x01(\x08\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12=\n\x07\x63olumns\x18\x03 \x03(\x0b\x32,.fivetran_sdk.v2.TableSelection.ColumnsEntry\x12\x1b\n\x13include_new_columns\x18\x04 \x01(\x08\x1a.\n\x0c\x43olumnsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\"\xb3\x01\n\x0eUpdateResponse\x12)\n\x06record\x18\x01 \x01(\x0b\x32\x17.fivetran_sdk.v2.RecordH\x00\x12\x36\n\rschema_change\x18\x02 \x01(\x0b\x32\x1d.fivetran_sdk.v2.SchemaChangeH\x00\x12\x31\n\ncheckpoint\x18\x03 \x01(\x0b\x32\x1b.fivetran_sdk.v2.CheckpointH\x00\x42\x0b\n\toperation\"\x82\x01\n\x0cSchemaChange\x12\x32\n\x0bwith_schema\x18\x01 \x01(\x0b\x32\x1b.fivetran_sdk.v2.SchemaListH\x00\x12\x34\n\x0ewithout_schema\x18\x02 \x01(\x0b\x32\x1a.fivetran_sdk.v2.TableListH\x00\x42\x08\n\x06\x63hange\"\xeb\x01\n\x06Record\x12\x18\n\x0bschema_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12)\n\x04type\x18\x03 \x01(\x0e\x32\x1b.fivetran_sdk.v2.RecordType\x12/\n\x04\x64\x61ta\x18\x04 \x03(\x0b\x32!.fivetran_sdk.v2.Record.DataEntry\x1aG\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.fivetran_sdk.v2.ValueType:\x02\x38\x01\x42\x0e\n\x0c_schema_name\" \n\nCheckpoint\x12\x12\n\nstate_json\x18\x01 \x01(\t2\xe2\x02\n\x0fSourceConnector\x12l\n\x11\x43onfigurationForm\x12).fivetran_sdk.v2.ConfigurationFormRequest\x1a*.fivetran_sdk.v2.ConfigurationFormResponse\"\x00\x12\x45\n\x04Test\x12\x1c.fivetran_sdk.v2.TestRequest\x1a\x1d.fivetran_sdk.v2.TestResponse\"\x00\x12K\n\x06Schema\x12\x1e.fivetran_sdk.v2.SchemaRequest\x1a\x1f.fivetran_sdk.v2.SchemaResponse\"\x00\x12M\n\x06Update\x12\x1e.fivetran_sdk.v2.UpdateRequest\x1a\x1f.fivetran_sdk.v2.UpdateResponse\"\x00\x30\x01\x42\x1fH\x01P\x01Z\x19\x66ivetran.com/fivetran_sdkb\x06proto3')
15
19
 
16
20
  _globals = globals()
17
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -27,44 +31,38 @@ if _descriptor._USE_C_DESCRIPTORS == False:
27
31
  _TABLESELECTION_COLUMNSENTRY._serialized_options = b'8\001'
28
32
  _RECORD_DATAENTRY._options = None
29
33
  _RECORD_DATAENTRY._serialized_options = b'8\001'
30
- _globals['_LOGLEVEL']._serialized_start=2075
31
- _globals['_LOGLEVEL']._serialized_end=2120
32
- _globals['_SCHEMAREQUEST']._serialized_start=52
33
- _globals['_SCHEMAREQUEST']._serialized_end=192
34
- _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_start=140
35
- _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_end=192
36
- _globals['_SCHEMARESPONSE']._serialized_start=195
37
- _globals['_SCHEMARESPONSE']._serialized_end=430
38
- _globals['_UPDATEREQUEST']._serialized_start=433
39
- _globals['_UPDATEREQUEST']._serialized_end=676
40
- _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_start=140
41
- _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_end=192
42
- _globals['_SELECTION']._serialized_start=679
43
- _globals['_SELECTION']._serialized_end=818
44
- _globals['_TABLESWITHNOSCHEMA']._serialized_start=820
45
- _globals['_TABLESWITHNOSCHEMA']._serialized_end=914
46
- _globals['_TABLESWITHSCHEMA']._serialized_start=916
47
- _globals['_TABLESWITHSCHEMA']._serialized_end=1011
48
- _globals['_SCHEMASELECTION']._serialized_start=1014
49
- _globals['_SCHEMASELECTION']._serialized_end=1144
50
- _globals['_TABLESELECTION']._serialized_start=1147
51
- _globals['_TABLESELECTION']._serialized_end=1338
52
- _globals['_TABLESELECTION_COLUMNSENTRY']._serialized_start=1292
53
- _globals['_TABLESELECTION_COLUMNSENTRY']._serialized_end=1338
54
- _globals['_UPDATERESPONSE']._serialized_start=1340
55
- _globals['_UPDATERESPONSE']._serialized_end=1459
56
- _globals['_LOGENTRY']._serialized_start=1461
57
- _globals['_LOGENTRY']._serialized_end=1527
58
- _globals['_OPERATION']._serialized_start=1530
59
- _globals['_OPERATION']._serialized_end=1688
60
- _globals['_SCHEMACHANGE']._serialized_start=1690
61
- _globals['_SCHEMACHANGE']._serialized_end=1814
62
- _globals['_RECORD']._serialized_start=1817
63
- _globals['_RECORD']._serialized_end=2039
64
- _globals['_RECORD_DATAENTRY']._serialized_start=1955
65
- _globals['_RECORD_DATAENTRY']._serialized_end=2023
66
- _globals['_CHECKPOINT']._serialized_start=2041
67
- _globals['_CHECKPOINT']._serialized_end=2073
68
- _globals['_CONNECTOR']._serialized_start=2123
69
- _globals['_CONNECTOR']._serialized_end=2447
34
+ _globals['_SCHEMAREQUEST']._serialized_start=55
35
+ _globals['_SCHEMAREQUEST']._serialized_end=198
36
+ _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_start=146
37
+ _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_end=198
38
+ _globals['_SCHEMARESPONSE']._serialized_start=201
39
+ _globals['_SCHEMARESPONSE']._serialized_end=442
40
+ _globals['_UPDATEREQUEST']._serialized_start=445
41
+ _globals['_UPDATEREQUEST']._serialized_end=694
42
+ _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_start=146
43
+ _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_end=198
44
+ _globals['_SELECTION']._serialized_start=697
45
+ _globals['_SELECTION']._serialized_end=842
46
+ _globals['_TABLESWITHNOSCHEMA']._serialized_start=844
47
+ _globals['_TABLESWITHNOSCHEMA']._serialized_end=941
48
+ _globals['_TABLESWITHSCHEMA']._serialized_start=943
49
+ _globals['_TABLESWITHSCHEMA']._serialized_end=1041
50
+ _globals['_SCHEMASELECTION']._serialized_start=1044
51
+ _globals['_SCHEMASELECTION']._serialized_end=1177
52
+ _globals['_TABLESELECTION']._serialized_start=1180
53
+ _globals['_TABLESELECTION']._serialized_end=1374
54
+ _globals['_TABLESELECTION_COLUMNSENTRY']._serialized_start=1328
55
+ _globals['_TABLESELECTION_COLUMNSENTRY']._serialized_end=1374
56
+ _globals['_UPDATERESPONSE']._serialized_start=1377
57
+ _globals['_UPDATERESPONSE']._serialized_end=1556
58
+ _globals['_SCHEMACHANGE']._serialized_start=1559
59
+ _globals['_SCHEMACHANGE']._serialized_end=1689
60
+ _globals['_RECORD']._serialized_start=1692
61
+ _globals['_RECORD']._serialized_end=1927
62
+ _globals['_RECORD_DATAENTRY']._serialized_start=1840
63
+ _globals['_RECORD_DATAENTRY']._serialized_end=1911
64
+ _globals['_CHECKPOINT']._serialized_start=1929
65
+ _globals['_CHECKPOINT']._serialized_end=1961
66
+ _globals['_SOURCECONNECTOR']._serialized_start=1964
67
+ _globals['_SOURCECONNECTOR']._serialized_end=2318
70
68
  # @@protoc_insertion_point(module_scope)
@@ -1,21 +1,11 @@
1
1
  import common_pb2 as _common_pb2
2
2
  from google.protobuf.internal import containers as _containers
3
- from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
4
3
  from google.protobuf import descriptor as _descriptor
5
4
  from google.protobuf import message as _message
6
5
  from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
7
6
 
8
7
  DESCRIPTOR: _descriptor.FileDescriptor
9
8
 
10
- class LogLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
11
- __slots__ = []
12
- INFO: _ClassVar[LogLevel]
13
- WARNING: _ClassVar[LogLevel]
14
- SEVERE: _ClassVar[LogLevel]
15
- INFO: LogLevel
16
- WARNING: LogLevel
17
- SEVERE: LogLevel
18
-
19
9
  class SchemaRequest(_message.Message):
20
10
  __slots__ = ["configuration"]
21
11
  class ConfigurationEntry(_message.Message):
@@ -114,22 +104,6 @@ class TableSelection(_message.Message):
114
104
  def __init__(self, included: bool = ..., table_name: _Optional[str] = ..., columns: _Optional[_Mapping[str, bool]] = ..., include_new_columns: bool = ...) -> None: ...
115
105
 
116
106
  class UpdateResponse(_message.Message):
117
- __slots__ = ["log_entry", "operation"]
118
- LOG_ENTRY_FIELD_NUMBER: _ClassVar[int]
119
- OPERATION_FIELD_NUMBER: _ClassVar[int]
120
- log_entry: LogEntry
121
- operation: Operation
122
- def __init__(self, log_entry: _Optional[_Union[LogEntry, _Mapping]] = ..., operation: _Optional[_Union[Operation, _Mapping]] = ...) -> None: ...
123
-
124
- class LogEntry(_message.Message):
125
- __slots__ = ["level", "message"]
126
- LEVEL_FIELD_NUMBER: _ClassVar[int]
127
- MESSAGE_FIELD_NUMBER: _ClassVar[int]
128
- level: LogLevel
129
- message: str
130
- def __init__(self, level: _Optional[_Union[LogLevel, str]] = ..., message: _Optional[str] = ...) -> None: ...
131
-
132
- class Operation(_message.Message):
133
107
  __slots__ = ["record", "schema_change", "checkpoint"]
134
108
  RECORD_FIELD_NUMBER: _ClassVar[int]
135
109
  SCHEMA_CHANGE_FIELD_NUMBER: _ClassVar[int]
@@ -162,9 +136,9 @@ class Record(_message.Message):
162
136
  DATA_FIELD_NUMBER: _ClassVar[int]
163
137
  schema_name: str
164
138
  table_name: str
165
- type: _common_pb2.OpType
139
+ type: _common_pb2.RecordType
166
140
  data: _containers.MessageMap[str, _common_pb2.ValueType]
167
- def __init__(self, schema_name: _Optional[str] = ..., table_name: _Optional[str] = ..., type: _Optional[_Union[_common_pb2.OpType, str]] = ..., data: _Optional[_Mapping[str, _common_pb2.ValueType]] = ...) -> None: ...
141
+ def __init__(self, schema_name: _Optional[str] = ..., table_name: _Optional[str] = ..., type: _Optional[_Union[_common_pb2.RecordType, str]] = ..., data: _Optional[_Mapping[str, _common_pb2.ValueType]] = ...) -> None: ...
168
142
 
169
143
  class Checkpoint(_message.Message):
170
144
  __slots__ = ["state_json"]
@@ -3,14 +3,13 @@
3
3
  import grpc
4
4
 
5
5
 
6
- # This is generated code but we need to make this adjustment so that
7
- # it works when frozen with PyInstaller
6
+ # This is generated code but we need to make this adjustment
8
7
  from fivetran_connector_sdk import common_pb2 as common__pb2
9
8
  from fivetran_connector_sdk import connector_sdk_pb2 as connector__sdk__pb2
10
9
 
11
10
 
12
- class ConnectorStub(object):
13
- """Fivetran (grpc client) <> Connector (grpc server)
11
+ class SourceConnectorStub(object):
12
+ """Fivetran (grpc client) <> SourceConnector (grpc server)
14
13
  """
15
14
 
16
15
  def __init__(self, channel):
@@ -20,29 +19,29 @@ class ConnectorStub(object):
20
19
  channel: A grpc.Channel.
21
20
  """
22
21
  self.ConfigurationForm = channel.unary_unary(
23
- '/fivetran_sdk.Connector/ConfigurationForm',
22
+ '/fivetran_sdk.v2.SourceConnector/ConfigurationForm',
24
23
  request_serializer=common__pb2.ConfigurationFormRequest.SerializeToString,
25
24
  response_deserializer=common__pb2.ConfigurationFormResponse.FromString,
26
25
  )
27
26
  self.Test = channel.unary_unary(
28
- '/fivetran_sdk.Connector/Test',
27
+ '/fivetran_sdk.v2.SourceConnector/Test',
29
28
  request_serializer=common__pb2.TestRequest.SerializeToString,
30
29
  response_deserializer=common__pb2.TestResponse.FromString,
31
30
  )
32
31
  self.Schema = channel.unary_unary(
33
- '/fivetran_sdk.Connector/Schema',
32
+ '/fivetran_sdk.v2.SourceConnector/Schema',
34
33
  request_serializer=connector__sdk__pb2.SchemaRequest.SerializeToString,
35
34
  response_deserializer=connector__sdk__pb2.SchemaResponse.FromString,
36
35
  )
37
36
  self.Update = channel.unary_stream(
38
- '/fivetran_sdk.Connector/Update',
37
+ '/fivetran_sdk.v2.SourceConnector/Update',
39
38
  request_serializer=connector__sdk__pb2.UpdateRequest.SerializeToString,
40
39
  response_deserializer=connector__sdk__pb2.UpdateResponse.FromString,
41
40
  )
42
41
 
43
42
 
44
- class ConnectorServicer(object):
45
- """Fivetran (grpc client) <> Connector (grpc server)
43
+ class SourceConnectorServicer(object):
44
+ """Fivetran (grpc client) <> SourceConnector (grpc server)
46
45
  """
47
46
 
48
47
  def ConfigurationForm(self, request, context):
@@ -70,7 +69,7 @@ class ConnectorServicer(object):
70
69
  raise NotImplementedError('Method not implemented!')
71
70
 
72
71
 
73
- def add_ConnectorServicer_to_server(servicer, server):
72
+ def add_SourceConnectorServicer_to_server(servicer, server):
74
73
  rpc_method_handlers = {
75
74
  'ConfigurationForm': grpc.unary_unary_rpc_method_handler(
76
75
  servicer.ConfigurationForm,
@@ -94,13 +93,13 @@ def add_ConnectorServicer_to_server(servicer, server):
94
93
  ),
95
94
  }
96
95
  generic_handler = grpc.method_handlers_generic_handler(
97
- 'fivetran_sdk.Connector', rpc_method_handlers)
96
+ 'fivetran_sdk.v2.SourceConnector', rpc_method_handlers)
98
97
  server.add_generic_rpc_handlers((generic_handler,))
99
98
 
100
99
 
101
100
  # This class is part of an EXPERIMENTAL API.
102
- class Connector(object):
103
- """Fivetran (grpc client) <> Connector (grpc server)
101
+ class SourceConnector(object):
102
+ """Fivetran (grpc client) <> SourceConnector (grpc server)
104
103
  """
105
104
 
106
105
  @staticmethod
@@ -114,7 +113,7 @@ class Connector(object):
114
113
  wait_for_ready=None,
115
114
  timeout=None,
116
115
  metadata=None):
117
- return grpc.experimental.unary_unary(request, target, '/fivetran_sdk.Connector/ConfigurationForm',
116
+ return grpc.experimental.unary_unary(request, target, '/fivetran_sdk.v2.SourceConnector/ConfigurationForm',
118
117
  common__pb2.ConfigurationFormRequest.SerializeToString,
119
118
  common__pb2.ConfigurationFormResponse.FromString,
120
119
  options, channel_credentials,
@@ -131,7 +130,7 @@ class Connector(object):
131
130
  wait_for_ready=None,
132
131
  timeout=None,
133
132
  metadata=None):
134
- return grpc.experimental.unary_unary(request, target, '/fivetran_sdk.Connector/Test',
133
+ return grpc.experimental.unary_unary(request, target, '/fivetran_sdk.v2.SourceConnector/Test',
135
134
  common__pb2.TestRequest.SerializeToString,
136
135
  common__pb2.TestResponse.FromString,
137
136
  options, channel_credentials,
@@ -148,7 +147,7 @@ class Connector(object):
148
147
  wait_for_ready=None,
149
148
  timeout=None,
150
149
  metadata=None):
151
- return grpc.experimental.unary_unary(request, target, '/fivetran_sdk.Connector/Schema',
150
+ return grpc.experimental.unary_unary(request, target, '/fivetran_sdk.v2.SourceConnector/Schema',
152
151
  connector__sdk__pb2.SchemaRequest.SerializeToString,
153
152
  connector__sdk__pb2.SchemaResponse.FromString,
154
153
  options, channel_credentials,
@@ -165,7 +164,7 @@ class Connector(object):
165
164
  wait_for_ready=None,
166
165
  timeout=None,
167
166
  metadata=None):
168
- return grpc.experimental.unary_stream(request, target, '/fivetran_sdk.Connector/Update',
167
+ return grpc.experimental.unary_stream(request, target, '/fivetran_sdk.v2.SourceConnector/Update',
169
168
  connector__sdk__pb2.UpdateRequest.SerializeToString,
170
169
  connector__sdk__pb2.UpdateResponse.FromString,
171
170
  options, channel_credentials,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fivetran_connector_sdk
3
- Version: 0.4.27.1
3
+ Version: 0.6.6.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/connector-sdk
@@ -13,6 +13,5 @@ Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: grpcio ==1.60.1
15
15
  Requires-Dist: grpcio-tools ==1.60.1
16
- Requires-Dist: docker ==6.1.3
17
16
  Requires-Dist: requests ==2.31.0
18
17
 
@@ -0,0 +1,14 @@
1
+ fivetran_connector_sdk/__init__.py,sha256=jhne46a6-NMWZa76S2wfPla4cU0bNzzRzrHAt1loBEM,30434
2
+ fivetran_connector_sdk/protos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ fivetran_connector_sdk/protos/common_pb2.py,sha256=L4eHLGQAeoEUotWnEGhGHke_gkxZC46oBbB6oW_pcyA,8028
4
+ fivetran_connector_sdk/protos/common_pb2.pyi,sha256=R_DpVfydkE5POi_GW94QTWmcIOTZBfC762Omb7hVcKU,10888
5
+ fivetran_connector_sdk/protos/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
6
+ fivetran_connector_sdk/protos/connector_sdk_pb2.py,sha256=8tpwfD6mxbe09u3pOZGHdEGXU99WShyKeaK0A3-afOY,7021
7
+ fivetran_connector_sdk/protos/connector_sdk_pb2.pyi,sha256=7mUA0lBLe0fcKcTSo04D_w-UIqfMvgjP44fKkaBQcvI,7437
8
+ fivetran_connector_sdk/protos/connector_sdk_pb2_grpc.py,sha256=AerM3GHYVHWPJW0AZilOaWuFlLSgtX733PcMC7iFs9Y,7287
9
+ fivetran_connector_sdk-0.6.6.1.dist-info/LICENSE,sha256=Kutp3D0T7HmHuBifKmbw39OZLAL1ckaLRb8u9lyJxE8,1065
10
+ fivetran_connector_sdk-0.6.6.1.dist-info/METADATA,sha256=DAfP5oQPc9nQTqFQ6COcOVG5XpoyIEuS_1W57B-nFpk,639
11
+ fivetran_connector_sdk-0.6.6.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
12
+ fivetran_connector_sdk-0.6.6.1.dist-info/entry_points.txt,sha256=uQn0KPnFlQmXJfxlk0tifdNsSXWfVlnAFzNqjXZM_xM,57
13
+ fivetran_connector_sdk-0.6.6.1.dist-info/top_level.txt,sha256=-_xk2MFY4psIh7jw1lJePMzFb5-vask8_ZtX-UzYWUI,23
14
+ fivetran_connector_sdk-0.6.6.1.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- fivetran_connector_sdk/__init__.py,sha256=EE6OsCCsTFRjEKS8a_iqd5BbiVKRgmKaQlqJvetVBzM,29434
2
- fivetran_connector_sdk/protos/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
3
- fivetran_connector_sdk/protos/common_pb2.py,sha256=TtSQBIMjzugRMwBuC0mDaSpbqILjtlqdbg7Licw9BC0,6749
4
- fivetran_connector_sdk/protos/common_pb2.pyi,sha256=aPFyc2tDOFJnQKhwP9moA2xrd3ygrDwYjTY6KT-INfY,9035
5
- fivetran_connector_sdk/protos/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
6
- fivetran_connector_sdk/protos/connector_sdk_pb2.py,sha256=I49KpGCshFNZVjGf3TcvPrO_4VzmpE-TYWjsAXliQkI,7454
7
- fivetran_connector_sdk/protos/connector_sdk_pb2.pyi,sha256=T0NRVDpyl-B-yKy_6AxQYODH4bfim16cJ0q2Eo_MS8E,8404
8
- fivetran_connector_sdk/protos/connector_sdk_pb2_grpc.py,sha256=4kmJ3SBcr3JTL5vh63wgMJ454HUJCv0dXlK3fvRyRQ0,7212
9
- fivetran_connector_sdk-0.4.27.1.dist-info/LICENSE,sha256=Kutp3D0T7HmHuBifKmbw39OZLAL1ckaLRb8u9lyJxE8,1065
10
- fivetran_connector_sdk-0.4.27.1.dist-info/METADATA,sha256=jGm4qT4Qh_NCsUk6R-qCGJWddP-QzUSwcTa0r4YDSig,670
11
- fivetran_connector_sdk-0.4.27.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
12
- fivetran_connector_sdk-0.4.27.1.dist-info/entry_points.txt,sha256=uQn0KPnFlQmXJfxlk0tifdNsSXWfVlnAFzNqjXZM_xM,57
13
- fivetran_connector_sdk-0.4.27.1.dist-info/top_level.txt,sha256=-_xk2MFY4psIh7jw1lJePMzFb5-vask8_ZtX-UzYWUI,23
14
- fivetran_connector_sdk-0.4.27.1.dist-info/RECORD,,