tinybird-cli 3.6.1.dev5__tar.gz → 3.6.1.dev7__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-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/PKG-INFO +11 -1
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/__cli__.py +2 -2
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/ch_utils/engine.py +23 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/datafile.py +42 -24
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/feedback_manager.py +3 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird_cli.egg-info/PKG-INFO +11 -1
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/setup.cfg +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/check_pypi.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/client.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/config.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/connector_settings.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/connectors.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/context.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/data_connectors/credentials.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/datatypes.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/git_settings.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/sql.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/sql_template.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/sql_toolset.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/syncasync.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/cli.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/datasource.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/pipe.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/regions.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/token.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tornado_template.py +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird_cli.egg-info/SOURCES.txt +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird_cli.egg-info/dependency_links.txt +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird_cli.egg-info/entry_points.txt +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird_cli.egg-info/requires.txt +0 -0
- {tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/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: 3.6.1.
|
|
3
|
+
Version: 3.6.1.dev7
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/cli/introduction.html
|
|
6
6
|
Author: Tinybird
|
|
@@ -19,6 +19,16 @@ Changelog
|
|
|
19
19
|
|
|
20
20
|
---------
|
|
21
21
|
|
|
22
|
+
3.6.1.dev7
|
|
23
|
+
************
|
|
24
|
+
|
|
25
|
+
- `Fixed` `tb deploy` supports deployment when a `.incl` file is removed
|
|
26
|
+
|
|
27
|
+
3.6.1.dev6
|
|
28
|
+
************
|
|
29
|
+
|
|
30
|
+
- `Fixed` Some issues when using `--fmt: off` with `CASE` in the sql
|
|
31
|
+
|
|
22
32
|
3.6.1.dev5
|
|
23
33
|
************
|
|
24
34
|
|
|
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
|
|
|
4
4
|
__url__ = 'https://www.tinybird.co/docs/cli/introduction.html'
|
|
5
5
|
__author__ = 'Tinybird'
|
|
6
6
|
__author_email__ = 'support@tinybird.co'
|
|
7
|
-
__version__ = '3.6.1.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '3.6.1.dev7'
|
|
8
|
+
__revision__ = 'c015232'
|
|
@@ -32,7 +32,20 @@ class TableDetails:
|
|
|
32
32
|
>>> ed.to_datafile()
|
|
33
33
|
''
|
|
34
34
|
|
|
35
|
+
>>> ed = TableDetails({ "engine_full": "MergeTree() PARTITION BY toYear(timestamp) ORDER BY (timestamp, cityHash64(location)) SAMPLE BY cityHash64(location) SETTINGS index_granularity = 32, index_granularity_bytes = 2048", "engine": "MergeTree", "partition_key": "toYear(timestamp)", "sorting_key": "timestamp, cityHash64(location)", "primary_key": "timestamp, cityHash64(location)", "sampling_key": "cityHash64(location)", "settings": "index_granularity = 32, index_granularity_bytes = 2048", "ttl": None })
|
|
36
|
+
>>> ed.diff_ttl("toDate(timestamp) + toIntervalDay(1)")
|
|
37
|
+
True
|
|
35
38
|
>>> ed = TableDetails({ "engine_full": "MergeTree() PARTITION BY toYear(timestamp) ORDER BY (timestamp, cityHash64(location)) SAMPLE BY cityHash64(location) SETTINGS index_granularity = 32, index_granularity_bytes = 2048 TTL toDate(timestamp) + INTERVAL 1 DAY", "engine": "MergeTree", "partition_key": "toYear(timestamp)", "sorting_key": "timestamp, cityHash64(location)", "primary_key": "timestamp, cityHash64(location)", "sampling_key": "cityHash64(location)", "settings": "index_granularity = 32, index_granularity_bytes = 2048", "ttl": "toDate(timestamp) + INTERVAL 1 DAY" })
|
|
39
|
+
>>> ed.diff_ttl("toDate(timestamp) + toIntervalDay(1)")
|
|
40
|
+
False
|
|
41
|
+
>>> ed.diff_ttl("toDate(timestamp) + toIntervalDay(2)")
|
|
42
|
+
True
|
|
43
|
+
>>> ed.diff_ttl("toDate(timestamp) + INTERVAL DAY 2")
|
|
44
|
+
True
|
|
45
|
+
>>> ed.diff_ttl("toDate(timestamp) + INTERVAL 1 DAY")
|
|
46
|
+
False
|
|
47
|
+
>>> ed.diff_ttl("")
|
|
48
|
+
True
|
|
36
49
|
>>> ed.engine_full
|
|
37
50
|
'MergeTree() PARTITION BY toYear(timestamp) ORDER BY (timestamp, cityHash64(location)) SAMPLE BY cityHash64(location) SETTINGS index_granularity = 32, index_granularity_bytes = 2048 TTL toDate(timestamp) + INTERVAL 1 DAY'
|
|
38
51
|
>>> ed.engine
|
|
@@ -132,6 +145,16 @@ class TableDetails:
|
|
|
132
145
|
return is_aggregating or is_replacing or is_collapsing
|
|
133
146
|
return False
|
|
134
147
|
|
|
148
|
+
def diff_ttl(self, new_ttl: str) -> bool:
|
|
149
|
+
try:
|
|
150
|
+
from tinybird.sql_toolset import format_sql
|
|
151
|
+
|
|
152
|
+
current_ttl = format_sql(f"select {self.ttl}")[7:]
|
|
153
|
+
new_ttl = format_sql(f"select {new_ttl}")[7:]
|
|
154
|
+
return current_ttl != new_ttl
|
|
155
|
+
except Exception:
|
|
156
|
+
return self.ttl != new_ttl
|
|
157
|
+
|
|
135
158
|
@property
|
|
136
159
|
def partition_key(self) -> Optional[str]:
|
|
137
160
|
return self.details.get("partition_key", None)
|
|
@@ -237,6 +237,10 @@ class ParseException(Exception):
|
|
|
237
237
|
super().__init__(err)
|
|
238
238
|
|
|
239
239
|
|
|
240
|
+
class IncludeFileNotFoundException(Exception):
|
|
241
|
+
pass
|
|
242
|
+
|
|
243
|
+
|
|
240
244
|
class ValidationException(Exception):
|
|
241
245
|
def __init__(self, err: str, lineno: int = -1) -> None:
|
|
242
246
|
self.lineno: int = lineno
|
|
@@ -411,16 +415,21 @@ class CLIGitRelease:
|
|
|
411
415
|
parsed_resources: Dict[str, Datafile] = {}
|
|
412
416
|
|
|
413
417
|
def _is_include(include_path, resource_path):
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
418
|
+
try:
|
|
419
|
+
if filename.endswith(".pipe"):
|
|
420
|
+
parsed_func = parse_pipe
|
|
421
|
+
else:
|
|
422
|
+
parsed_func = parse_datasource
|
|
423
|
+
parsed_resource = parsed_resources.get(resource_path, parsed_func(resource_path))
|
|
424
|
+
parsed_resources[filename] = parsed_resource
|
|
425
|
+
for include in parsed_resource.includes.keys():
|
|
426
|
+
if Path(include_path).resolve().name in include.strip('"').strip("'"):
|
|
427
|
+
return True
|
|
428
|
+
return False
|
|
429
|
+
except IncludeFileNotFoundException as e:
|
|
430
|
+
raise click.ClickException(
|
|
431
|
+
FeedbackManager.error_deleted_include(include_file=str(e), filename=filename)
|
|
432
|
+
)
|
|
424
433
|
|
|
425
434
|
for diff in diffs:
|
|
426
435
|
changes_in_includes = False
|
|
@@ -663,7 +672,9 @@ class Deployment:
|
|
|
663
672
|
for dep in node["dependencies"]:
|
|
664
673
|
if dep in [pipe["name"] for pipe in remote_pipes]:
|
|
665
674
|
pipes_deps.setdefault(dep, []).append(pipe["name"])
|
|
666
|
-
deleted_resources: Dict[str, str] = {
|
|
675
|
+
deleted_resources: Dict[str, str] = {
|
|
676
|
+
Path(resource).resolve().stem: resource for resource in deleted if ".incl" not in resource
|
|
677
|
+
}
|
|
667
678
|
|
|
668
679
|
for group in toposort(pipes_deps):
|
|
669
680
|
# for each level keep materialized for the end
|
|
@@ -976,19 +987,22 @@ def parse(
|
|
|
976
987
|
# be sure to replace the include line
|
|
977
988
|
p = Path(basepath)
|
|
978
989
|
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
doc.includes[
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
990
|
+
try:
|
|
991
|
+
with open(p / f) as file:
|
|
992
|
+
try:
|
|
993
|
+
ll = list(StringIO(file.read(), newline=None))
|
|
994
|
+
node_line = [line for line in ll if "NODE" in line]
|
|
995
|
+
if node_line and doc.includes[args_with_attrs]:
|
|
996
|
+
doc.includes[node_line[0].split("NODE")[-1].split("\n")[0].strip()] = ""
|
|
997
|
+
except Exception:
|
|
998
|
+
pass
|
|
999
|
+
finally:
|
|
1000
|
+
file.seek(0)
|
|
1001
|
+
lines[lineno : lineno + 1] = [""] + list(
|
|
1002
|
+
StringIO(Template(file.read()).safe_substitute(attrs), newline=None)
|
|
1003
|
+
)
|
|
1004
|
+
except FileNotFoundError:
|
|
1005
|
+
raise IncludeFileNotFoundException(f)
|
|
992
1006
|
|
|
993
1007
|
def version(*args: str, **kwargs: Any) -> None:
|
|
994
1008
|
if len(args) < 1:
|
|
@@ -1152,6 +1166,8 @@ def parse(
|
|
|
1152
1166
|
raise click.ClickException(FeedbackManager.error_missing_datasource_name())
|
|
1153
1167
|
else:
|
|
1154
1168
|
raise ValidationException(f"Validation error, found {line} in line {str(lineno)}: {str(e)}", lineno=lineno)
|
|
1169
|
+
except IncludeFileNotFoundException as e:
|
|
1170
|
+
raise e
|
|
1155
1171
|
except Exception as e:
|
|
1156
1172
|
traceback.print_tb(e.__traceback__)
|
|
1157
1173
|
raise ParseException(f"Unexpected error: {e}", lineno=lineno)
|
|
@@ -3628,6 +3644,8 @@ async def build_graph(
|
|
|
3628
3644
|
)
|
|
3629
3645
|
except click.ClickException as e:
|
|
3630
3646
|
raise e
|
|
3647
|
+
except IncludeFileNotFoundException as e:
|
|
3648
|
+
raise click.ClickException(FeedbackManager.error_deleted_include(include_file=str(e), filename=filename))
|
|
3631
3649
|
except Exception as e:
|
|
3632
3650
|
raise click.ClickException(str(e))
|
|
3633
3651
|
|
|
@@ -206,6 +206,9 @@ class FeedbackManager:
|
|
|
206
206
|
error_connection_create = error_message("Connection {connection_name} could not be created: {error}")
|
|
207
207
|
error_connection_integration_not_available = error_message("Connection could not be created: {error}")
|
|
208
208
|
error_workspace = error_message("Workspace {workspace} not found. use 'tb workspace ls' to list your workspaces")
|
|
209
|
+
error_deleted_include = error_message(
|
|
210
|
+
"Related include file {include_file} was deleted and it's used in {filename}. Delete or remove dependency from {filename}."
|
|
211
|
+
)
|
|
209
212
|
error_branch = error_message(
|
|
210
213
|
"Branch {branch} not found. use 'tb branch ls' to list your Branches, make sure you are authenticated using the right workspace token"
|
|
211
214
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tinybird-cli
|
|
3
|
-
Version: 3.6.1.
|
|
3
|
+
Version: 3.6.1.dev7
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/cli/introduction.html
|
|
6
6
|
Author: Tinybird
|
|
@@ -19,6 +19,16 @@ Changelog
|
|
|
19
19
|
|
|
20
20
|
---------
|
|
21
21
|
|
|
22
|
+
3.6.1.dev7
|
|
23
|
+
************
|
|
24
|
+
|
|
25
|
+
- `Fixed` `tb deploy` supports deployment when a `.incl` file is removed
|
|
26
|
+
|
|
27
|
+
3.6.1.dev6
|
|
28
|
+
************
|
|
29
|
+
|
|
30
|
+
- `Fixed` Some issues when using `--fmt: off` with `CASE` in the sql
|
|
31
|
+
|
|
22
32
|
3.6.1.dev5
|
|
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
|
|
File without changes
|
{tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/tinyunit/tinyunit.py
RENAMED
|
File without changes
|
{tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird/tb_cli_modules/workspace_members.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-3.6.1.dev5 → tinybird-cli-3.6.1.dev7}/tinybird_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|