fivetran-connector-sdk 1.7.0__tar.gz → 1.7.1__tar.gz

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.
Files changed (26) hide show
  1. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/PKG-INFO +2 -1
  2. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/pyproject.toml +1 -0
  3. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/__init__.py +14 -3
  4. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/connector_helper.py +8 -5
  5. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/constants.py +2 -2
  6. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/helpers.py +48 -7
  7. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/operations.py +7 -14
  8. fivetran_connector_sdk-1.7.1/src/fivetran_connector_sdk/protos/common_pb2.py +86 -0
  9. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/protos/common_pb2.pyi +67 -17
  10. fivetran_connector_sdk-1.7.1/src/fivetran_connector_sdk/protos/common_pb2_grpc.py +24 -0
  11. fivetran_connector_sdk-1.7.1/src/fivetran_connector_sdk/protos/connector_sdk_pb2.py +79 -0
  12. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/protos/connector_sdk_pb2.pyi +8 -30
  13. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/protos/connector_sdk_pb2_grpc.py +90 -29
  14. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk.egg-info/PKG-INFO +2 -1
  15. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk.egg-info/requires.txt +1 -0
  16. fivetran_connector_sdk-1.7.0/src/fivetran_connector_sdk/protos/common_pb2.py +0 -66
  17. fivetran_connector_sdk-1.7.0/src/fivetran_connector_sdk/protos/common_pb2_grpc.py +0 -4
  18. fivetran_connector_sdk-1.7.0/src/fivetran_connector_sdk/protos/connector_sdk_pb2.py +0 -75
  19. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/README.md +0 -0
  20. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/setup.cfg +0 -0
  21. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/logger.py +0 -0
  22. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk/protos/__init__.py +0 -0
  23. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk.egg-info/SOURCES.txt +0 -0
  24. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk.egg-info/dependency_links.txt +0 -0
  25. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk.egg-info/entry_points.txt +0 -0
  26. {fivetran_connector_sdk-1.7.0 → fivetran_connector_sdk-1.7.1}/src/fivetran_connector_sdk.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fivetran_connector_sdk
3
- Version: 1.7.0
3
+ Version: 1.7.1
4
4
  Summary: Build custom connectors on Fivetran platform
5
5
  Author-email: Fivetran <developers@fivetran.com>
6
6
  Project-URL: Homepage, https://fivetran.com/docs/connectors/connector-sdk
@@ -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**
@@ -17,6 +17,7 @@ dependencies = [
17
17
  "grpcio-tools==1.71.0",
18
18
  "requests==2.32.4",
19
19
  "pipreqs==0.5.0",
20
+ "prompt-toolkit==3.0.51",
20
21
  "unidecode==1.4.0"
21
22
  ]
22
23
 
@@ -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.0"
42
+ __version__ = "1.7.1"
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.ConnectorServicer):
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.add_ConnectorServicer_to_server(self, server)
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:
@@ -389,7 +389,7 @@ def validate_requirements_file(project_path: str, is_deploy: bool, version: str
389
389
  print(version_mismatch_deps)
390
390
  if is_deploy and not force:
391
391
  confirm = input(
392
- f"Would you like us to update {REQUIREMENTS_TXT} to the current stable versions of the dependent libraries? (Y/N):")
392
+ f"Would you like us to update {REQUIREMENTS_TXT} to the current stable versions of the dependent libraries? (y/N):")
393
393
  if confirm.lower() == "y":
394
394
  update_version_requirements = True
395
395
  for requirement in version_mismatch_deps:
@@ -404,7 +404,7 @@ def validate_requirements_file(project_path: str, is_deploy: bool, version: str
404
404
  handle_missing_deps(missing_deps)
405
405
  if is_deploy and not force:
406
406
  confirm = input(
407
- f"Would you like us to update {REQUIREMENTS_TXT} to add missing dependent libraries? (Y/N):")
407
+ f"Would you like us to update {REQUIREMENTS_TXT} to add missing dependent libraries? (y/N):")
408
408
  if confirm.lower() == "n":
409
409
  print_library_log(f"Changes identified as missing dependencies for libraries have been ignored. These changes have NOT been made to {REQUIREMENTS_TXT}.")
410
410
  elif confirm.lower() == "y":
