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.
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/PKG-INFO +11 -1
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/__cli__.py +2 -2
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/datafile.py +50 -20
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/PKG-INFO +11 -1
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/setup.cfg +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/ch_utils/engine.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/check_pypi.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/client.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/config.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/connector_settings.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/connectors.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/context.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/datatypes.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/feedback_manager.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/sql.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/sql_template.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/sql_toolset.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/syncasync.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/cli.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/datasource.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/pipe.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/token.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tornado_template.py +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/SOURCES.txt +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/dependency_links.txt +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/entry_points.txt +0 -0
- {tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/requires.txt +0 -0
- {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.
|
|
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.
|
|
8
|
-
__revision__ = '
|
|
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",
|
|
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
|
|
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) ==
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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 ==
|
|
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(
|
|
2489
|
-
schedule_cron = copy_node.get(
|
|
2490
|
-
schedule_cron = None if 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[
|
|
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
|
-
|
|
4015
|
-
|
|
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(
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
4415
|
+
extensions = Path(filename).suffixes
|
|
4386
4416
|
lines = None
|
|
4387
|
-
if
|
|
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
|
|
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.
|
|
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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit.py
RENAMED
|
File without changes
|
{tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird/tb_cli_modules/workspace_members.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-1.2.1.dev4 → tinybird-cli-1.2.1.dev6}/tinybird_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|