fivetran-connector-sdk 0.4.30.1__py3-none-any.whl → 0.6.6.2__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_DIRS = ["__pycache__", "lib", "include", OUTPUT_FILES_DIR]
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,40 @@ 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
+ return upload_filepath
345
+
346
+ def __dir_walker(self, top):
347
+ dirs, files = [], []
348
+ for name in os.listdir(top):
349
+ path = os.path.join(top, name)
350
+ if os.path.isdir(path):
351
+ if name not in EXCLUDED_DIRS:
352
+ dirs.append(name)
353
+ else:
354
+ if name.endswith(".py") or name == "requirements.txt":
355
+ files.append(name)
376
356
 
377
- finally:
378
- if container:
379
- container.stop()
357
+ yield top, files
358
+ for name in dirs:
359
+ new_path = os.path.join(top, name)
360
+ for x in self.__dir_walker(new_path):
361
+ yield x
380
362
 
381
363
  @staticmethod
382
364
  def __upload(local_path: str, deploy_key: str, group_id: str, connection: str) -> bool:
@@ -392,16 +374,15 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
392
374
  return False
393
375
 
394
376
  @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
- ])
377
+ def __get_os_name() -> str:
378
+ os_sysname = platform.system().lower()
379
+ if os_sysname.startswith("darwin"):
380
+ return MAC_OS
381
+ elif os_sysname.startswith("windows"):
382
+ return WIN_OS
383
+ elif os_sysname.startswith("linux"):
384
+ return LINUX_OS
385
+ raise ValueError(f"Unrecognized OS: {os_sysname}")
405
386
 
406
387
  @staticmethod
407
388
  def __get_group_info(group: str, deploy_key: str) -> tuple[str, str]:
@@ -440,7 +421,7 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
440
421
  self.state = _check_dict(state)
441
422
 
442
423
  server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
443
- connector_sdk_pb2_grpc.add_ConnectorServicer_to_server(self, server)
424
+ connector_sdk_pb2_grpc.add_SourceConnectorServicer_to_server(self, server)
444
425
  server.add_insecure_port("[::]:" + str(port))
445
426
  server.start()
446
427
  print("Connector started, listening on " + str(port))
@@ -454,56 +435,86 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
454
435
  DEBUGGING = True
455
436
 
456
437
  project_path = os.getcwd() if project_path is None else project_path
457
- print(f"Debugging connector: {project_path}")
438
+ print(f"Debugging connector at: {project_path}")
439
+
440
+ os_name = self.__get_os_name()
441
+ tester_root_dir = os.path.join(os.path.expanduser("~"), ROOT_LOCATION)
442
+ java_exe = self.__java_exe(tester_root_dir, os_name)
443
+ if not os.path.isdir(tester_root_dir):
444
+ # create folder in HOME directory
445
+ os.makedirs(tester_root_dir)
446
+
447
+ version_file = os.path.join(tester_root_dir, VERSION_FILENAME)
448
+ if os.path.isfile(version_file):
449
+ # TODO: Check version number & upgrade if necessary
450
+ pass
451
+ else:
452
+ print(f"Downloading connector tester (version {TESTER_VERSION}) .. ", end="", flush=True)
453
+ # download tester zip for the local OS
454
+ download_filename = f"sdk-connector-tester-{os_name}-{TESTER_VERSION}.zip"
455
+ download_filepath = os.path.join(tester_root_dir, download_filename)
456
+ download_url = f"https://github.com/fivetran/fivetran_sdk_tools/releases/download/v{TESTER_VERSION}/{download_filename}"
457
+ r = rq.get(download_url)
458
+ with open(download_filepath, 'wb') as fo:
459
+ fo.write(r.content)
460
+ # unzip it
461
+ with ZipFile(download_filepath, 'r') as z_object:
462
+ z_object.extractall(path=tester_root_dir)
463
+ # delete tester zip
464
+ os.remove(download_filepath)
465
+ # make java binary executable
466
+ import stat
467
+ st = os.stat(java_exe)
468
+ os.chmod(java_exe, st.st_mode | stat.S_IEXEC)
469
+ print("✓")
470
+
471
+ print(f"Running connector code..")
458
472
  server = self.run(port, configuration, state)
