fivetran-connector-sdk 1.7.0__py3-none-any.whl → 1.7.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.
- fivetran_connector_sdk/__init__.py +14 -3
- fivetran_connector_sdk/connector_helper.py +59 -67
- fivetran_connector_sdk/constants.py +2 -2
- fivetran_connector_sdk/helpers.py +48 -7
- fivetran_connector_sdk/operations.py +7 -14
- fivetran_connector_sdk/protos/common_pb2.py +64 -44
- fivetran_connector_sdk/protos/common_pb2.pyi +67 -17
- fivetran_connector_sdk/protos/common_pb2_grpc.py +20 -0
- fivetran_connector_sdk/protos/connector_sdk_pb2.py +53 -49
- fivetran_connector_sdk/protos/connector_sdk_pb2.pyi +8 -30
- fivetran_connector_sdk/protos/connector_sdk_pb2_grpc.py +90 -29
- {fivetran_connector_sdk-1.7.0.dist-info → fivetran_connector_sdk-1.7.2.dist-info}/METADATA +2 -1
- fivetran_connector_sdk-1.7.2.dist-info/RECORD +18 -0
- fivetran_connector_sdk-1.7.0.dist-info/RECORD +0 -18
- {fivetran_connector_sdk-1.7.0.dist-info → fivetran_connector_sdk-1.7.2.dist-info}/WHEEL +0 -0
- {fivetran_connector_sdk-1.7.0.dist-info → fivetran_connector_sdk-1.7.2.dist-info}/entry_points.txt +0 -0
- {fivetran_connector_sdk-1.7.0.dist-info → fivetran_connector_sdk-1.7.2.dist-info}/top_level.txt +0 -0
@@ -39,13 +39,13 @@ from fivetran_connector_sdk.connector_helper import (
|
|
39
39
|
|
40
40
|
# Version format: <major_version>.<minor_version>.<patch_version>
|
41
41
|
# (where Major Version = 1 for GA, Minor Version is incremental MM from Jan 25 onwards, Patch Version is incremental within a month)
|
42
|
-
__version__ = "1.7.
|
42
|
+
__version__ = "1.7.2"
|
43
43
|
TESTER_VERSION = TESTER_VER
|
44
44
|
MAX_MESSAGE_LENGTH = 32 * 1024 * 1024 # 32MB
|
45
45
|
|
46
46
|
__all__ = [cls.__name__ for cls in [Logging, Operations]]
|
47
47
|
|
48
|
-
class Connector(connector_sdk_pb2_grpc.
|
48
|
+
class Connector(connector_sdk_pb2_grpc.SourceConnectorServicer):
|
49
49
|
def __init__(self, update, schema=None):
|
50
50
|
"""Initializes the Connector instance.
|
51
51
|
Args:
|
@@ -74,6 +74,17 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
|
|
74
74
|
hd_agent_id (str): The hybrid deployment agent ID within the Fivetran system.
|
75
75
|
configuration (dict): The configuration dictionary.
|
76
76
|
"""
|
77
|
+
deploy_cmd = f"Deploying with parameters: Fivetran deploy --destination {group} --connection {connection} --api-key {deploy_key[0:8]}******** "
|
78
|
+
if config_path:
|
79
|
+
deploy_cmd += f"--configuration {config_path} "
|
80
|
+
if python_version:
|
81
|
+
deploy_cmd += f"--python-version {python_version} "
|
82
|
+
if hd_agent_id:
|
83
|
+
deploy_cmd += f"--hd-agent-id {hd_agent_id} "
|
84
|
+
if force:
|
85
|
+
deploy_cmd += "--force"
|
86
|
+
print_library_log(deploy_cmd)
|
87
|
+
|
77
88
|
constants.EXECUTED_VIA_CLI = True
|
78
89
|
|
79
90
|
print_library_log("We support only `.py` files and a `requirements.txt` file as part of the code upload. *No other code files* are supported or uploaded during the deployment process. Ensure that your code is structured accordingly and all dependencies are listed in `requirements.txt`")
|
@@ -184,7 +195,7 @@ class Connector(connector_sdk_pb2_grpc.ConnectorServicer):
|
|
184
195
|
('grpc.max_receive_message_length', MAX_MESSAGE_LENGTH),
|
185
196
|
]
|
186
197
|
)
|
187
|
-
connector_sdk_pb2_grpc.
|
198
|
+
connector_sdk_pb2_grpc.add_SourceConnectorServicer_to_server(self, server)
|
188
199
|
server.add_insecure_port("[::]:" + str(port))
|
189
200
|
server.start()
|
190
201
|
if constants.DEBUGGING:
|
@@ -378,72 +378,61 @@ def validate_requirements_file(project_path: str, is_deploy: bool, version: str
|
|
378
378
|
update_version_requirements = False
|
379
379
|
update_missing_requirements = False
|
380
380
|
update_unused_requirements = False
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
381
|
+
requirements = load_or_add_requirements_file(requirements_file_path)
|
382
|
+
|
383
|
+
version_mismatch_deps = {key: tmp_requirements[key] for key in
|
384
|
+
(requirements.keys() & tmp_requirements.keys())
|
385
|
+
if requirements[key] != tmp_requirements[key]}
|
386
|
+
if version_mismatch_deps:
|
387
|
+
print_library_log("We recommend using the current stable version for the following libraries:", Logging.Level.WARNING)
|
388
|
+
print(version_mismatch_deps)
|
389
|
+
if is_deploy and not force:
|
390
|
+
confirm = input(
|
391
|
+
f"Would you like us to update {REQUIREMENTS_TXT} to the current stable versions of the dependent libraries? (y/N):")
|
392
|
+
if confirm.lower() == "y":
|
393
|
+
update_version_requirements = True
|
394
|
+
for requirement in version_mismatch_deps:
|
395
|
+
requirements[requirement] = tmp_requirements[requirement]
|
396
|
+
print_library_log(
|
397
|
+
f"Successfully updated {REQUIREMENTS_TXT} to the current stable versions of the dependent libraries.")
|
398
|
+
elif confirm.lower() == "n":
|
399
|
+
print_library_log(f"Changes identified for libraries with version conflicts have been ignored. These changes have NOT been made to {REQUIREMENTS_TXT}.")
|
400
|
+
|
401
|
+
missing_deps = {key: tmp_requirements[key] for key in (tmp_requirements.keys() - requirements.keys())}
|
402
|
+
if missing_deps:
|
403
|
+
handle_missing_deps(missing_deps)
|
404
|
+
if is_deploy and not force:
|
405
|
+
confirm = input(
|
406
|
+
f"Would you like us to update {REQUIREMENTS_TXT} to add missing dependent libraries? (y/N):")
|
407
|
+
if confirm.lower() == "n":
|
408
|
+
print_library_log(f"Changes identified as missing dependencies for libraries have been ignored. These changes have NOT been made to {REQUIREMENTS_TXT}.")
|
409
|
+
elif confirm.lower() == "y":
|
410
|
+
update_missing_requirements = True
|
411
|
+
for requirement in missing_deps:
|
412
|
+
requirements[requirement] = tmp_requirements[requirement]
|
413
|
+
print_library_log(f"Successfully added missing dependencies to {REQUIREMENTS_TXT}.")
|
414
|
+
|
415
|
+
unused_deps = list(requirements.keys() - tmp_requirements.keys())
|
416
|
+
if unused_deps:
|
417
|
+
handle_unused_deps(unused_deps, version)
|
418
|
+
if is_deploy and not force:
|
419
|
+
confirm = input(f"Would you like us to update {REQUIREMENTS_TXT} to remove the unused libraries? (y/N):")
|
420
|
+
if confirm.lower() == "n":
|
421
|
+
if 'fivetran_connector_sdk' in unused_deps or 'requests' in unused_deps:
|
397
422
|
print_library_log(
|
398
|
-
f"
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
update_missing_requirements = True
|
412
|
-
for requirement in missing_deps:
|
413
|
-
requirements[requirement] = tmp_requirements[requirement]
|
414
|
-
print_library_log(f"Successfully added missing dependencies to {REQUIREMENTS_TXT}.")
|
415
|
-
|
416
|
-
unused_deps = list(requirements.keys() - tmp_requirements.keys())
|
417
|
-
if unused_deps:
|
418
|
-
handle_unused_deps(unused_deps, version)
|
419
|
-
if is_deploy and not force:
|
420
|
-
confirm = input(f"Would you like us to update {REQUIREMENTS_TXT} to remove the unused libraries? (Y/N):")
|
421
|
-
if confirm.lower() == "n":
|
422
|
-
if 'fivetran_connector_sdk' in unused_deps or 'requests' in unused_deps:
|
423
|
-
print_library_log(
|
424
|
-
f"Fix your {REQUIREMENTS_TXT} file by removing pre-installed dependencies [fivetran_connector_sdk, requests] to proceed with the deployment.")
|
425
|
-
sys.exit(1)
|
426
|
-
print_library_log(f"Changes identified for unused libraries have been ignored. These changes have NOT been made to {REQUIREMENTS_TXT}.")
|
427
|
-
elif confirm.lower() == "y":
|
428
|
-
update_unused_requirements = True
|
429
|
-
for requirement in unused_deps:
|
430
|
-
del requirements[requirement]
|
431
|
-
print_library_log(f"Successfully removed unused libraries from {REQUIREMENTS_TXT}.")
|
432
|
-
|
433
|
-
|
434
|
-
if update_version_requirements or update_missing_requirements or update_unused_requirements:
|
435
|
-
with open(requirements_file_path, "w", encoding=UTF_8) as file:
|
436
|
-
file.write("\n".join(requirements.values()))
|
437
|
-
print_library_log(f"`{REQUIREMENTS_TXT}` has been updated successfully.")
|
438
|
-
|
439
|
-
else:
|
440
|
-
if os.path.exists(requirements_file_path):
|
441
|
-
print_library_log(f"{REQUIREMENTS_TXT} is not required as no additional "
|
442
|
-
"Python libraries are required or all required libraries for "
|
443
|
-
"your code are pre-installed.", Logging.Level.WARNING)
|
444
|
-
with open(requirements_file_path, 'w') as file:
|
445
|
-
file.write("")
|
446
|
-
|
423
|
+
f"Fix your {REQUIREMENTS_TXT} file by removing pre-installed dependencies [fivetran_connector_sdk, requests] to proceed with the deployment.")
|
424
|
+
sys.exit(1)
|
425
|
+
print_library_log(f"Changes identified for unused libraries have been ignored. These changes have NOT been made to {REQUIREMENTS_TXT}.")
|
426
|
+
elif confirm.lower() == "y":
|
427
|
+
update_unused_requirements = True
|
428
|
+
for requirement in unused_deps:
|
429
|
+
del requirements[requirement]
|
430
|
+
print_library_log(f"Successfully removed unused libraries from {REQUIREMENTS_TXT}.")
|
431
|
+
|
432
|
+
if update_version_requirements or update_missing_requirements or update_unused_requirements:
|
433
|
+
with open(requirements_file_path, "w", encoding=UTF_8) as file:
|
434
|
+
file.write("\n".join(requirements.values()))
|
435
|
+
print_library_log(f"`{REQUIREMENTS_TXT}` has been updated successfully.")
|
447
436
|
|
448
437
|
if is_deploy: print_library_log(f"Validation of {REQUIREMENTS_TXT} completed.")
|
449
438
|
|
@@ -963,8 +952,8 @@ def process_columns(columns, entry):
|
|
963
952
|
)
|
964
953
|
raise ValueError(error_message)
|
965
954
|
column.type = common_pb2.DataType.DECIMAL
|
966
|
-
column.decimal.precision = type['precision']
|
967
|
-
column.decimal.scale = type['scale']
|
955
|
+
column.params.decimal.precision = type['precision']
|
956
|
+
column.params.decimal.scale = type['scale']
|
968
957
|
|
969
958
|
else:
|
970
959
|
raise ValueError(
|
@@ -974,6 +963,7 @@ def process_columns(columns, entry):
|
|
974
963
|
if "primary_key" in entry and name in entry["primary_key"]:
|
975
964
|
column.primary_key = True
|
976
965
|
|
966
|
+
|
977
967
|
columns[column_name] = column
|
978
968
|
|
979
969
|
def process_data_type(column, type):
|
@@ -999,6 +989,8 @@ def process_data_type(column, type):
|
|
999
989
|
column.type = common_pb2.DataType.FLOAT
|
1000
990
|
elif type.upper() == "DOUBLE":
|
1001
991
|
column.type = common_pb2.DataType.DOUBLE
|
992
|
+
elif type.upper() == "NAIVE_TIME":
|
993
|
+
column.type = common_pb2.DataType.NAIVE_TIME
|
1002
994
|
elif type.upper() == "NAIVE_DATE":
|
1003
995
|
column.type = common_pb2.DataType.NAIVE_DATE
|
1004
996
|
elif type.upper() == "NAIVE_DATETIME":
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import re
|
2
2
|
|
3
|
-
TESTER_VER = "
|
3
|
+
TESTER_VER = "2.25.0701.001"
|
4
4
|
|
5
5
|
WIN_OS = "windows"
|
6
6
|
ARM_64 = "arm64"
|
@@ -24,7 +24,7 @@ DEBUGGING = False
|
|
24
24
|
EXECUTED_VIA_CLI = False
|
25
25
|
TABLES = {}
|
26
26
|
|
27
|
-
TESTER_FILENAME = "
|
27
|
+
TESTER_FILENAME = "sdk_connector_tester.jar"
|
28
28
|
VERSION_FILENAME = "version.txt"
|
29
29
|
UPLOAD_FILENAME = "code.zip"
|
30
30
|
LAST_VERSION_CHECK_FILE = "_last_version_check"
|
@@ -7,6 +7,10 @@ import unicodedata
|
|
7
7
|
import importlib.util
|
8
8
|
from datetime import datetime
|
9
9
|
from unidecode import unidecode
|
10
|
+
from prompt_toolkit import prompt
|
11
|
+
from prompt_toolkit.document import Document
|
12
|
+
from prompt_toolkit.history import FileHistory
|
13
|
+
from prompt_toolkit.completion import Completer, Completion, PathCompleter, merge_completers
|
10
14
|
|
11
15
|
from fivetran_connector_sdk.logger import Logging
|
12
16
|
from fivetran_connector_sdk import constants
|
@@ -255,23 +259,60 @@ def edit_distance(first_string: str, second_string: str) -> int:
|
|
255
259
|
# The last value in the last row is the edit distance
|
256
260
|
return previous_row[second_string_length]
|
257
261
|
|
258
|
-
|
259
|
-
def
|
262
|
+
class EnvironmentVariableCompleter(Completer):
|
263
|
+
def get_completions(self, document, complete_event):
|
264
|
+
text = document.text_before_cursor
|
265
|
+
if text.startswith('$'):
|
266
|
+
# Get the variable name part (text after the '$')
|
267
|
+
var_name = text[1:]
|
268
|
+
|
269
|
+
# Suggest all environment variables that start with the typed name
|
270
|
+
for env_var in os.environ:
|
271
|
+
if env_var.startswith(var_name):
|
272
|
+
yield Completion(
|
273
|
+
f'${env_var}',
|
274
|
+
start_position=-len(text)
|
275
|
+
)
|
276
|
+
|
277
|
+
class EnvVarPathCompleter(Completer):
|
278
|
+
def get_completions(self, document, complete_event):
|
279
|
+
text_before_cursor = document.text_before_cursor
|
280
|
+
expanded_text = os.path.expandvars(text_before_cursor)
|
281
|
+
|
282
|
+
# Create a new document for the PathCompleter to use
|
283
|
+
expanded_document = Document(
|
284
|
+
text=expanded_text, cursor_position=len(expanded_text)
|
285
|
+
)
|
286
|
+
|
287
|
+
# Use a standard PathCompleter on our new, temporary document
|
288
|
+
path_completer = PathCompleter(expanduser=True)
|
289
|
+
yield from path_completer.get_completions(expanded_document, complete_event)
|
290
|
+
|
291
|
+
|
292
|
+
def get_input_from_cli(prompt_txt: str, default_value: str, hide_value = False) -> str:
|
260
293
|
"""
|
261
294
|
Prompts the user for input.
|
262
295
|
"""
|
296
|
+
final_completer = merge_completers([EnvironmentVariableCompleter(), EnvVarPathCompleter()])
|
297
|
+
history = FileHistory(os.path.join(os.path.expanduser('~'), '.fivetran_history'))
|
263
298
|
if default_value:
|
264
299
|
if hide_value:
|
265
300
|
default_value_hidden = default_value[0:8] + "********"
|
266
|
-
value =
|
301
|
+
value = prompt(f"{prompt_txt} [Default : {default_value_hidden}]: ",
|
302
|
+
completer=final_completer, history=history, complete_while_typing=False, complete_style='readline_like'
|
303
|
+
).strip() or default_value
|
267
304
|
else:
|
268
|
-
value =
|
305
|
+
value = prompt(f"{prompt_txt} [Default : {default_value}]: ",
|
306
|
+
completer=final_completer, history=history, complete_while_typing=False, complete_style='readline_like'
|
307
|
+
).strip() or default_value
|
269
308
|
else:
|
270
|
-
value =
|
309
|
+
value = prompt(f"{prompt_txt}: ",
|
310
|
+
completer=final_completer, history=history, complete_while_typing=False, complete_style='readline_like'
|
311
|
+
).strip()
|
271
312
|
|
272
313
|
if not value:
|
273
314
|
raise ValueError("Missing required input: Expected a value but received None")
|
274
|
-
return value
|
315
|
+
return os.path.expandvars(value)
|
275
316
|
|
276
317
|
def validate_and_load_configuration(project_path, configuration):
|
277
318
|
if configuration:
|
@@ -323,7 +364,7 @@ def reset_local_file_directory(args):
|
|
323
364
|
confirm = "y"
|
324
365
|
else:
|
325
366
|
confirm = input(
|
326
|
-
"This will delete your current state and `warehouse.db` files. Do you want to continue? (Y/
|
367
|
+
"This will delete your current state and `warehouse.db` files. Do you want to continue? (Y/n): ")
|
327
368
|
if confirm.lower() != "y":
|
328
369
|
print_library_log("Reset canceled")
|
329
370
|
else:
|
@@ -55,13 +55,11 @@ class Operations:
|
|
55
55
|
record = connector_sdk_pb2.Record(
|
56
56
|
schema_name=None,
|
57
57
|
table_name=table,
|
58
|
-
type=common_pb2.
|
58
|
+
type=common_pb2.RecordType.UPSERT,
|
59
59
|
data=mapped_data
|
60
60
|
)
|
61
61
|
|
62
|
-
responses.append(
|
63
|
-
connector_sdk_pb2.UpdateResponse(
|
64
|
-
operation=connector_sdk_pb2.Operation(record=record)))
|
62
|
+
responses.append(connector_sdk_pb2.UpdateResponse(record=record))
|
65
63
|
|
66
64
|
return responses
|
67
65
|
|
@@ -85,12 +83,11 @@ class Operations:
|
|
85
83
|
record = connector_sdk_pb2.Record(
|
86
84
|
schema_name=None,
|
87
85
|
table_name=table,
|
88
|
-
type=common_pb2.
|
86
|
+
type=common_pb2.RecordType.UPDATE,
|
89
87
|
data=mapped_data
|
90
88
|
)
|
91
89
|
|
92
|
-
return connector_sdk_pb2.UpdateResponse(
|
93
|
-
operation=connector_sdk_pb2.Operation(record=record))
|
90
|
+
return connector_sdk_pb2.UpdateResponse(record=record)
|
94
91
|
|
95
92
|
@staticmethod
|
96
93
|
def delete(table: str, keys: dict) -> connector_sdk_pb2.UpdateResponse:
|
@@ -112,12 +109,11 @@ class Operations:
|
|
112
109
|
record = connector_sdk_pb2.Record(
|
113
110
|
schema_name=None,
|
114
111
|
table_name=table,
|
115
|
-
type=common_pb2.
|
112
|
+
type=common_pb2.RecordType.DELETE,
|
116
113
|
data=mapped_data
|
117
114
|
)
|
118
115
|
|
119
|
-
return connector_sdk_pb2.UpdateResponse(
|
120
|
-
operation=connector_sdk_pb2.Operation(record=record))
|
116
|
+
return connector_sdk_pb2.UpdateResponse(record=record)
|
121
117
|
|
122
118
|
@staticmethod
|
123
119
|
def checkpoint(state: dict) -> connector_sdk_pb2.UpdateResponse:
|
@@ -142,10 +138,7 @@ class Operations:
|
|
142
138
|
"""
|
143
139
|
if constants.DEBUGGING:
|
144
140
|
_yield_check(inspect.stack())
|
145
|
-
|
146
|
-
return connector_sdk_pb2.UpdateResponse(
|
147
|
-
operation=connector_sdk_pb2.Operation(checkpoint=connector_sdk_pb2.Checkpoint(
|
148
|
-
state_json=json.dumps(state))))
|
141
|
+
return connector_sdk_pb2.UpdateResponse(checkpoint=connector_sdk_pb2.Checkpoint(state_json=json.dumps(state)))
|
149
142
|
|
150
143
|
def _get_columns(table: str) -> dict:
|
151
144
|
"""Retrieves the columns for the specified table.
|
@@ -1,12 +1,22 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
3
4
|
# source: common.proto
|
4
|
-
# Protobuf Python Version:
|
5
|
+
# Protobuf Python Version: 5.29.0
|
5
6
|
"""Generated protocol buffer code."""
|
6
7
|
from google.protobuf import descriptor as _descriptor
|
7
8
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
8
10
|
from google.protobuf import symbol_database as _symbol_database
|
9
11
|
from google.protobuf.internal import builder as _builder
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
14
|
+
5,
|
15
|
+
29,
|
16
|
+
0,
|
17
|
+
'',
|
18
|
+
'common.proto'
|
19
|
+
)
|
10
20
|
# @@protoc_insertion_point(imports)
|
11
21
|
|
12
22
|
_sym_db = _symbol_database.Default()
|
@@ -15,52 +25,62 @@ _sym_db = _symbol_database.Default()
|
|
15
25
|
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
|
16
26
|
|
17
27
|
|
18
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommon.proto\x12\
|
28
|
+
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\"\xba\x03\n\tFormField\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x15\n\x08required\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x30\n\ntext_field\x18\x05 \x01(\x0e\x32\x1a.fivetran_sdk.v2.TextFieldH\x00\x12\x38\n\x0e\x64ropdown_field\x18\x06 \x01(\x0b\x32\x1e.fivetran_sdk.v2.DropdownFieldH\x00\x12\x34\n\x0ctoggle_field\x18\x07 \x01(\x0b\x32\x1c.fivetran_sdk.v2.ToggleFieldH\x00\x12@\n\x12\x63onditional_fields\x18\n \x01(\x0b\x32\".fivetran_sdk.v2.ConditionalFieldsH\x00\x12\x1a\n\rdefault_value\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bplaceholder\x18\t \x01(\tH\x04\x88\x01\x01\x42\x06\n\x04typeB\x0b\n\t_requiredB\x0e\n\x0c_descriptionB\x10\n\x0e_default_valueB\x0e\n\x0c_placeholder\"x\n\x11\x43onditionalFields\x12\x37\n\tcondition\x18\x01 \x01(\x0b\x32$.fivetran_sdk.v2.VisibilityCondition\x12*\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x1a.fivetran_sdk.v2.FormField\"\x83\x01\n\x13VisibilityCondition\x12\x17\n\x0f\x63ondition_field\x18\x01 \x01(\t\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x12\x15\n\x0b\x65mpty_value\x18\x04 \x01(\x08H\x00\x42\x0e\n\x0cvisible_when\"\'\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\"k\n\x0e\x44\x61taTypeParams\x12\x31\n\x07\x64\x65\x63imal\x18\x01 \x01(\x0b\x32\x1e.fivetran_sdk.v2.DecimalParamsH\x00\x12\x1c\n\x12string_byte_length\x18\x02 \x01(\x05H\x00\x42\x08\n\x06params\"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_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\x12\x30\n\nnaive_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\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\"\x95\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\x06params\x18\x04 \x01(\x0b\x32\x1f.fivetran_sdk.v2.DataTypeParamsH\x00\x88\x01\x01\x42\t\n\x07_params\"\x1a\n\x07Warning\x12\x0f\n\x07message\x18\x01 \x01(\t\"\x17\n\x04Task\x12\x0f\n\x07message\x18\x01 \x01(\t*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_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\x12\x0e\n\nNAIVE_TIME\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\x1c\x66ivetran.com/fivetran_sdk_v2b\x06proto3')
|
19
29
|
|
20
30
|
_globals = globals()
|
21
31
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
22
32
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common_pb2', _globals)
|
23
|
-
if _descriptor._USE_C_DESCRIPTORS
|
24
|
-
_globals['DESCRIPTOR'].
|
25
|
-
_globals['DESCRIPTOR']._serialized_options = b'H\001P\001Z\
|
26
|
-
_globals['_TESTREQUEST_CONFIGURATIONENTRY'].
|
33
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
34
|
+
_globals['DESCRIPTOR']._loaded_options = None
|
35
|
+
_globals['DESCRIPTOR']._serialized_options = b'H\001P\001Z\034fivetran.com/fivetran_sdk_v2'
|
36
|
+
_globals['_TESTREQUEST_CONFIGURATIONENTRY']._loaded_options = None
|
27
37
|
_globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
|
28
|
-
_globals['_TEXTFIELD']._serialized_start=
|
29
|
-
_globals['_TEXTFIELD']._serialized_end=
|
30
|
-
_globals['_DATATYPE']._serialized_start=
|
31
|
-
_globals['_DATATYPE']._serialized_end=
|
32
|
-
_globals['
|
33
|
-
_globals['
|
34
|
-
_globals['_CONFIGURATIONFORMREQUEST']._serialized_start=
|
35
|
-
_globals['_CONFIGURATIONFORMREQUEST']._serialized_end=
|
36
|
-
_globals['_CONFIGURATIONFORMRESPONSE']._serialized_start=
|
37
|
-
_globals['_CONFIGURATIONFORMRESPONSE']._serialized_end=
|
38
|
-
_globals['_FORMFIELD']._serialized_start=
|
39
|
-
_globals['_FORMFIELD']._serialized_end=
|
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['
|
65
|
-
_globals['
|
38
|
+
_globals['_TEXTFIELD']._serialized_start=2352
|
39
|
+
_globals['_TEXTFIELD']._serialized_end=2404
|
40
|
+
_globals['_DATATYPE']._serialized_start=2407
|
41
|
+
_globals['_DATATYPE']._serialized_end=2626
|
42
|
+
_globals['_RECORDTYPE']._serialized_start=2628
|
43
|
+
_globals['_RECORDTYPE']._serialized_end=2690
|
44
|
+
_globals['_CONFIGURATIONFORMREQUEST']._serialized_start=66
|
45
|
+
_globals['_CONFIGURATIONFORMREQUEST']._serialized_end=92
|
46
|
+
_globals['_CONFIGURATIONFORMRESPONSE']._serialized_start=95
|
47
|
+
_globals['_CONFIGURATIONFORMRESPONSE']._serialized_end=288
|
48
|
+
_globals['_FORMFIELD']._serialized_start=291
|
49
|
+
_globals['_FORMFIELD']._serialized_end=733
|
50
|
+
_globals['_CONDITIONALFIELDS']._serialized_start=735
|
51
|
+
_globals['_CONDITIONALFIELDS']._serialized_end=855
|
52
|
+
_globals['_VISIBILITYCONDITION']._serialized_start=858
|
53
|
+
_globals['_VISIBILITYCONDITION']._serialized_end=989
|
54
|
+
_globals['_DROPDOWNFIELD']._serialized_start=991
|
55
|
+
_globals['_DROPDOWNFIELD']._serialized_end=1030
|
56
|
+
_globals['_TOGGLEFIELD']._serialized_start=1032
|
57
|
+
_globals['_TOGGLEFIELD']._serialized_end=1045
|
58
|
+
_globals['_CONFIGURATIONTEST']._serialized_start=1047
|
59
|
+
_globals['_CONFIGURATIONTEST']._serialized_end=1095
|
60
|
+
_globals['_TESTREQUEST']._serialized_start=1098
|
61
|
+
_globals['_TESTREQUEST']._serialized_end=1251
|
62
|
+
_globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_start=1199
|
63
|
+
_globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_end=1251
|
64
|
+
_globals['_TESTRESPONSE']._serialized_start=1253
|
65
|
+
_globals['_TESTRESPONSE']._serialized_end=1317
|
66
|
+
_globals['_SCHEMALIST']._serialized_start=1319
|
67
|
+
_globals['_SCHEMALIST']._serialized_end=1373
|
68
|
+
_globals['_TABLELIST']._serialized_start=1375
|
69
|
+
_globals['_TABLELIST']._serialized_end=1426
|
70
|
+
_globals['_SCHEMA']._serialized_start=1428
|
71
|
+
_globals['_SCHEMA']._serialized_end=1490
|
72
|
+
_globals['_DATATYPEPARAMS']._serialized_start=1492
|
73
|
+
_globals['_DATATYPEPARAMS']._serialized_end=1599
|
74
|
+
_globals['_DECIMALPARAMS']._serialized_start=1601
|
75
|
+
_globals['_DECIMALPARAMS']._serialized_end=1650
|
76
|
+
_globals['_VALUETYPE']._serialized_start=1653
|
77
|
+
_globals['_VALUETYPE']._serialized_end=2080
|
78
|
+
_globals['_TABLE']._serialized_start=2082
|
79
|
+
_globals['_TABLE']._serialized_end=2145
|
80
|
+
_globals['_COLUMN']._serialized_start=2148
|
81
|
+
_globals['_COLUMN']._serialized_end=2297
|
82
|
+
_globals['_WARNING']._serialized_start=2299
|
83
|
+
_globals['_WARNING']._serialized_end=2325
|
84
|
+
_globals['_TASK']._serialized_start=2327
|
85
|
+
_globals['_TASK']._serialized_end=2350
|
66
86
|
# @@protoc_insertion_point(module_scope)
|
@@ -30,13 +30,14 @@ class DataType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
30
30
|
XML: _ClassVar[DataType]
|
31
31
|
STRING: _ClassVar[DataType]
|
32
32
|
JSON: _ClassVar[DataType]
|
33
|
+
NAIVE_TIME: _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
|
@@ -55,10 +56,11 @@ BINARY: DataType
|
|
55
56
|
XML: DataType
|
56
57
|
STRING: DataType
|
57
58
|
JSON: DataType
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
NAIVE_TIME: DataType
|
60
|
+
UPSERT: RecordType
|
61
|
+
UPDATE: RecordType
|
62
|
+
DELETE: RecordType
|
63
|
+
TRUNCATE: RecordType
|
62
64
|
|
63
65
|
class ConfigurationFormRequest(_message.Message):
|
64
66
|
__slots__ = ()
|
@@ -77,7 +79,7 @@ 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__ = ("name", "label", "required", "description", "text_field", "dropdown_field", "toggle_field", "conditional_fields", "default_value", "placeholder")
|
81
83
|
NAME_FIELD_NUMBER: _ClassVar[int]
|
82
84
|
LABEL_FIELD_NUMBER: _ClassVar[int]
|
83
85
|
REQUIRED_FIELD_NUMBER: _ClassVar[int]
|
@@ -85,6 +87,9 @@ class FormField(_message.Message):
|
|
85
87
|
TEXT_FIELD_FIELD_NUMBER: _ClassVar[int]
|
86
88
|
DROPDOWN_FIELD_FIELD_NUMBER: _ClassVar[int]
|
87
89
|
TOGGLE_FIELD_FIELD_NUMBER: _ClassVar[int]
|
90
|
+
CONDITIONAL_FIELDS_FIELD_NUMBER: _ClassVar[int]
|
91
|
+
DEFAULT_VALUE_FIELD_NUMBER: _ClassVar[int]
|
92
|
+
PLACEHOLDER_FIELD_NUMBER: _ClassVar[int]
|
88
93
|
name: str
|
89
94
|
label: str
|
90
95
|
required: bool
|
@@ -92,7 +97,30 @@ class FormField(_message.Message):
|
|
92
97
|
text_field: TextField
|
93
98
|
dropdown_field: DropdownField
|
94
99
|
toggle_field: ToggleField
|
95
|
-
|
100
|
+
conditional_fields: ConditionalFields
|
101
|
+
default_value: str
|
102
|
+
placeholder: str
|
103
|
+
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]] = ..., conditional_fields: _Optional[_Union[ConditionalFields, _Mapping]] = ..., default_value: _Optional[str] = ..., placeholder: _Optional[str] = ...) -> None: ...
|
104
|
+
|
105
|
+
class ConditionalFields(_message.Message):
|
106
|
+
__slots__ = ("condition", "fields")
|
107
|
+
CONDITION_FIELD_NUMBER: _ClassVar[int]
|
108
|
+
FIELDS_FIELD_NUMBER: _ClassVar[int]
|
109
|
+
condition: VisibilityCondition
|
110
|
+
fields: _containers.RepeatedCompositeFieldContainer[FormField]
|
111
|
+
def __init__(self, condition: _Optional[_Union[VisibilityCondition, _Mapping]] = ..., fields: _Optional[_Iterable[_Union[FormField, _Mapping]]] = ...) -> None: ...
|
112
|
+
|
113
|
+
class VisibilityCondition(_message.Message):
|
114
|
+
__slots__ = ("condition_field", "bool_value", "string_value", "empty_value")
|
115
|
+
CONDITION_FIELD_FIELD_NUMBER: _ClassVar[int]
|
116
|
+
BOOL_VALUE_FIELD_NUMBER: _ClassVar[int]
|
117
|
+
STRING_VALUE_FIELD_NUMBER: _ClassVar[int]
|
118
|
+
EMPTY_VALUE_FIELD_NUMBER: _ClassVar[int]
|
119
|
+
condition_field: str
|
120
|
+
bool_value: bool
|
121
|
+
string_value: str
|
122
|
+
empty_value: bool
|
123
|
+
def __init__(self, condition_field: _Optional[str] = ..., bool_value: bool = ..., string_value: _Optional[str] = ..., empty_value: bool = ...) -> None: ...
|
96
124
|
|
97
125
|
class DropdownField(_message.Message):
|
98
126
|
__slots__ = ("dropdown_field",)
|
@@ -155,6 +183,14 @@ class Schema(_message.Message):
|
|
155
183
|
tables: _containers.RepeatedCompositeFieldContainer[Table]
|
156
184
|
def __init__(self, name: _Optional[str] = ..., tables: _Optional[_Iterable[_Union[Table, _Mapping]]] = ...) -> None: ...
|
157
185
|
|
186
|
+
class DataTypeParams(_message.Message):
|
187
|
+
__slots__ = ("decimal", "string_byte_length")
|
188
|
+
DECIMAL_FIELD_NUMBER: _ClassVar[int]
|
189
|
+
STRING_BYTE_LENGTH_FIELD_NUMBER: _ClassVar[int]
|
190
|
+
decimal: DecimalParams
|
191
|
+
string_byte_length: int
|
192
|
+
def __init__(self, decimal: _Optional[_Union[DecimalParams, _Mapping]] = ..., string_byte_length: _Optional[int] = ...) -> None: ...
|
193
|
+
|
158
194
|
class DecimalParams(_message.Message):
|
159
195
|
__slots__ = ("precision", "scale")
|
160
196
|
PRECISION_FIELD_NUMBER: _ClassVar[int]
|
@@ -164,7 +200,7 @@ class DecimalParams(_message.Message):
|
|
164
200
|
def __init__(self, precision: _Optional[int] = ..., scale: _Optional[int] = ...) -> None: ...
|
165
201
|
|
166
202
|
class ValueType(_message.Message):
|
167
|
-
__slots__ = ("null", "bool", "short", "int", "long", "float", "double", "naive_date", "naive_datetime", "utc_datetime", "decimal", "binary", "string", "json", "xml")
|
203
|
+
__slots__ = ("null", "bool", "short", "int", "long", "float", "double", "naive_date", "naive_datetime", "utc_datetime", "decimal", "binary", "string", "json", "xml", "naive_time")
|
168
204
|
NULL_FIELD_NUMBER: _ClassVar[int]
|
169
205
|
BOOL_FIELD_NUMBER: _ClassVar[int]
|
170
206
|
SHORT_FIELD_NUMBER: _ClassVar[int]
|
@@ -180,6 +216,7 @@ class ValueType(_message.Message):
|
|
180
216
|
STRING_FIELD_NUMBER: _ClassVar[int]
|
181
217
|
JSON_FIELD_NUMBER: _ClassVar[int]
|
182
218
|
XML_FIELD_NUMBER: _ClassVar[int]
|
219
|
+
NAIVE_TIME_FIELD_NUMBER: _ClassVar[int]
|
183
220
|
null: bool
|
184
221
|
bool: bool
|
185
222
|
short: int
|
@@ -195,7 +232,8 @@ class ValueType(_message.Message):
|
|
195
232
|
string: str
|
196
233
|
json: str
|
197
234
|
xml: str
|
198
|
-
|
235
|
+
naive_time: _timestamp_pb2.Timestamp
|
236
|
+
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] = ..., naive_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
|
199
237
|
|
200
238
|
class Table(_message.Message):
|
201
239
|
__slots__ = ("name", "columns")
|
@@ -206,13 +244,25 @@ class Table(_message.Message):
|
|
206
244
|
def __init__(self, name: _Optional[str] = ..., columns: _Optional[_Iterable[_Union[Column, _Mapping]]] = ...) -> None: ...
|
207
245
|
|
208
246
|
class Column(_message.Message):
|
209
|
-
__slots__ = ("name", "type", "primary_key", "
|
247
|
+
__slots__ = ("name", "type", "primary_key", "params")
|
210
248
|
NAME_FIELD_NUMBER: _ClassVar[int]
|
211
249
|
TYPE_FIELD_NUMBER: _ClassVar[int]
|
212
250
|
PRIMARY_KEY_FIELD_NUMBER: _ClassVar[int]
|
213
|
-
|
251
|
+
PARAMS_FIELD_NUMBER: _ClassVar[int]
|
214
252
|
name: str
|
215
253
|
type: DataType
|
216
254
|
primary_key: bool
|
217
|
-
|
218
|
-
def __init__(self, name: _Optional[str] = ..., type: _Optional[_Union[DataType, str]] = ..., primary_key: bool = ...,
|
255
|
+
params: DataTypeParams
|
256
|
+
def __init__(self, name: _Optional[str] = ..., type: _Optional[_Union[DataType, str]] = ..., primary_key: bool = ..., params: _Optional[_Union[DataTypeParams, _Mapping]] = ...) -> None: ...
|
257
|
+
|
258
|
+
class Warning(_message.Message):
|
259
|
+
__slots__ = ("message",)
|
260
|
+
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
261
|
+
message: str
|
262
|
+
def __init__(self, message: _Optional[str] = ...) -> None: ...
|
263
|
+
|
264
|
+
class Task(_message.Message):
|
265
|
+
__slots__ = ("message",)
|
266
|
+
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
267
|
+
message: str
|
268
|
+
def __init__(self, message: _Optional[str] = ...) -> None: ...
|
@@ -1,4 +1,24 @@
|
|
1
1
|
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
2
2
|
"""Client and server classes corresponding to protobuf-defined services."""
|
3
3
|
import grpc
|
4
|
+
import warnings
|
4
5
|
|
6
|
+
|
7
|
+
GRPC_GENERATED_VERSION = '1.71.0'
|
8
|
+
GRPC_VERSION = grpc.__version__
|
9
|
+
_version_not_supported = False
|
10
|
+
|
11
|
+
try:
|
12
|
+
from grpc._utilities import first_version_is_lower
|
13
|
+
_version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
|
14
|
+
except ImportError:
|
15
|
+
_version_not_supported = True
|
16
|
+
|
17
|
+
if _version_not_supported:
|
18
|
+
raise RuntimeError(
|
19
|
+
f'The grpc package installed is at version {GRPC_VERSION},'
|
20
|
+
+ f' but the generated code in common_pb2_grpc.py depends on'
|
21
|
+
+ f' grpcio>={GRPC_GENERATED_VERSION}.'
|
22
|
+
+ f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
|
23
|
+
+ f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
|
24
|
+
)
|
@@ -1,12 +1,22 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
3
4
|
# source: connector_sdk.proto
|
4
|
-
# Protobuf Python Version:
|
5
|
+
# Protobuf Python Version: 5.29.0
|
5
6
|
"""Generated protocol buffer code."""
|
6
7
|
from google.protobuf import descriptor as _descriptor
|
7
8
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
8
10
|
from google.protobuf import symbol_database as _symbol_database
|
9
11
|
from google.protobuf.internal import builder as _builder
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
14
|
+
5,
|
15
|
+
29,
|
16
|
+
0,
|
17
|
+
'',
|
18
|
+
'connector_sdk.proto'
|
19
|
+
)
|
10
20
|
# @@protoc_insertion_point(imports)
|
11
21
|
|
12
22
|
_sym_db = _symbol_database.Default()
|
@@ -16,60 +26,54 @@ _sym_db = _symbol_database.Default()
|
|
16
26
|
from fivetran_connector_sdk import common_pb2 as common__pb2
|
17
27
|
|
18
28
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x63onnector_sdk.proto\x12\
|
29
|
+
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\"\x87\x02\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\x12+\n\x07warning\x18\x04 \x01(\x0b\x32\x18.fivetran_sdk.v2.WarningH\x00\x12%\n\x04task\x18\x05 \x01(\x0b\x32\x15.fivetran_sdk.v2.TaskH\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\"H\x01P\x01Z\x1c\x66ivetran.com/fivetran_sdk_v2b\x06proto3')
|
20
30
|
|
21
31
|
_globals = globals()
|
22
32
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
23
33
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'connector_sdk_pb2', _globals)
|
24
|
-
if _descriptor._USE_C_DESCRIPTORS
|
25
|
-
_globals['DESCRIPTOR'].
|
26
|
-
_globals['DESCRIPTOR']._serialized_options = b'H\001P\001Z\
|
27
|
-
_globals['_SCHEMAREQUEST_CONFIGURATIONENTRY'].
|
34
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
35
|
+
_globals['DESCRIPTOR']._loaded_options = None
|
36
|
+
_globals['DESCRIPTOR']._serialized_options = b'H\001P\001Z\034fivetran.com/fivetran_sdk_v2'
|
37
|
+
_globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._loaded_options = None
|
28
38
|
_globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
|
29
|
-
_globals['_UPDATEREQUEST_CONFIGURATIONENTRY'].
|
39
|
+
_globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._loaded_options = None
|
30
40
|
_globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
|
31
|
-
_globals['_TABLESELECTION_COLUMNSENTRY'].
|
41
|
+
_globals['_TABLESELECTION_COLUMNSENTRY']._loaded_options = None
|
32
42
|
_globals['_TABLESELECTION_COLUMNSENTRY']._serialized_options = b'8\001'
|
33
|
-
_globals['_RECORD_DATAENTRY'].
|
43
|
+
_globals['_RECORD_DATAENTRY']._loaded_options = None
|
34
44
|
_globals['_RECORD_DATAENTRY']._serialized_options = b'8\001'
|
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['
|
65
|
-
_globals['
|
66
|
-
_globals['
|
67
|
-
_globals['
|
68
|
-
_globals['
|
69
|
-
_globals['_RECORD_DATAENTRY']._serialized_start=1955
|
70
|
-
_globals['_RECORD_DATAENTRY']._serialized_end=2023
|
71
|
-
_globals['_CHECKPOINT']._serialized_start=2041
|
72
|
-
_globals['_CHECKPOINT']._serialized_end=2073
|
73
|
-
_globals['_CONNECTOR']._serialized_start=2123
|
74
|
-
_globals['_CONNECTOR']._serialized_end=2447
|
45
|
+
_globals['_SCHEMAREQUEST']._serialized_start=55
|
46
|
+
_globals['_SCHEMAREQUEST']._serialized_end=198
|
47
|
+
_globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_start=146
|
48
|
+
_globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_end=198
|
49
|
+
_globals['_SCHEMARESPONSE']._serialized_start=201
|
50
|
+
_globals['_SCHEMARESPONSE']._serialized_end=442
|
51
|
+
_globals['_UPDATEREQUEST']._serialized_start=445
|
52
|
+
_globals['_UPDATEREQUEST']._serialized_end=694
|
53
|
+
_globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_start=146
|
54
|
+
_globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_end=198
|
55
|
+
_globals['_SELECTION']._serialized_start=697
|
56
|
+
_globals['_SELECTION']._serialized_end=842
|
57
|
+
_globals['_TABLESWITHNOSCHEMA']._serialized_start=844
|
58
|
+
_globals['_TABLESWITHNOSCHEMA']._serialized_end=941
|
59
|
+
_globals['_TABLESWITHSCHEMA']._serialized_start=943
|
60
|
+
_globals['_TABLESWITHSCHEMA']._serialized_end=1041
|
61
|
+
_globals['_SCHEMASELECTION']._serialized_start=1044
|
62
|
+
_globals['_SCHEMASELECTION']._serialized_end=1177
|
63
|
+
_globals['_TABLESELECTION']._serialized_start=1180
|
64
|
+
_globals['_TABLESELECTION']._serialized_end=1374
|
65
|
+
_globals['_TABLESELECTION_COLUMNSENTRY']._serialized_start=1328
|
66
|
+
_globals['_TABLESELECTION_COLUMNSENTRY']._serialized_end=1374
|
67
|
+
_globals['_UPDATERESPONSE']._serialized_start=1377
|
68
|
+
_globals['_UPDATERESPONSE']._serialized_end=1640
|
69
|
+
_globals['_SCHEMACHANGE']._serialized_start=1643
|
70
|
+
_globals['_SCHEMACHANGE']._serialized_end=1773
|
71
|
+
_globals['_RECORD']._serialized_start=1776
|
72
|
+
_globals['_RECORD']._serialized_end=2011
|
73
|
+
_globals['_RECORD_DATAENTRY']._serialized_start=1924
|
74
|
+
_globals['_RECORD_DATAENTRY']._serialized_end=1995
|
75
|
+
_globals['_CHECKPOINT']._serialized_start=2013
|
76
|
+
_globals['_CHECKPOINT']._serialized_end=2045
|
77
|
+
_globals['_SOURCECONNECTOR']._serialized_start=2048
|
78
|
+
_globals['_SOURCECONNECTOR']._serialized_end=2402
|
75
79
|
# @@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,30 +104,18 @@ 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__ = ("
|
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
|
-
__slots__ = ("record", "schema_change", "checkpoint")
|
107
|
+
__slots__ = ("record", "schema_change", "checkpoint", "warning", "task")
|
134
108
|
RECORD_FIELD_NUMBER: _ClassVar[int]
|
135
109
|
SCHEMA_CHANGE_FIELD_NUMBER: _ClassVar[int]
|
136
110
|
CHECKPOINT_FIELD_NUMBER: _ClassVar[int]
|
111
|
+
WARNING_FIELD_NUMBER: _ClassVar[int]
|
112
|
+
TASK_FIELD_NUMBER: _ClassVar[int]
|
137
113
|
record: Record
|
138
114
|
schema_change: SchemaChange
|
139
115
|
checkpoint: Checkpoint
|
140
|
-
|
116
|
+
warning: _common_pb2.Warning
|
117
|
+
task: _common_pb2.Task
|
118
|
+
def __init__(self, record: _Optional[_Union[Record, _Mapping]] = ..., schema_change: _Optional[_Union[SchemaChange, _Mapping]] = ..., checkpoint: _Optional[_Union[Checkpoint, _Mapping]] = ..., warning: _Optional[_Union[_common_pb2.Warning, _Mapping]] = ..., task: _Optional[_Union[_common_pb2.Task, _Mapping]] = ...) -> None: ...
|
141
119
|
|
142
120
|
class SchemaChange(_message.Message):
|
143
121
|
__slots__ = ("with_schema", "without_schema")
|
@@ -162,9 +140,9 @@ class Record(_message.Message):
|
|
162
140
|
DATA_FIELD_NUMBER: _ClassVar[int]
|
163
141
|
schema_name: str
|
164
142
|
table_name: str
|
165
|
-
type: _common_pb2.
|
143
|
+
type: _common_pb2.RecordType
|
166
144
|
data: _containers.MessageMap[str, _common_pb2.ValueType]
|
167
|
-
def __init__(self, schema_name: _Optional[str] = ..., table_name: _Optional[str] = ..., type: _Optional[_Union[_common_pb2.
|
145
|
+
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
146
|
|
169
147
|
class Checkpoint(_message.Message):
|
170
148
|
__slots__ = ("state_json",)
|
@@ -1,14 +1,34 @@
|
|
1
1
|
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
2
2
|
"""Client and server classes corresponding to protobuf-defined services."""
|
3
3
|
import grpc
|
4
|
-
|
4
|
+
import warnings
|
5
5
|
|
6
6
|
# This is generated code but we need to make this adjustment
|
7
7
|
from fivetran_connector_sdk import common_pb2 as common__pb2
|
8
8
|
from fivetran_connector_sdk import connector_sdk_pb2 as connector__sdk__pb2
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
GRPC_GENERATED_VERSION = '1.71.0'
|
11
|
+
GRPC_VERSION = grpc.__version__
|
12
|
+
_version_not_supported = False
|
13
|
+
|
14
|
+
try:
|
15
|
+
from grpc._utilities import first_version_is_lower
|
16
|
+
_version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
|
17
|
+
except ImportError:
|
18
|
+
_version_not_supported = True
|
19
|
+
|
20
|
+
if _version_not_supported:
|
21
|
+
raise RuntimeError(
|
22
|
+
f'The grpc package installed is at version {GRPC_VERSION},'
|
23
|
+
+ f' but the generated code in connector_sdk_pb2_grpc.py depends on'
|
24
|
+
+ f' grpcio>={GRPC_GENERATED_VERSION}.'
|
25
|
+
+ f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
|
26
|
+
+ f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
|
27
|
+
)
|
28
|
+
|
29
|
+
|
30
|
+
class SourceConnectorStub(object):
|
31
|
+
"""Fivetran (grpc client) <> SourceConnector (grpc server)
|
12
32
|
"""
|
13
33
|
|
14
34
|
def __init__(self, channel):
|
@@ -18,29 +38,29 @@ class ConnectorStub(object):
|
|
18
38
|
channel: A grpc.Channel.
|
19
39
|
"""
|
20
40
|
self.ConfigurationForm = channel.unary_unary(
|
21
|
-
'/fivetran_sdk.
|
41
|
+
'/fivetran_sdk.v2.SourceConnector/ConfigurationForm',
|
22
42
|
request_serializer=common__pb2.ConfigurationFormRequest.SerializeToString,
|
23
43
|
response_deserializer=common__pb2.ConfigurationFormResponse.FromString,
|
24
|
-
)
|
44
|
+
_registered_method=True)
|
25
45
|
self.Test = channel.unary_unary(
|
26
|
-
'/fivetran_sdk.
|
46
|
+
'/fivetran_sdk.v2.SourceConnector/Test',
|
27
47
|
request_serializer=common__pb2.TestRequest.SerializeToString,
|
28
48
|
response_deserializer=common__pb2.TestResponse.FromString,
|
29
|
-
)
|
49
|
+
_registered_method=True)
|
30
50
|
self.Schema = channel.unary_unary(
|
31
|
-
'/fivetran_sdk.
|
51
|
+
'/fivetran_sdk.v2.SourceConnector/Schema',
|
32
52
|
request_serializer=connector__sdk__pb2.SchemaRequest.SerializeToString,
|
33
53
|
response_deserializer=connector__sdk__pb2.SchemaResponse.FromString,
|
34
|
-
)
|
54
|
+
_registered_method=True)
|
35
55
|
self.Update = channel.unary_stream(
|
36
|
-
'/fivetran_sdk.
|
56
|
+
'/fivetran_sdk.v2.SourceConnector/Update',
|
37
57
|
request_serializer=connector__sdk__pb2.UpdateRequest.SerializeToString,
|
38
58
|
response_deserializer=connector__sdk__pb2.UpdateResponse.FromString,
|
39
|
-
)
|
59
|
+
_registered_method=True)
|
40
60
|
|
41
61
|
|
42
|
-
class
|
43
|
-
"""Fivetran (grpc client) <>
|
62
|
+
class SourceConnectorServicer(object):
|
63
|
+
"""Fivetran (grpc client) <> SourceConnector (grpc server)
|
44
64
|
"""
|
45
65
|
|
46
66
|
def ConfigurationForm(self, request, context):
|
@@ -68,7 +88,7 @@ class ConnectorServicer(object):
|
|
68
88
|
raise NotImplementedError('Method not implemented!')
|
69
89
|
|
70
90
|
|
71
|
-
def
|
91
|
+
def add_SourceConnectorServicer_to_server(servicer, server):
|
72
92
|
rpc_method_handlers = {
|
73
93
|
'ConfigurationForm': grpc.unary_unary_rpc_method_handler(
|
74
94
|
servicer.ConfigurationForm,
|
@@ -92,13 +112,14 @@ def add_ConnectorServicer_to_server(servicer, server):
|
|
92
112
|
),
|
93
113
|
}
|
94
114
|
generic_handler = grpc.method_handlers_generic_handler(
|
95
|
-
'fivetran_sdk.
|
115
|
+
'fivetran_sdk.v2.SourceConnector', rpc_method_handlers)
|
96
116
|
server.add_generic_rpc_handlers((generic_handler,))
|
117
|
+
server.add_registered_method_handlers('fivetran_sdk.v2.SourceConnector', rpc_method_handlers)
|
97
118
|
|
98
119
|
|
99
120
|
# This class is part of an EXPERIMENTAL API.
|
100
|
-
class
|
101
|
-
"""Fivetran (grpc client) <>
|
121
|
+
class SourceConnector(object):
|
122
|
+
"""Fivetran (grpc client) <> SourceConnector (grpc server)
|
102
123
|
"""
|
103
124
|
|
104
125
|
@staticmethod
|
@@ -112,11 +133,21 @@ class Connector(object):
|
|
112
133
|
wait_for_ready=None,
|
113
134
|
timeout=None,
|
114
135
|
metadata=None):
|
115
|
-
return grpc.experimental.unary_unary(
|
136
|
+
return grpc.experimental.unary_unary(
|
137
|
+
request,
|
138
|
+
target,
|
139
|
+
'/fivetran_sdk.v2.SourceConnector/ConfigurationForm',
|
116
140
|
common__pb2.ConfigurationFormRequest.SerializeToString,
|
117
141
|
common__pb2.ConfigurationFormResponse.FromString,
|
118
|
-
options,
|
119
|
-
|
142
|
+
options,
|
143
|
+
channel_credentials,
|
144
|
+
insecure,
|
145
|
+
call_credentials,
|
146
|
+
compression,
|
147
|
+
wait_for_ready,
|
148
|
+
timeout,
|
149
|
+
metadata,
|
150
|
+
_registered_method=True)
|
120
151
|
|
121
152
|
@staticmethod
|
122
153
|
def Test(request,
|
@@ -129,11 +160,21 @@ class Connector(object):
|
|
129
160
|
wait_for_ready=None,
|
130
161
|
timeout=None,
|
131
162
|
metadata=None):
|
132
|
-
return grpc.experimental.unary_unary(
|
163
|
+
return grpc.experimental.unary_unary(
|
164
|
+
request,
|
165
|
+
target,
|
166
|
+
'/fivetran_sdk.v2.SourceConnector/Test',
|
133
167
|
common__pb2.TestRequest.SerializeToString,
|
134
168
|
common__pb2.TestResponse.FromString,
|
135
|
-
options,
|
136
|
-
|
169
|
+
options,
|
170
|
+
channel_credentials,
|
171
|
+
insecure,
|
172
|
+
call_credentials,
|
173
|
+
compression,
|
174
|
+
wait_for_ready,
|
175
|
+
timeout,
|
176
|
+
metadata,
|
177
|
+
_registered_method=True)
|
137
178
|
|
138
179
|
@staticmethod
|
139
180
|
def Schema(request,
|
@@ -146,11 +187,21 @@ class Connector(object):
|
|
146
187
|
wait_for_ready=None,
|
147
188
|
timeout=None,
|
148
189
|
metadata=None):
|
149
|
-
return grpc.experimental.unary_unary(
|
190
|
+
return grpc.experimental.unary_unary(
|
191
|
+
request,
|
192
|
+
target,
|
193
|
+
'/fivetran_sdk.v2.SourceConnector/Schema',
|
150
194
|
connector__sdk__pb2.SchemaRequest.SerializeToString,
|
151
195
|
connector__sdk__pb2.SchemaResponse.FromString,
|
152
|
-
options,
|
153
|
-
|
196
|
+
options,
|
197
|
+
channel_credentials,
|
198
|
+
insecure,
|
199
|
+
call_credentials,
|
200
|
+
compression,
|
201
|
+
wait_for_ready,
|
202
|
+
timeout,
|
203
|
+
metadata,
|
204
|
+
_registered_method=True)
|
154
205
|
|
155
206
|
@staticmethod
|
156
207
|
def Update(request,
|
@@ -163,8 +214,18 @@ class Connector(object):
|
|
163
214
|
wait_for_ready=None,
|
164
215
|
timeout=None,
|
165
216
|
metadata=None):
|
166
|
-
return grpc.experimental.unary_stream(
|
217
|
+
return grpc.experimental.unary_stream(
|
218
|
+
request,
|
219
|
+
target,
|
220
|
+
'/fivetran_sdk.v2.SourceConnector/Update',
|
167
221
|
connector__sdk__pb2.UpdateRequest.SerializeToString,
|
168
222
|
connector__sdk__pb2.UpdateResponse.FromString,
|
169
|
-
options,
|
170
|
-
|
223
|
+
options,
|
224
|
+
channel_credentials,
|
225
|
+
insecure,
|
226
|
+
call_credentials,
|
227
|
+
compression,
|
228
|
+
wait_for_ready,
|
229
|
+
timeout,
|
230
|
+
metadata,
|
231
|
+
_registered_method=True)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: fivetran_connector_sdk
|
3
|
-
Version: 1.7.
|
3
|
+
Version: 1.7.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/connectors/connector-sdk
|
@@ -15,6 +15,7 @@ Requires-Dist: grpcio==1.71.0
|
|
15
15
|
Requires-Dist: grpcio-tools==1.71.0
|
16
16
|
Requires-Dist: requests==2.32.4
|
17
17
|
Requires-Dist: pipreqs==0.5.0
|
18
|
+
Requires-Dist: prompt-toolkit==3.0.51
|
18
19
|
Requires-Dist: unidecode==1.4.0
|
19
20
|
|
20
21
|
# **fivetran-connector-sdk**
|
@@ -0,0 +1,18 @@
|
|
1
|
+
fivetran_connector_sdk/__init__.py,sha256=pRgS81aRN9XYj4csjZZkiYlFo7lT1NPim78LZPFF6uM,20896
|
2
|
+
fivetran_connector_sdk/connector_helper.py,sha256=S2OdQJKonYbx6XKx1-ZinbTUogi6tddN4AYEn3yJXAc,43471
|
3
|
+
fivetran_connector_sdk/constants.py,sha256=hVUDRdWGODkOuBCt5iiFJQKiZMN_Cd_jz4iB4ZXqB3k,2293
|
4
|
+
fivetran_connector_sdk/helpers.py,sha256=k_iBaRacPN3YkOkZ8bLuflNYXkUrtuj6fYH_rV1M-RI,15224
|
5
|
+
fivetran_connector_sdk/logger.py,sha256=arI6eNUfm_AvE3EV_PmbSRzrpTVpZKJ8pZMtDn93TKU,3018
|
6
|
+
fivetran_connector_sdk/operations.py,sha256=aInUohWe_BaiJwBX21BZf8io3BS9nTDn6BW4ijVEQSk,11284
|
7
|
+
fivetran_connector_sdk/protos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
+
fivetran_connector_sdk/protos/common_pb2.py,sha256=zkzs6Rd-lvsev6Nsq37xc4HLJZ_uNXPkotCLY7Y7i5U,8770
|
9
|
+
fivetran_connector_sdk/protos/common_pb2.pyi,sha256=FdqlPKRqiXdUDT3e7adP5X42_Qzv_ItydUNJFKnJJIE,11478
|
10
|
+
fivetran_connector_sdk/protos/common_pb2_grpc.py,sha256=qni6h6BoA1nwJXr2bNtznfTkrMokzzeQd8XQMZIiZUc,887
|
11
|
+
fivetran_connector_sdk/protos/connector_sdk_pb2.py,sha256=qbce2wyScUg4cYRRjuYMgi5p0vb1zEA9Jf58polYhhs,7589
|
12
|
+
fivetran_connector_sdk/protos/connector_sdk_pb2.pyi,sha256=aE7DlQU3ZpuHK9aZrd1_cYs2_4Rl1lqSMw54BIXvYys,7721
|
13
|
+
fivetran_connector_sdk/protos/connector_sdk_pb2_grpc.py,sha256=bGlvc_vGwA9-FTqrj-BYlVcA-7jS8A9MSZ-XpZFytvY,8795
|
14
|
+
fivetran_connector_sdk-1.7.2.dist-info/METADATA,sha256=bAS1-pR_BxnBPz-eE52v_mT7XV97Kfvah01ewFmt-kk,3188
|
15
|
+
fivetran_connector_sdk-1.7.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
16
|
+
fivetran_connector_sdk-1.7.2.dist-info/entry_points.txt,sha256=uQn0KPnFlQmXJfxlk0tifdNsSXWfVlnAFzNqjXZM_xM,57
|
17
|
+
fivetran_connector_sdk-1.7.2.dist-info/top_level.txt,sha256=-_xk2MFY4psIh7jw1lJePMzFb5-vask8_ZtX-UzYWUI,23
|
18
|
+
fivetran_connector_sdk-1.7.2.dist-info/RECORD,,
|
@@ -1,18 +0,0 @@
|
|
1
|
-
fivetran_connector_sdk/__init__.py,sha256=bmTxQskIeTFFK-0ei94514eS5JWo4SxSaA4hZQLgUPU,20382
|
2
|
-
fivetran_connector_sdk/connector_helper.py,sha256=eezyCVOAVJ1f1m2BwAsNfgHRksFmp4y5Eo4CUZoxqrQ,43997
|
3
|
-
fivetran_connector_sdk/constants.py,sha256=tY8-fwB7O11orifFcDIELxfvYNz9-bNUhh6f5cXXws0,2287
|
4
|
-
fivetran_connector_sdk/helpers.py,sha256=ZA9vU-bgMlw9QcMd-bDEUixsQ80U4bsCRmQPca_o1CA,13115
|
5
|
-
fivetran_connector_sdk/logger.py,sha256=arI6eNUfm_AvE3EV_PmbSRzrpTVpZKJ8pZMtDn93TKU,3018
|
6
|
-
fivetran_connector_sdk/operations.py,sha256=_O1btg_-dncQuZkBg9TrEMIyS6OVs75bSWzqAb6-Ovk,11515
|
7
|
-
fivetran_connector_sdk/protos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
-
fivetran_connector_sdk/protos/common_pb2.py,sha256=kUwVcyZHgLigNR-KnHZn7dHrlxaMnUXqzprsRx6T72M,6831
|
9
|
-
fivetran_connector_sdk/protos/common_pb2.pyi,sha256=S0hdIzoXyyOKD5cjiGeDDLYpQ9J3LjAvu4rCj1JvJWE,9038
|
10
|
-
fivetran_connector_sdk/protos/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
11
|
-
fivetran_connector_sdk/protos/connector_sdk_pb2.py,sha256=9Ke_Ti1s0vAeXapfXT-EryrT2-TSGQb8mhs4gxTpUMk,7732
|
12
|
-
fivetran_connector_sdk/protos/connector_sdk_pb2.pyi,sha256=FWYxRgshEF3QDYAE0TM_mv4N2gGvkxCH_uPpxnMc4oA,8406
|
13
|
-
fivetran_connector_sdk/protos/connector_sdk_pb2_grpc.py,sha256=ZfJLp4DW7uP4pFOZ74s_wQ6tD3eIPi-08UfnLwe4tzo,7163
|
14
|
-
fivetran_connector_sdk-1.7.0.dist-info/METADATA,sha256=vqeFr54ujVw_IElK32RB1nKD-Q2maTtiLJIhHfWWodE,3150
|
15
|
-
fivetran_connector_sdk-1.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
16
|
-
fivetran_connector_sdk-1.7.0.dist-info/entry_points.txt,sha256=uQn0KPnFlQmXJfxlk0tifdNsSXWfVlnAFzNqjXZM_xM,57
|
17
|
-
fivetran_connector_sdk-1.7.0.dist-info/top_level.txt,sha256=-_xk2MFY4psIh7jw1lJePMzFb5-vask8_ZtX-UzYWUI,23
|
18
|
-
fivetran_connector_sdk-1.7.0.dist-info/RECORD,,
|
File without changes
|
{fivetran_connector_sdk-1.7.0.dist-info → fivetran_connector_sdk-1.7.2.dist-info}/entry_points.txt
RENAMED
File without changes
|
{fivetran_connector_sdk-1.7.0.dist-info → fivetran_connector_sdk-1.7.2.dist-info}/top_level.txt
RENAMED
File without changes
|