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.
- fivetran_connector_sdk/__init__.py +159 -131
- fivetran_connector_sdk/protos/__init__.py +0 -1
- fivetran_connector_sdk/protos/common_pb2.py +46 -40
- fivetran_connector_sdk/protos/common_pb2.pyi +49 -13
- fivetran_connector_sdk/protos/connector_sdk_pb2.py +39 -41
- fivetran_connector_sdk/protos/connector_sdk_pb2.pyi +2 -28
- fivetran_connector_sdk/protos/connector_sdk_pb2_grpc.py +17 -18
- {fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/METADATA +1 -2
- fivetran_connector_sdk-0.6.6.1.dist-info/RECORD +14 -0
- fivetran_connector_sdk-0.4.27.1.dist-info/RECORD +0 -14
- {fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/LICENSE +0 -0
- {fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/WHEEL +0 -0
- {fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/entry_points.txt +0 -0
- {fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/top_level.txt +0 -0
@@ -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
|
-
|
21
|
-
|
22
|
-
|
21
|
+
MAC_OS = "mac"
|
22
|
+
WIN_OS = "windows"
|
23
|
+
LINUX_OS = "linux"
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
50
|
-
|
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.
|
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.
|
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.
|
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
|
-
|
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.
|
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.
|
259
|
-
|
260
|
-
|
261
|
-
|
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
|
-
|
329
|
-
|
330
|
-
|
331
|
-
print("
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
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
|
-
|
378
|
-
|
379
|
-
|
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
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
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.
|
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
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
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
|
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\
|
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\
|
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=
|
28
|
-
_globals['_TEXTFIELD']._serialized_end=
|
29
|
-
_globals['_DATATYPE']._serialized_start=
|
30
|
-
_globals['_DATATYPE']._serialized_end=
|
31
|
-
_globals['
|
32
|
-
_globals['
|
33
|
-
_globals['_CONFIGURATIONFORMREQUEST']._serialized_start=
|
34
|
-
_globals['_CONFIGURATIONFORMREQUEST']._serialized_end=
|
35
|
-
_globals['_CONFIGURATIONFORMRESPONSE']._serialized_start=
|
36
|
-
_globals['_CONFIGURATIONFORMRESPONSE']._serialized_end=
|
37
|
-
_globals['_FORMFIELD']._serialized_start=
|
38
|
-
_globals['_FORMFIELD']._serialized_end=
|
39
|
-
_globals['
|
40
|
-
_globals['
|
41
|
-
_globals['
|
42
|
-
_globals['
|
43
|
-
_globals['
|
44
|
-
_globals['
|
45
|
-
_globals['
|
46
|
-
_globals['
|
47
|
-
_globals['
|
48
|
-
_globals['
|
49
|
-
_globals['
|
50
|
-
_globals['
|
51
|
-
_globals['
|
52
|
-
_globals['
|
53
|
-
_globals['
|
54
|
-
_globals['
|
55
|
-
_globals['
|
56
|
-
_globals['
|
57
|
-
_globals['
|
58
|
-
_globals['
|
59
|
-
_globals['
|
60
|
-
_globals['
|
61
|
-
_globals['
|
62
|
-
_globals['
|
63
|
-
_globals['
|
64
|
-
_globals['
|
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
|
35
|
+
class RecordType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
35
36
|
__slots__ = []
|
36
|
-
UPSERT: _ClassVar[
|
37
|
-
UPDATE: _ClassVar[
|
38
|
-
DELETE: _ClassVar[
|
39
|
-
TRUNCATE: _ClassVar[
|
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:
|
59
|
-
UPDATE:
|
60
|
-
DELETE:
|
61
|
-
TRUNCATE:
|
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__ = ["
|
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
|
-
|
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['
|
31
|
-
_globals['
|
32
|
-
_globals['
|
33
|
-
_globals['
|
34
|
-
_globals['
|
35
|
-
_globals['
|
36
|
-
_globals['
|
37
|
-
_globals['
|
38
|
-
_globals['
|
39
|
-
_globals['
|
40
|
-
_globals['
|
41
|
-
_globals['
|
42
|
-
_globals['
|
43
|
-
_globals['
|
44
|
-
_globals['
|
45
|
-
_globals['
|
46
|
-
_globals['
|
47
|
-
_globals['
|
48
|
-
_globals['
|
49
|
-
_globals['
|
50
|
-
_globals['
|
51
|
-
_globals['
|
52
|
-
_globals['
|
53
|
-
_globals['
|
54
|
-
_globals['
|
55
|
-
_globals['
|
56
|
-
_globals['
|
57
|
-
_globals['
|
58
|
-
_globals['
|
59
|
-
_globals['
|
60
|
-
_globals['
|
61
|
-
_globals['
|
62
|
-
_globals['
|
63
|
-
_globals['
|
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.
|
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.
|
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
|
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
|
13
|
-
"""Fivetran (grpc client) <>
|
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.
|
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.
|
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.
|
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.
|
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
|
45
|
-
"""Fivetran (grpc client) <>
|
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
|
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.
|
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
|
103
|
-
"""Fivetran (grpc client) <>
|
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.
|
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.
|
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.
|
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.
|
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,
|
{fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fivetran_connector_sdk
|
3
|
-
Version: 0.
|
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,,
|
{fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/LICENSE
RENAMED
File without changes
|
{fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
{fivetran_connector_sdk-0.4.27.1.dist-info → fivetran_connector_sdk-0.6.6.1.dist-info}/top_level.txt
RENAMED
File without changes
|