459
473
 
460
474
  # Uncomment this to run the tester manually
461
475
  #server.wait_for_termination()
462
476
 
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
477
  error = False
473
478
  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
479
+ print(f"Starting connector tester..")
480
+ for log_msg in self.__run_tester(java_exe, tester_root_dir, project_path):
481
+ print(log_msg, end="")
482
+
483
+ except:
484
+ import traceback
485
+ print(traceback.format_exc())
486
+ error = True
503
487
 
504
488
  finally:
505
489
  server.stop(grace=2.0)
506
- return not error
490
+ return error
491
+
492
+ @staticmethod
493
+ def __java_exe(location: str, os_name: str):
494
+ java_exe_base = os.path.join(location, "bin", "java")
495
+ return f"{java_exe_base}.exe" if os_name == WIN_OS else java_exe_base
496
+
497
+ @staticmethod
498
+ def __run_tester(java_exe: str, root_dir: str, project_path: str):
499
+ working_dir = os.path.join(project_path, OUTPUT_FILES_DIR)
500
+ try:
501
+ os.mkdir(working_dir)
502
+ except FileExistsError:
503
+ pass
504
+
505
+ cmd = [java_exe,
506
+ "-jar",
507
+ os.path.join(root_dir, TESTER_FILENAME),
508
+ "--connector-sdk=true",
509
+ f"--working-dir={working_dir}"]
510
+
511
+ popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
512
+ for stdout_line in iter(popen.stdout.readline, ""):
513
+ yield stdout_line
514
+ popen.stdout.close()
515
+ return_code = popen.wait()
516
+ if return_code:
517
+ raise subprocess.CalledProcessError(return_code, cmd)
507
518
 
508
519
  # -- Methods below override ConnectorServicer methods
509
520
  def ConfigurationForm(self, request, context):
@@ -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.30.1
3
+ Version: 0.6.6.2
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=G6lTHgjIq02-xop9DBMEVhZgf0vxmLxPKiaRbuTS5II,29683
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.2.dist-info/LICENSE,sha256=Kutp3D0T7HmHuBifKmbw39OZLAL1ckaLRb8u9lyJxE8,1065
10
+ fivetran_connector_sdk-0.6.6.2.dist-info/METADATA,sha256=r3Sb-CE_3UH6ShnW5KfHadoIOfMs77urkBMEAfYeuQc,639
11
+ fivetran_connector_sdk-0.6.6.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
12
+ fivetran_connector_sdk-0.6.6.2.dist-info/entry_points.txt,sha256=uQn0KPnFlQmXJfxlk0tifdNsSXWfVlnAFzNqjXZM_xM,57
13
+ fivetran_connector_sdk-0.6.6.2.dist-info/top_level.txt,sha256=-_xk2MFY4psIh7jw1lJePMzFb5-vask8_ZtX-UzYWUI,23
14
+ fivetran_connector_sdk-0.6.6.2.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- fivetran_connector_sdk/__init__.py,sha256=bDdPCJBcVnCV4Xs4wUD3lIJmi4NgI9LnYIoh0HYiAGI,29720
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.30.1.dist-info/LICENSE,sha256=Kutp3D0T7HmHuBifKmbw39OZLAL1ckaLRb8u9lyJxE8,1065
10
- fivetran_connector_sdk-0.4.30.1.dist-info/METADATA,sha256=ncrDb8wdpckwZ6Vi-fF3r9q4cq9oh3TuoVCVH_fjKF4,670
11
- fivetran_connector_sdk-0.4.30.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
12
- fivetran_connector_sdk-0.4.30.1.dist-info/entry_points.txt,sha256=uQn0KPnFlQmXJfxlk0tifdNsSXWfVlnAFzNqjXZM_xM,57
13
- fivetran_connector_sdk-0.4.30.1.dist-info/top_level.txt,sha256=-_xk2MFY4psIh7jw1lJePMzFb5-vask8_ZtX-UzYWUI,23
14
- fivetran_connector_sdk-0.4.30.1.dist-info/RECORD,,