@@ -417,7 +417,7 @@ def validate_requirements_file(project_path: str, is_deploy: bool, version: str
417
417
  if unused_deps:
418
418
  handle_unused_deps(unused_deps, version)
419
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):")
420
+ confirm = input(f"Would you like us to update {REQUIREMENTS_TXT} to remove the unused libraries? (y/N):")
421
421
  if confirm.lower() == "n":
422
422
  if 'fivetran_connector_sdk' in unused_deps or 'requests' in unused_deps:
423
423
  print_library_log(
@@ -963,8 +963,8 @@ def process_columns(columns, entry):
963
963
  )
964
964
  raise ValueError(error_message)
965
965
  column.type = common_pb2.DataType.DECIMAL
966
- column.decimal.precision = type['precision']
967
- column.decimal.scale = type['scale']
966
+ column.params.decimal.precision = type['precision']
967
+ column.params.decimal.scale = type['scale']
968
968
 
969
969
  else:
970
970
  raise ValueError(
@@ -974,6 +974,7 @@ def process_columns(columns, entry):
974
974
  if "primary_key" in entry and name in entry["primary_key"]:
975
975
  column.primary_key = True
976
976
 
977
+
977
978
  columns[column_name] = column
978
979
 
979
980
  def process_data_type(column, type):
@@ -999,6 +1000,8 @@ def process_data_type(column, type):
999
1000
  column.type = common_pb2.DataType.FLOAT
1000
1001
  elif type.upper() == "DOUBLE":
1001
1002
  column.type = common_pb2.DataType.DOUBLE
1003
+ elif type.upper() == "NAIVE_TIME":
1004
+ column.type = common_pb2.DataType.NAIVE_TIME
1002
1005
  elif type.upper() == "NAIVE_DATE":
1003
1006
  column.type = common_pb2.DataType.NAIVE_DATE
1004
1007
  elif type.upper() == "NAIVE_DATETIME":
@@ -1,6 +1,6 @@
1
1
  import re
2
2
 
3
- TESTER_VER = "0.25.0521.001"
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 = "run_sdk_tester.jar"
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 get_input_from_cli(prompt: str, default_value: str, hide_value = False) -> str:
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 = input(f"{prompt} [Default : {default_value_hidden}]: ").strip() or default_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 = input(f"{prompt} [Default : {default_value}]: ").strip() or default_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 = input(f"{prompt}: ").strip()
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/N): ")
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.OpType.UPSERT,
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.OpType.UPDATE,
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.OpType.DELETE,
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.
@@ -0,0 +1,86 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: common.proto
5
+ # Protobuf Python Version: 5.29.0
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
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
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
26
+
27
+
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')
29
+
30
+ _globals = globals()
31
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
32
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common_pb2', _globals)
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
37
+ _globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
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
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 OpType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
35
+ class RecordType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
35
36
  __slots__ = ()
36
- UPSERT: _ClassVar[OpType]
37
- UPDATE: _ClassVar[OpType]
38
- DELETE: _ClassVar[OpType]
39
- TRUNCATE: _ClassVar[OpType]
37
+ UPSERT: _ClassVar[RecordType]
38
+ UPDATE: _ClassVar[RecordType]
39
+ DELETE: _ClassVar[RecordType]
40
+ TRUNCATE: _ClassVar[RecordType]
40
41
  PlainText: TextField
41
42
  Password: TextField
42
43
  Hidden: TextField
@@ -55,10 +56,11 @@ BINARY: DataType
55
56
  XML: DataType
56
57
  STRING: DataType
57
58
  JSON: DataType
58
- UPSERT: OpType
59
- UPDATE: OpType
60
- DELETE: OpType
61
- TRUNCATE: OpType
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
- 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: ...
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
- 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: ...
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", "decimal")
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
- DECIMAL_FIELD_NUMBER: _ClassVar[int]
251
+ PARAMS_FIELD_NUMBER: _ClassVar[int]
214
252
  name: str
215
253
  type: DataType
216
254
  primary_key: bool
