tinybird-cli 3.11.1.dev1__tar.gz → 3.13.1.dev1__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.11.1.dev1 → tinybird-cli-3.13.1.dev1}/PKG-INFO +3 -2
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/__cli__.py +2 -2
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/context.py +2 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/datafile.py +1 -1
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/sql_template.py +39 -20
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/sql_toolset.py +0 -1
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/regions.py +7 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/PKG-INFO +3 -2
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/setup.cfg +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/ch_utils/engine.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/check_pypi.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/client.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/config.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/connectors.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/datatypes.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/feedback_manager.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/git_settings.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/sql.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/syncasync.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/cli.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/datasource.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/pipe.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/token.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tornado_template.py +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/SOURCES.txt +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/dependency_links.txt +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/entry_points.txt +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/requires.txt +0 -0
- {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/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.
|
|
3
|
+
Version: 3.13.1.dev1
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/cli/introduction.html
|
|
6
6
|
Author: Tinybird
|
|
@@ -18,9 +18,10 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
|
|
|
18
18
|
Changelog
|
|
19
19
|
----------
|
|
20
20
|
|
|
21
|
-
3.
|
|
21
|
+
3.12.0
|
|
22
22
|
************
|
|
23
23
|
|
|
24
|
+
- `Added` new "us-west-2" region to `tb auth ls`
|
|
24
25
|
- `Fixed` "Appended 0 new rows" message when appending NDJSON
|
|
25
26
|
|
|
26
27
|
3.11.0
|
|
@@ -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.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '3.13.1.dev1'
|
|
8
|
+
__revision__ = 'bfd6dd2'
|
|
@@ -14,3 +14,5 @@ engine: ContextVar[str] = ContextVar("engine")
|
|
|
14
14
|
wait_parameter: ContextVar[bool] = ContextVar("wait_parameter")
|
|
15
15
|
wait_for_gatherer: ContextVar[bool] = ContextVar("wait_for_gatherer")
|
|
16
16
|
api_host: ContextVar[str] = ContextVar("api_host")
|
|
17
|
+
ff_split_to_array_escape: ContextVar[bool] = ContextVar("ff_split_to_array_escape")
|
|
18
|
+
ff_preprocess_parameters_circuit_breaker: ContextVar[bool] = ContextVar("ff_preprocess_parameters_circuit_breaker")
|
|
@@ -2850,7 +2850,7 @@ async def new_pipe(
|
|
|
2850
2850
|
raise click.ClickException(FeedbackManager.error_creating_pipe(error=e))
|
|
2851
2851
|
|
|
2852
2852
|
if data.get("type") == "endpoint":
|
|
2853
|
-
click.echo(FeedbackManager.
|
|
2853
|
+
click.echo(FeedbackManager.success_test_endpoint_no_token(host=host, pipe=p["name"]))
|
|
2854
2854
|
|
|
2855
2855
|
|
|
2856
2856
|
async def share_and_unshare_datasource(
|
|
@@ -7,11 +7,13 @@ from datetime import datetime
|
|
|
7
7
|
from functools import lru_cache
|
|
8
8
|
from io import StringIO
|
|
9
9
|
from json import loads
|
|
10
|
-
from typing import Optional, Tuple, Union
|
|
10
|
+
from typing import Any, List, Optional, Tuple, Union
|
|
11
11
|
|
|
12
12
|
from tornado import escape
|
|
13
13
|
from tornado.util import ObjectDict, exec_in, unicode_type
|
|
14
14
|
|
|
15
|
+
from tinybird.context import ff_preprocess_parameters_circuit_breaker, ff_split_to_array_escape
|
|
16
|
+
|
|
15
17
|
from .datatypes import testers
|
|
16
18
|
from .tornado_template import VALID_CUSTOM_FUNCTION_NAMES, SecurityException, Template
|
|
17
19
|
|
|
@@ -1253,7 +1255,11 @@ sqlescape_for_string_expression = sqlescape_generator(
|
|
|
1253
1255
|
)
|
|
1254
1256
|
|
|
1255
1257
|
|
|
1256
|
-
def
|
|
1258
|
+
def escape_single_quote_str(s):
|
|
1259
|
+
return "'" + s.replace("'", "''") + "'"
|
|
1260
|
+
|
|
1261
|
+
|
|
1262
|
+
def expression_wrapper(x, name, escape_arrays: bool = False):
|
|
1257
1263
|
if type(x) in (unicode_type, bytes, str):
|
|
1258
1264
|
return "'" + sqlescape_for_string_expression(x) + "'"
|
|
1259
1265
|
elif isinstance(x, Placeholder):
|
|
@@ -1264,6 +1270,16 @@ def expression_wrapper(x, name):
|
|
|
1264
1270
|
raise SQLTemplateException(
|
|
1265
1271
|
f'expression "{name}" evaluated to null', documentation="/cli/advanced-templates.html"
|
|
1266
1272
|
)
|
|
1273
|
+
if isinstance(x, list) and escape_arrays:
|
|
1274
|
+
logging.warning(f"expression_wrapper -> list :{x}:")
|
|
1275
|
+
|
|
1276
|
+
try:
|
|
1277
|
+
result = (
|
|
1278
|
+
f"[{','.join(escape_single_quote_str(item) if isinstance(item, str) else str(item) for item in x)}]"
|
|
1279
|
+
)
|
|
1280
|
+
return result
|
|
1281
|
+
except Exception as e:
|
|
1282
|
+
logging.error(f"Error escaping array: {e}")
|
|
1267
1283
|
return x
|
|
1268
1284
|
|
|
1269
1285
|
|
|
@@ -1673,17 +1689,25 @@ def get_var_names_and_types_cached(t: Template):
|
|
|
1673
1689
|
return get_var_names_and_types(t)
|
|
1674
1690
|
|
|
1675
1691
|
|
|
1676
|
-
def wrap_vars(t):
|
|
1692
|
+
def wrap_vars(t, escape_arrays: bool = False):
|
|
1677
1693
|
def _n(chunks, v):
|
|
1678
1694
|
for x in chunks:
|
|
1679
1695
|
if type(x).__name__ == "_ChunkList":
|
|
1680
1696
|
_n(x.chunks, v)
|
|
1681
1697
|
elif type(x).__name__ == "_Expression":
|
|
1682
|
-
x.expression =
|
|
1698
|
+
x.expression = (
|
|
1699
|
+
"expression_wrapper("
|
|
1700
|
+
+ x.expression
|
|
1701
|
+
+ ',"""'
|
|
1702
|
+
+ x.expression.replace('"', '\\"')
|
|
1703
|
+
+ '""",escape_arrays='
|
|
1704
|
+
+ str(escape_arrays)
|
|
1705
|
+
+ ")"
|
|
1706
|
+
)
|
|
1683
1707
|
elif type(x).__name__ == "_ControlBlock":
|
|
1684
1708
|
_n(x.body.chunks, v)
|
|
1685
1709
|
|
|
1686
|
-
var = []
|
|
1710
|
+
var: List[Any] = []
|
|
1687
1711
|
_n(t.file.body.chunks, var)
|
|
1688
1712
|
t.code = t._generate_python(t.loader)
|
|
1689
1713
|
try:
|
|
@@ -1741,7 +1765,7 @@ def get_used_tables_in_template(sql):
|
|
|
1741
1765
|
|
|
1742
1766
|
|
|
1743
1767
|
@lru_cache(maxsize=2**13)
|
|
1744
|
-
def get_template_and_variables(sql: str, name: Optional[str]):
|
|
1768
|
+
def get_template_and_variables(sql: str, name: Optional[str], escape_arrays: bool = False):
|
|
1745
1769
|
"""
|
|
1746
1770
|
Generates a Template and does all the processes necessary. As the object and template variables are cached
|
|
1747
1771
|
it is important to NOT MODIFY THESE OBJECTS.
|
|
@@ -1757,7 +1781,7 @@ def get_template_and_variables(sql: str, name: Optional[str]):
|
|
|
1757
1781
|
line = variable["line"]
|
|
1758
1782
|
raise ValueError(f'"{name}" can not be used as a variable name, line {line}')
|
|
1759
1783
|
|
|
1760
|
-
wrap_vars(t)
|
|
1784
|
+
wrap_vars(t, escape_arrays=escape_arrays)
|
|
1761
1785
|
|
|
1762
1786
|
return t, template_variables
|
|
1763
1787
|
except SecurityException as e:
|
|
@@ -1812,7 +1836,6 @@ def render_sql_template(
|
|
|
1812
1836
|
variables: Optional[dict] = None,
|
|
1813
1837
|
test_mode: bool = False,
|
|
1814
1838
|
name: Optional[str] = None,
|
|
1815
|
-
preprocess_variables_flag: bool = False,
|
|
1816
1839
|
) -> Tuple[str, dict]:
|
|
1817
1840
|
"""
|
|
1818
1841
|
>>> render_sql_template("select * from table where f = {{Float32(foo)}}", { 'foo': -1 })
|
|
@@ -1999,29 +2022,25 @@ def render_sql_template(
|
|
|
1999
2022
|
Traceback (most recent call last):
|
|
2000
2023
|
...
|
|
2001
2024
|
tinybird.sql_template.SQLTemplateException: Template Syntax Error: Error parsing JSON: '' - Expecting value: line 1 column 1 (char 0)
|
|
2002
|
-
>>> render_sql_template("% {% if defined(test) %}{% set _groupByCSV = ','.join(test) %} SELECT test as aa, {{Array(test, 'String')}} as test, {{_groupByCSV}} as a {% end %}", {"test": "1,2"}
|
|
2025
|
+
>>> render_sql_template("% {% if defined(test) %}{% set _groupByCSV = ','.join(test) %} SELECT test as aa, {{Array(test, 'String')}} as test, {{_groupByCSV}} as a {% end %}", {"test": "1,2"})
|
|
2003
2026
|
("% SELECT test as aa, ['1','2'] as test, '1,2' as a ", {})
|
|
2004
|
-
>>> render_sql_template("% {% if defined(test) %}{% set _groupByCSV = ','.join(test) %} SELECT test as aa, {{Array(test, 'String')}} as test, {{_groupByCSV}} as a {% end %}", {"test": ["1","2"]}
|
|
2027
|
+
>>> render_sql_template("% {% if defined(test) %}{% set _groupByCSV = ','.join(test) %} SELECT test as aa, {{Array(test, 'String')}} as test, {{_groupByCSV}} as a {% end %}", {"test": ["1","2"]})
|
|
2005
2028
|
("% SELECT test as aa, ['1','2'] as test, '1,2' as a ", {})
|
|
2006
|
-
>>> render_sql_template("% {% if defined(test) %}{% set _total = sum(test) %} SELECT test as aa, {{Array(test, 'Int32')}} as test, {{_total}} as a {% end %}", {"test": "1,2"}
|
|
2029
|
+
>>> render_sql_template("% {% if defined(test) %}{% set _total = sum(test) %} SELECT test as aa, {{Array(test, 'Int32')}} as test, {{_total}} as a {% end %}", {"test": "1,2"})
|
|
2007
2030
|
('% SELECT test as aa, [1,2] as test, 3 as a ', {})
|
|
2008
|
-
>>> render_sql_template("% {% if defined(test) %}{% set _groupByCSV = ','.join(test) %} SELECT test as aa, {{Array(test, 'String')}} as test, {{_groupByCSV}} as a {% end %}", {"test": "1,2"})
|
|
2009
|
-
("% SELECT test as aa, ['1','2'] as test, '1,,,2' as a ", {})
|
|
2010
2031
|
>>> render_sql_template("% {% if defined(test) %}{% set _groupByCSV = ','.join(test) %} SELECT test as aa, {{Array(test, 'String')}} as test, {{_groupByCSV}} as a {% end %}", {"test": ["1","2"]})
|
|
2011
2032
|
("% SELECT test as aa, ['1','2'] as test, '1,2' as a ", {})
|
|
2012
|
-
>>> render_sql_template("% {% if defined(
|
|
2013
|
-
Traceback (most recent call last):
|
|
2014
|
-
...
|
|
2015
|
-
ValueError: unsupported operand type(s) for +: 'int' and 'str'
|
|
2016
|
-
>>> render_sql_template("% SELECT {% if defined(x) %} x, 1", preprocess_variables_flag=True)
|
|
2033
|
+
>>> render_sql_template("% SELECT {% if defined(x) %} x, 1")
|
|
2017
2034
|
Traceback (most recent call last):
|
|
2018
2035
|
...
|
|
2019
2036
|
tinybird.tornado_template.UnClosedIfError: Missing {% end %} block for if at line 1
|
|
2020
2037
|
"""
|
|
2038
|
+
escape_split_to_array = ff_split_to_array_escape.get(False)
|
|
2039
|
+
bypass_preprocess_variables = ff_preprocess_parameters_circuit_breaker.get(False)
|
|
2021
2040
|
|
|
2022
|
-
t, template_variables = get_template_and_variables(sql, name)
|
|
2041
|
+
t, template_variables = get_template_and_variables(sql, name, escape_arrays=escape_split_to_array)
|
|
2023
2042
|
|
|
2024
|
-
if
|
|
2043
|
+
if not bypass_preprocess_variables and variables is not None:
|
|
2025
2044
|
processed_variables = preprocess_variables(variables, t)
|
|
2026
2045
|
variables.update(processed_variables)
|
|
2027
2046
|
|
|
@@ -164,7 +164,6 @@ def replace_tables(
|
|
|
164
164
|
valid_tables: Optional[Set[Tuple[str, str]]] = None,
|
|
165
165
|
output_one_line: bool = False,
|
|
166
166
|
timestamp: Optional[datetime] = None,
|
|
167
|
-
preprocess_variables_flag: bool = False,
|
|
168
167
|
) -> str:
|
|
169
168
|
"""
|
|
170
169
|
Given a query and a list of table replacements, returns the query after applying the table replacements.
|
|
@@ -33,6 +33,13 @@ regions_list: List[Region] = [
|
|
|
33
33
|
"host": "https://ui.us-east.aws.tinybird.co",
|
|
34
34
|
"default_password": "",
|
|
35
35
|
},
|
|
36
|
+
{
|
|
37
|
+
"name": "us-west-2",
|
|
38
|
+
"provider": "aws",
|
|
39
|
+
"api_host": "https://api.us-west-2.aws.tinybird.co",
|
|
40
|
+
"host": "https://ui.us-west-2.aws.tinybird.co",
|
|
41
|
+
"default_password": "",
|
|
42
|
+
},
|
|
36
43
|
{
|
|
37
44
|
"name": "eu-central-1",
|
|
38
45
|
"provider": "aws",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tinybird-cli
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.13.1.dev1
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/cli/introduction.html
|
|
6
6
|
Author: Tinybird
|
|
@@ -18,9 +18,10 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
|
|
|
18
18
|
Changelog
|
|
19
19
|
----------
|
|
20
20
|
|
|
21
|
-
3.
|
|
21
|
+
3.12.0
|
|
22
22
|
************
|
|
23
23
|
|
|
24
|
+
- `Added` new "us-west-2" region to `tb auth ls`
|
|
24
25
|
- `Fixed` "Appended 0 new rows" message when appending NDJSON
|
|
25
26
|
|
|
26
27
|
3.11.0
|
|
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.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/tinyunit/tinyunit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/workspace_members.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|