tinybird-cli 1.2.1.dev4__tar.gz → 1.2.1.dev6__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 (45) hide show
  1. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/PKG-INFO +11 -1
  2. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/__cli__.py +2 -2
  3. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/datafile.py +50 -20
  4. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/PKG-INFO +11 -1
  5. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/setup.cfg +0 -0
  6. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/ch_utils/constants.py +0 -0
  7. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/ch_utils/engine.py +0 -0
  8. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/check_pypi.py +0 -0
  9. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/client.py +0 -0
  10. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/config.py +0 -0
  11. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/connector_settings.py +0 -0
  12. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/connectors.py +0 -0
  13. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/context.py +0 -0
  14. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/datatypes.py +0 -0
  15. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/feedback_manager.py +0 -0
  16. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/sql.py +0 -0
  17. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/sql_template.py +0 -0
  18. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/sql_template_fmt.py +0 -0
  19. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/sql_toolset.py +0 -0
  20. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/syncasync.py +0 -0
  21. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli.py +0 -0
  22. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/auth.py +0 -0
  23. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/branch.py +0 -0
  24. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/cicd.py +0 -0
  25. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/cli.py +0 -0
  26. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/common.py +0 -0
  27. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/config.py +0 -0
  28. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/connection.py +0 -0
  29. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/datasource.py +0 -0
  30. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/exceptions.py +0 -0
  31. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/job.py +0 -0
  32. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/pipe.py +0 -0
  33. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/telemetry.py +0 -0
  34. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/test.py +0 -0
  35. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  36. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  37. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/token.py +0 -0
  38. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/workspace.py +0 -0
  39. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  40. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tornado_template.py +0 -0
  41. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/SOURCES.txt +0 -0
  42. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/dependency_links.txt +0 -0
  43. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/entry_points.txt +0 -0
  44. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/requires.txt +0 -0
  45. {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird-cli
3
- Version: 1.2.1.dev4
3
+ Version: 1.2.1.dev6
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://docs.tinybird.co/cli.html
6
6
  Author: Tinybird
@@ -19,6 +19,16 @@ Changelog
19
19
 
20
20
  ---------
21
21
 
22
+ 1.2.1.dev6
23
+ ************
24
+
25
+ - `Fixed` Skip replacing `.incl` files in `tb fmt`
26
+
27
+ 1.2.1.dev5
28
+ ************
29
+
30
+ - `Added` Support for Copy pipes in `tb fmt`
31
+
22
32
  1.2.1.dev4
23
33
  ************
24
34
 
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://docs.tinybird.co/cli.html'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '1.2.1.dev4'
8
- __revision__ = '9dd3d50'
7
+ __version__ = '1.2.1.dev6'
8
+ __revision__ = '35463e1'
@@ -108,15 +108,22 @@ class DataFileExtensions:
108
108
  TOKEN = ".token"
109
109
 
110
110
 
111
+ class CopyParameters:
112
+ TARGET_DATASOURCE = "target_datasource"
113
+ COPY_SCHEDULE = "copy_schedule"
114
+
115
+
111
116
  PREVIEW_CONNECTOR_SERVICES = ["s3", "gcs"]
112
117
 
118
+ ON_DEMAND = "@on-demand"
119
+
113
120
 
114
121
  class ImportReplacements:
115
122
  _REPLACEMENTS: Tuple[Tuple[str, str, Optional[str]], ...] = (
116
123
  ("import_service", "service", None),
117
124
  ("import_strategy", "mode", "replace"),
118
125
  ("import_connection_name", "connection", None),
119
- ("import_schedule", "cron", "@on-demand"),
126
+ ("import_schedule", "cron", ON_DEMAND),
120
127
  ("import_query", "query", None),
121
128
  ("import_connector", "connector", None),
122
129
  ("import_external_datasource", "external_data_source", None),
@@ -156,7 +163,7 @@ class ImportReplacements:
156
163
  if linker_param != "cron":
157
164
  return linker_value
158
165
  if linker_value == "@once":
159
- return "@on-demand"
166
+ return ON_DEMAND
160
167
  if connector_service in PREVIEW_CONNECTOR_SERVICES:
161
168
  return "@auto"
162
169
  return linker_value
@@ -193,7 +200,7 @@ class ExportReplacements:
193
200
  """Returns the export parameters for a given node."""
194
201
  params = {}
195
202
  for datafile_key, export_key, default_value in ExportReplacements._REPLACEMENTS:
196
- if datafile_key == "export_schedule" and node.get(datafile_key, None) == "@on-demand":
203
+ if datafile_key == "export_schedule" and node.get(datafile_key, None) == ON_DEMAND:
197
204
  node[datafile_key] = ""
198
205
  params[export_key] = node[datafile_key] if datafile_key in node else default_value
199
206
  return params
@@ -832,7 +839,7 @@ def parse(
832
839
  "datasource": assign_node_var("datasource"),
833
840
  "tags": assign_node_var("tags"),
834
841
  "target_datasource": assign_node_var("target_datasource"),
835
- "copy_schedule": assign_node_var("copy_schedule"),
842
+ "copy_schedule": assign_node_var(CopyParameters.COPY_SCHEDULE),
836
843
  "resource": assign_node_var("resource"),
837
844
  "filter": assign_node_var("filter"),
838
845
  "token": add_token,
@@ -1176,7 +1183,7 @@ async def process_file(
1176
1183
  raise Exception(f"Unknown import service: {service}")
1177
1184
 
1178
1185
  if service in PREVIEW_CONNECTOR_SERVICES:
1179
- ON_DEMAND_CRON = "@on-demand"
1186
+ ON_DEMAND_CRON = ON_DEMAND
1180
1187
  AUTO_CRON = "@auto"
1181
1188
  ON_DEMAND_CRON_EXPECTED_BY_THE_API = "@once"
1182
1189
  VALID_CRONS: Tuple[str, ...] = (ON_DEMAND_CRON, AUTO_CRON)
@@ -1289,7 +1296,7 @@ async def process_file(
1289
1296
  "type": node_type,
1290
1297
  "description": node.get("description", ""),
1291
1298
  "target_datasource": node.get("target_datasource", None),
1292
- "copy_schedule": node.get("copy_schedule", None),
1299
+ "copy_schedule": node.get(CopyParameters.COPY_SCHEDULE, None),
1293
1300
  }
1294
1301
 
1295
1302
  is_export_node = ExportReplacements.is_export_node(node)
@@ -2198,9 +2205,9 @@ async def check_copy_pipe(pipe, copy_node, tb_client: TinyB):
2198
2205
  except Exception as e:
2199
2206
  raise CLIPipeException(FeedbackManager.error_exception(error=e))
2200
2207
 
2201
- schedule_cron = copy_node["params"].get("copy_schedule", None)
2208
+ schedule_cron = copy_node["params"].get(CopyParameters.COPY_SCHEDULE, None)
2202
2209
  is_valid_cron = not schedule_cron or (
2203
- schedule_cron and (schedule_cron == "@on-demand" or croniter.is_valid(schedule_cron))
2210
+ schedule_cron and (schedule_cron == ON_DEMAND or croniter.is_valid(schedule_cron))
2204
2211
  )
2205
2212
 
2206
2213
  if not is_valid_cron:
@@ -2485,9 +2492,9 @@ async def new_pipe(
2485
2492
  if node:
2486
2493
  copy_params = {"pipe_name_or_id": pipe_id, "node_id": node["id"]}
2487
2494
  try:
2488
- target_datasource = copy_node.get("target_datasource", None)
2489
- schedule_cron = copy_node.get("copy_schedule", None)
2490
- schedule_cron = None if schedule_cron == "@on-demand" else schedule_cron
2495
+ target_datasource = copy_node.get(CopyParameters.TARGET_DATASOURCE, None)
2496
+ schedule_cron = copy_node.get(CopyParameters.COPY_SCHEDULE, None)
2497
+ schedule_cron = None if schedule_cron == ON_DEMAND else schedule_cron
2491
2498
  current_target_datasource_id = data["copy_target_datasource"]
2492
2499
  target_datasource_response = await tb_client.get_datasource(target_datasource)
2493
2500
  target_datasource_to_send = (
@@ -2495,7 +2502,7 @@ async def new_pipe(
2495
2502
  if target_datasource_response.get("id", target_datasource) != current_target_datasource_id
2496
2503
  else None
2497
2504
  )
2498
- copy_params["target_datasource"] = target_datasource_to_send
2505
+ copy_params[CopyParameters.TARGET_DATASOURCE] = target_datasource_to_send
2499
2506
  current_schedule = data.get("schedule", {})
2500
2507
  current_schedule_cron = current_schedule.get("cron", None) if current_schedule else None
2501
2508
  schedule_cron_should_be_removed = current_schedule_cron and not schedule_cron
@@ -4011,23 +4018,46 @@ async def format_engine(
4011
4018
 
4012
4019
 
4013
4020
  async def format_node_type(file_parts: List[str], node: Dict[str, Any]) -> List[str]:
4014
- if node.get("type", "").lower() == PipeNodeTypes.MATERIALIZED:
4015
- file_parts.append(f'TYPE {node["type"].upper()}')
4021
+ node_type = node.get("type", "").lower()
4022
+ node_type_upper = f"TYPE {node_type.upper()}"
4023
+
4024
+ # Materialized pipe
4025
+ if node_type == PipeNodeTypes.MATERIALIZED:
4026
+ file_parts.append(node_type_upper)
4016
4027
  file_parts.append(DATAFILE_NEW_LINE)
4017
4028
  file_parts.append(f'DATASOURCE {node["datasource"]}')
4018
4029
  file_parts.append(DATAFILE_NEW_LINE)
4019
4030
  await format_engine(file_parts, node)
4031
+
4032
+ # Copy pipe
4033
+ if node_type == PipeNodeTypes.COPY:
4034
+ file_parts.append(node_type_upper)
4035
+ file_parts.append(DATAFILE_NEW_LINE)
4036
+ file_parts.append(f'TARGET_DATASOURCE {node["target_datasource"]}')
4037
+ if CopyParameters.COPY_SCHEDULE in node and node[CopyParameters.COPY_SCHEDULE]:
4038
+ is_ondemand = node[CopyParameters.COPY_SCHEDULE].lower() == ON_DEMAND
4039
+ file_parts.append(DATAFILE_NEW_LINE)
4040
+ file_parts.append(
4041
+ f"{CopyParameters.COPY_SCHEDULE.upper()} {ON_DEMAND if is_ondemand else node[CopyParameters.COPY_SCHEDULE]}"
4042
+ )
4043
+ else:
4044
+ file_parts.append(DATAFILE_NEW_LINE)
4045
+ file_parts.append(f"{CopyParameters.COPY_SCHEDULE.upper()} {ON_DEMAND}")
4046
+ file_parts.append(DATAFILE_NEW_LINE)
4047
+
4048
+ # Sink pipe
4020
4049
  if ExportReplacements.is_export_node(node):
4021
- file_parts.append(f'TYPE {node["type"].upper()}')
4050
+ file_parts.append(node_type_upper)
4022
4051
  export_params = ExportReplacements.get_params_from_datafile(node)
4023
4052
  file_parts.append(DATAFILE_NEW_LINE)
4024
4053
  for param, value in export_params.items():
4025
4054
  if param == "schedule_cron" and not value:
4026
- value = "@on-demand"
4055
+ value = ON_DEMAND
4027
4056
  datafile_key = ExportReplacements.get_datafile_key(param)
4028
4057
  if datafile_key:
4029
4058
  file_parts.append(f"{datafile_key} {value}")
4030
4059
  file_parts.append(DATAFILE_NEW_LINE)
4060
+
4031
4061
  return file_parts
4032
4062
 
4033
4063
 
@@ -4067,7 +4097,7 @@ async def format_node(
4067
4097
 
4068
4098
 
4069
4099
  async def format_pipe(
4070
- filename: str, line_length: Optional[int], unroll_includes: bool = False, replace_includes: bool = True
4100
+ filename: str, line_length: Optional[int], unroll_includes: bool = False, replace_includes: bool = False
4071
4101
  ) -> str:
4072
4102
  doc = parse_pipe(filename, replace_includes=replace_includes)
4073
4103
 
@@ -4382,9 +4412,9 @@ async def diff_files(
4382
4412
  return file.readlines()
4383
4413
 
4384
4414
  async def parse(filename, with_format=True, unroll_includes=False):
4385
- extension = Path(filename).suffix
4415
+ extensions = Path(filename).suffixes
4386
4416
  lines = None
4387
- if extension == ".datasource":
4417
+ if ".datasource" in extensions: # Accepts '.datasource' and '.datasource.incl'
4388
4418
  lines = (
4389
4419
  await format_datasource(
4390
4420
  filename, unroll_includes=unroll_includes, for_diff=True, client=client, replace_includes=True
@@ -4392,7 +4422,7 @@ async def diff_files(
4392
4422
  if with_format
4393
4423
  else file_lines(filename)
4394
4424
  )
4395
- elif extension in [".pipe", ".incl"]:
4425
+ elif (".pipe" in extensions) or (".incl" in extensions):
4396
4426
  lines = (
4397
4427
  await format_pipe(filename, 100, unroll_includes=unroll_includes, replace_includes=True)
4398
4428
  if with_format
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird-cli
3
- Version: 1.2.1.dev4
3
+ Version: 1.2.1.dev6
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://docs.tinybird.co/cli.html
6
6
  Author: Tinybird
@@ -19,6 +19,16 @@ Changelog
19
19
 
20
20
  ---------
21
21
 
22
+ 1.2.1.dev6
23
+ ************
24
+
25
+ - `Fixed` Skip replacing `.incl` files in `tb fmt`
26
+
27
+ 1.2.1.dev5
28
+ ************
29
+
30
+ - `Added` Support for Copy pipes in `tb fmt`
31
+
22
32
  1.2.1.dev4
23
33
  ************
24
34