217
- decimal: DecimalParams
218
- def __init__(self, name: _Optional[str] = ..., type: _Optional[_Union[DataType, str]] = ..., primary_key: bool = ..., decimal: _Optional[_Union[DecimalParams, _Mapping]] = ...) -> None: ...
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: ...
@@ -0,0 +1,24 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+ import warnings
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
+ )
@@ -0,0 +1,79 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: connector_sdk.proto
5
+ # Protobuf Python Version: 5.29.0
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
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
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ # This is generated code but we need to make this adjustment
26
+ from fivetran_connector_sdk import common_pb2 as common__pb2
27
+
28
+
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')
30
+
31
+ _globals = globals()
32
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
33
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'connector_sdk_pb2', _globals)
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
38
+ _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
39
+ _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._loaded_options = None
40
+ _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
41
+ _globals['_TABLESELECTION_COLUMNSENTRY']._loaded_options = None
42
+ _globals['_TABLESELECTION_COLUMNSENTRY']._serialized_options = b'8\001'
43
+ _globals['_RECORD_DATAENTRY']._loaded_options = None
44
+ _globals['_RECORD_DATAENTRY']._serialized_options = b'8\001'
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
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__ = ("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
- __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
- def __init__(self, record: _Optional[_Union[Record, _Mapping]] = ..., schema_change: _Optional[_Union[SchemaChange, _Mapping]] = ..., checkpoint: _Optional[_Union[Checkpoint, _Mapping]] = ...) -> None: ...
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.OpType
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.OpType, str]] = ..., data: _Optional[_Mapping[str, _common_pb2.ValueType]] = ...) -> None: ...
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
- class ConnectorStub(object):
11
- """Fivetran (grpc client) <> Connector (grpc server)
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.Connector/ConfigurationForm',
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.Connector/Test',
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.Connector/Schema',
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.Connector/Update',
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 ConnectorServicer(object):
43
- """Fivetran (grpc client) <> Connector (grpc server)
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 add_ConnectorServicer_to_server(servicer, server):
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.Connector', rpc_method_handlers)
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 Connector(object):
101
- """Fivetran (grpc client) <> Connector (grpc server)
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(request, target, '/fivetran_sdk.Connector/ConfigurationForm',
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, channel_credentials,
119
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
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(request, target, '/fivetran_sdk.Connector/Test',
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, channel_credentials,
136
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
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(request, target, '/fivetran_sdk.Connector/Schema',
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, channel_credentials,
153
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
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(request, target, '/fivetran_sdk.Connector/Update',
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, channel_credentials,
170
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
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.0
3
+ Version: 1.7.1
4
4
  Summary: Build custom connectors on Fivetran platform
5
5
  Author-email: Fivetran <developers@fivetran.com>
6
6
  Project-URL: Homepage, https://fivetran.com/docs/connectors/connector-sdk
@@ -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**
@@ -2,4 +2,5 @@ grpcio==1.71.0
2
2
  grpcio-tools==1.71.0
3
3
  requests==2.32.4
4
4
  pipreqs==0.5.0
5
+ prompt-toolkit==3.0.51
5
6
  unidecode==1.4.0
@@ -1,66 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # Generated by the protocol buffer compiler. DO NOT EDIT!
3
- # source: common.proto
4
- # Protobuf Python Version: 4.25.0
5
- """Generated protocol buffer code."""
6
- from google.protobuf import descriptor as _descriptor
7
- from google.protobuf import descriptor_pool as _descriptor_pool
8
- from google.protobuf import symbol_database as _symbol_database
9
- from google.protobuf.internal import builder as _builder
10
- # @@protoc_insertion_point(imports)
11
-
12
- _sym_db = _symbol_database.Default()
13
-
14
-
15
- from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
16
-
17
-
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommon.proto\x12\x0c\x66ivetran_sdk\x1a\x1fgoogle/protobuf/timestamp.proto\"\x1a\n\x18\x43onfigurationFormRequest\"\xbb\x01\n\x19\x43onfigurationFormResponse\x12\"\n\x1aschema_selection_supported\x18\x01 \x01(\x08\x12!\n\x19table_selection_supported\x18\x02 \x01(\x08\x12\'\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x17.fivetran_sdk.FormField\x12.\n\x05tests\x18\x04 \x03(\x0b\x32\x1f.fivetran_sdk.ConfigurationTest\"\x85\x02\n\tFormField\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08required\x18\x03 \x01(\x08\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01\x88\x01\x01\x12-\n\ntext_field\x18\x05 \x01(\x0e\x32\x17.fivetran_sdk.TextFieldH\x00\x12\x35\n\x0e\x64ropdown_field\x18\x06 \x01(\x0b\x32\x1b.fivetran_sdk.DropdownFieldH\x00\x12\x31\n\x0ctoggle_field\x18\x07 \x01(\x0b\x32\x19.fivetran_sdk.ToggleFieldH\x00\x42\x06\n\x04typeB\x0e\n\x0c_description\"\'\n\rDropdownField\x12\x16\n\x0e\x64ropdown_field\x18\x01 \x03(\t\"\r\n\x0bToggleField\"0\n\x11\x43onfigurationTest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\"\x96\x01\n\x0bTestRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x43\n\rconfiguration\x18\x02 \x03(\x0b\x32,.fivetran_sdk.TestRequest.ConfigurationEntry\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"@\n\x0cTestResponse\x12\x11\n\x07success\x18\x01 \x01(\x08H\x00\x12\x11\n\x07\x66\x61ilure\x18\x02 \x01(\tH\x00\x42\n\n\x08response\"3\n\nSchemaList\x12%\n\x07schemas\x18\x01 \x03(\x0b\x32\x14.fivetran_sdk.Schema\"0\n\tTableList\x12#\n\x06tables\x18\x01 \x03(\x0b\x32\x13.fivetran_sdk.Table\";\n\x06Schema\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.fivetran_sdk.Table\"1\n\rDecimalParams\x12\x11\n\tprecision\x18\x01 \x01(\r\x12\r\n\x05scale\x18\x02 \x01(\r\"\xf9\x02\n\tValueType\x12\x0e\n\x04null\x18\x01 \x01(\x08H\x00\x12\x0e\n\x04\x62ool\x18\x02 \x01(\x08H\x00\x12\x0f\n\x05short\x18\x03 \x01(\x05H\x00\x12\r\n\x03int\x18\x04 \x01(\x05H\x00\x12\x0e\n\x04long\x18\x05 \x01(\x03H\x00\x12\x0f\n\x05\x66loat\x18\x06 \x01(\x02H\x00\x12\x10\n\x06\x64ouble\x18\x07 \x01(\x01H\x00\x12\x30\n\nnaive_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x34\n\x0enaive_datetime\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x32\n\x0cutc_datetime\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x11\n\x07\x64\x65\x63imal\x18\x0b \x01(\tH\x00\x12\x10\n\x06\x62inary\x18\x0c \x01(\x0cH\x00\x12\x10\n\x06string\x18\r \x01(\tH\x00\x12\x0e\n\x04json\x18\x0e \x01(\tH\x00\x12\r\n\x03xml\x18\x0f \x01(\tH\x00\x42\x07\n\x05inner\"<\n\x05Table\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\x07\x63olumns\x18\x02 \x03(\x0b\x32\x14.fivetran_sdk.Column\"\x90\x01\n\x06\x43olumn\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x04type\x18\x02 \x01(\x0e\x32\x16.fivetran_sdk.DataType\x12\x13\n\x0bprimary_key\x18\x03 \x01(\x08\x12\x31\n\x07\x64\x65\x63imal\x18\x04 \x01(\x0b\x32\x1b.fivetran_sdk.DecimalParamsH\x00\x88\x01\x01\x42\n\n\x08_decimal*4\n\tTextField\x12\r\n\tPlainText\x10\x00\x12\x0c\n\x08Password\x10\x01\x12\n\n\x06Hidden\x10\x02*\xcb\x01\n\x08\x44\x61taType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07\x42OOLEAN\x10\x01\x12\t\n\x05SHORT\x10\x02\x12\x07\n\x03INT\x10\x03\x12\x08\n\x04LONG\x10\x04\x12\x0b\n\x07\x44\x45\x43IMAL\x10\x05\x12\t\n\x05\x46LOAT\x10\x06\x12\n\n\x06\x44OUBLE\x10\x07\x12\x0e\n\nNAIVE_DATE\x10\x08\x12\x12\n\x0eNAIVE_DATETIME\x10\t\x12\x10\n\x0cUTC_DATETIME\x10\n\x12\n\n\x06\x42INARY\x10\x0b\x12\x07\n\x03XML\x10\x0c\x12\n\n\x06STRING\x10\r\x12\x08\n\x04JSON\x10\x0e*:\n\x06OpType\x12\n\n\x06UPSERT\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x12\x0c\n\x08TRUNCATE\x10\x03\x42\x1fH\x01P\x01Z\x19\x66ivetran.com/fivetran_sdkb\x06proto3')
19
-
20
- _globals = globals()
21
- _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
- _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common_pb2', _globals)
23
- if _descriptor._USE_C_DESCRIPTORS == False:
24
- _globals['DESCRIPTOR']._options = None
25
- _globals['DESCRIPTOR']._serialized_options = b'H\001P\001Z\031fivetran.com/fivetran_sdk'
26
- _globals['_TESTREQUEST_CONFIGURATIONENTRY']._options = None
27
- _globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
28
- _globals['_TEXTFIELD']._serialized_start=1674
29
- _globals['_TEXTFIELD']._serialized_end=1726
30
- _globals['_DATATYPE']._serialized_start=1729
31
- _globals['_DATATYPE']._serialized_end=1932
32
- _globals['_OPTYPE']._serialized_start=1934
33
- _globals['_OPTYPE']._serialized_end=1992
34
- _globals['_CONFIGURATIONFORMREQUEST']._serialized_start=63
35
- _globals['_CONFIGURATIONFORMREQUEST']._serialized_end=89
36
- _globals['_CONFIGURATIONFORMRESPONSE']._serialized_start=92
37
- _globals['_CONFIGURATIONFORMRESPONSE']._serialized_end=279
38
- _globals['_FORMFIELD']._serialized_start=282
39
- _globals['_FORMFIELD']._serialized_end=543
40
- _globals['_DROPDOWNFIELD']._serialized_start=545
41
- _globals['_DROPDOWNFIELD']._serialized_end=584
42
- _globals['_TOGGLEFIELD']._serialized_start=586
43
- _globals['_TOGGLEFIELD']._serialized_end=599
44
- _globals['_CONFIGURATIONTEST']._serialized_start=601
45
- _globals['_CONFIGURATIONTEST']._serialized_end=649
46
- _globals['_TESTREQUEST']._serialized_start=652
47
- _globals['_TESTREQUEST']._serialized_end=802
48
- _globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_start=750
49
- _globals['_TESTREQUEST_CONFIGURATIONENTRY']._serialized_end=802
50
- _globals['_TESTRESPONSE']._serialized_start=804
51
- _globals['_TESTRESPONSE']._serialized_end=868
52
- _globals['_SCHEMALIST']._serialized_start=870
53
- _globals['_SCHEMALIST']._serialized_end=921
54
- _globals['_TABLELIST']._serialized_start=923
55
- _globals['_TABLELIST']._serialized_end=971
56
- _globals['_SCHEMA']._serialized_start=973
57
- _globals['_SCHEMA']._serialized_end=1032
58
- _globals['_DECIMALPARAMS']._serialized_start=1034
59
- _globals['_DECIMALPARAMS']._serialized_end=1083
60
- _globals['_VALUETYPE']._serialized_start=1086
61
- _globals['_VALUETYPE']._serialized_end=1463
62
- _globals['_TABLE']._serialized_start=1465
63
- _globals['_TABLE']._serialized_end=1525
64
- _globals['_COLUMN']._serialized_start=1528
65
- _globals['_COLUMN']._serialized_end=1672
66
- # @@protoc_insertion_point(module_scope)
@@ -1,4 +0,0 @@
1
- # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
- """Client and server classes corresponding to protobuf-defined services."""
3
- import grpc
4
-
@@ -1,75 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # Generated by the protocol buffer compiler. DO NOT EDIT!
3
- # source: connector_sdk.proto
4
- # Protobuf Python Version: 4.25.0
5
- """Generated protocol buffer code."""
6
- from google.protobuf import descriptor as _descriptor
7
- from google.protobuf import descriptor_pool as _descriptor_pool
8
- from google.protobuf import symbol_database as _symbol_database
9
- from google.protobuf.internal import builder as _builder
10
- # @@protoc_insertion_point(imports)
11
-
12
- _sym_db = _symbol_database.Default()
13
-
14
-
15
- # This is generated code but we need to make this adjustment
16
- from fivetran_connector_sdk import common_pb2 as common__pb2
17
-
18
-
19
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x63onnector_sdk.proto\x12\x0c\x66ivetran_sdk\x1a\x0c\x63ommon.proto\"\x8c\x01\n\rSchemaRequest\x12\x45\n\rconfiguration\x18\x01 \x03(\x0b\x32..fivetran_sdk.SchemaRequest.ConfigurationEntry\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xeb\x01\n\x0eSchemaResponse\x12\'\n\x1dschema_response_not_supported\x18\x01 \x01(\x08H\x00\x12/\n\x0bwith_schema\x18\x02 \x01(\x0b\x32\x18.fivetran_sdk.SchemaListH\x00\x12\x31\n\x0ewithout_schema\x18\x03 \x01(\x0b\x32\x17.fivetran_sdk.TableListH\x00\x12$\n\x17selection_not_supported\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08responseB\x1a\n\x18_selection_not_supported\"\xf3\x01\n\rUpdateRequest\x12\x45\n\rconfiguration\x18\x01 \x03(\x0b\x32..fivetran_sdk.UpdateRequest.ConfigurationEntry\x12/\n\tselection\x18\x02 \x01(\x0b\x32\x17.fivetran_sdk.SelectionH\x00\x88\x01\x01\x12\x17\n\nstate_json\x18\x03 \x01(\tH\x01\x88\x01\x01\x1a\x34\n\x12\x43onfigurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0c\n\n_selectionB\r\n\x0b_state_json\"\x8b\x01\n\tSelection\x12:\n\x0ewithout_schema\x18\x01 \x01(\x0b\x32 .fivetran_sdk.TablesWithNoSchemaH\x00\x12\x35\n\x0bwith_schema\x18\x02 \x01(\x0b\x32\x1e.fivetran_sdk.TablesWithSchemaH\x00\x42\x0b\n\tselection\"^\n\x12TablesWithNoSchema\x12,\n\x06tables\x18\x01 \x03(\x0b\x32\x1c.fivetran_sdk.TableSelection\x12\x1a\n\x12include_new_tables\x18\x02 \x01(\x08\"_\n\x10TablesWithSchema\x12.\n\x07schemas\x18\x01 \x03(\x0b\x32\x1d.fivetran_sdk.SchemaSelection\x12\x1b\n\x13include_new_schemas\x18\x02 \x01(\x08\"\x82\x01\n\x0fSchemaSelection\x12\x10\n\x08included\x18\x01 \x01(\x08\x12\x13\n\x0bschema_name\x18\x02 \x01(\t\x12,\n\x06tables\x18\x03 \x03(\x0b\x32\x1c.fivetran_sdk.TableSelection\x12\x1a\n\x12include_new_tables\x18\x04 \x01(\x08\"\xbf\x01\n\x0eTableSelection\x12\x10\n\x08included\x18\x01 \x01(\x08\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12:\n\x07\x63olumns\x18\x03 \x03(\x0b\x32).fivetran_sdk.TableSelection.ColumnsEntry\x12\x1b\n\x13include_new_columns\x18\x04 \x01(\x08\x1a.\n\x0c\x43olumnsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\"w\n\x0eUpdateResponse\x12+\n\tlog_entry\x18\x01 \x01(\x0b\x32\x16.fivetran_sdk.LogEntryH\x00\x12,\n\toperation\x18\x02 \x01(\x0b\x32\x17.fivetran_sdk.OperationH\x00\x42\n\n\x08response\"B\n\x08LogEntry\x12%\n\x05level\x18\x01 \x01(\x0e\x32\x16.fivetran_sdk.LogLevel\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x9e\x01\n\tOperation\x12&\n\x06record\x18\x01 \x01(\x0b\x32\x14.fivetran_sdk.RecordH\x00\x12\x33\n\rschema_change\x18\x02 \x01(\x0b\x32\x1a.fivetran_sdk.SchemaChangeH\x00\x12.\n\ncheckpoint\x18\x03 \x01(\x0b\x32\x18.fivetran_sdk.CheckpointH\x00\x42\x04\n\x02op\"|\n\x0cSchemaChange\x12/\n\x0bwith_schema\x18\x01 \x01(\x0b\x32\x18.fivetran_sdk.SchemaListH\x00\x12\x31\n\x0ewithout_schema\x18\x02 \x01(\x0b\x32\x17.fivetran_sdk.TableListH\x00\x42\x08\n\x06\x63hange\"\xde\x01\n\x06Record\x12\x18\n\x0bschema_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12\"\n\x04type\x18\x03 \x01(\x0e\x32\x14.fivetran_sdk.OpType\x12,\n\x04\x64\x61ta\x18\x04 \x03(\x0b\x32\x1e.fivetran_sdk.Record.DataEntry\x1a\x44\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.fivetran_sdk.ValueType:\x02\x38\x01\x42\x0e\n\x0c_schema_name\" \n\nCheckpoint\x12\x12\n\nstate_json\x18\x01 \x01(\t*-\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\x0b\n\x07WARNING\x10\x01\x12\n\n\x06SEVERE\x10\x02\x32\xc4\x02\n\tConnector\x12\x66\n\x11\x43onfigurationForm\x12&.fivetran_sdk.ConfigurationFormRequest\x1a\'.fivetran_sdk.ConfigurationFormResponse\"\x00\x12?\n\x04Test\x12\x19.fivetran_sdk.TestRequest\x1a\x1a.fivetran_sdk.TestResponse\"\x00\x12\x45\n\x06Schema\x12\x1b.fivetran_sdk.SchemaRequest\x1a\x1c.fivetran_sdk.SchemaResponse\"\x00\x12G\n\x06Update\x12\x1b.fivetran_sdk.UpdateRequest\x1a\x1c.fivetran_sdk.UpdateResponse\"\x00\x30\x01\x42\x1fH\x01P\x01Z\x19\x66ivetran.com/fivetran_sdkb\x06proto3')
20
-
21
- _globals = globals()
22
- _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
23
- _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'connector_sdk_pb2', _globals)
24
- if _descriptor._USE_C_DESCRIPTORS == False:
25
- _globals['DESCRIPTOR']._options = None
26
- _globals['DESCRIPTOR']._serialized_options = b'H\001P\001Z\031fivetran.com/fivetran_sdk'
27
- _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._options = None
28
- _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
29
- _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._options = None
30
- _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_options = b'8\001'
31
- _globals['_TABLESELECTION_COLUMNSENTRY']._options = None
32
- _globals['_TABLESELECTION_COLUMNSENTRY']._serialized_options = b'8\001'
33
- _globals['_RECORD_DATAENTRY']._options = None
34
- _globals['_RECORD_DATAENTRY']._serialized_options = b'8\001'
35
- _globals['_LOGLEVEL']._serialized_start=2075
36
- _globals['_LOGLEVEL']._serialized_end=2120
37
- _globals['_SCHEMAREQUEST']._serialized_start=52
38
- _globals['_SCHEMAREQUEST']._serialized_end=192
39
- _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_start=140
40
- _globals['_SCHEMAREQUEST_CONFIGURATIONENTRY']._serialized_end=192
41
- _globals['_SCHEMARESPONSE']._serialized_start=195
42
- _globals['_SCHEMARESPONSE']._serialized_end=430
43
- _globals['_UPDATEREQUEST']._serialized_start=433
44
- _globals['_UPDATEREQUEST']._serialized_end=676
45
- _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_start=140
46
- _globals['_UPDATEREQUEST_CONFIGURATIONENTRY']._serialized_end=192
47
- _globals['_SELECTION']._serialized_start=679
48
- _globals['_SELECTION']._serialized_end=818
49
- _globals['_TABLESWITHNOSCHEMA']._serialized_start=820
50
- _globals['_TABLESWITHNOSCHEMA']._serialized_end=914
51
- _globals['_TABLESWITHSCHEMA']._serialized_start=916
52
- _globals['_TABLESWITHSCHEMA']._serialized_end=1011
53
- _globals['_SCHEMASELECTION']._serialized_start=1014
54
- _globals['_SCHEMASELECTION']._serialized_end=1144
55
- _globals['_TABLESELECTION']._serialized_start=1147
56
- _globals['_TABLESELECTION']._serialized_end=1338
57
- _globals['_TABLESELECTION_COLUMNSENTRY']._serialized_start=1292
58
- _globals['_TABLESELECTION_COLUMNSENTRY']._serialized_end=1338
59
- _globals['_UPDATERESPONSE']._serialized_start=1340
60
- _globals['_UPDATERESPONSE']._serialized_end=1459
61
- _globals['_LOGENTRY']._serialized_start=1461
62
- _globals['_LOGENTRY']._serialized_end=1527
63
- _globals['_OPERATION']._serialized_start=1530
64
- _globals['_OPERATION']._serialized_end=1688
65
- _globals['_SCHEMACHANGE']._serialized_start=1690
66
- _globals['_SCHEMACHANGE']._serialized_end=1814
67
- _globals['_RECORD']._serialized_start=1817
68
- _globals['_RECORD']._serialized_end=2039
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
75
- # @@protoc_insertion_point(module_scope)