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.
Files changed (46) hide show
  1. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/PKG-INFO +3 -2
  2. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/__cli__.py +2 -2
  3. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/context.py +2 -0
  4. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/datafile.py +1 -1
  5. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/sql_template.py +39 -20
  6. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/sql_toolset.py +0 -1
  7. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/regions.py +7 -0
  8. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/PKG-INFO +3 -2
  9. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/setup.cfg +0 -0
  10. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/ch_utils/constants.py +0 -0
  11. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/ch_utils/engine.py +0 -0
  12. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/check_pypi.py +0 -0
  13. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/client.py +0 -0
  14. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/config.py +0 -0
  15. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/connectors.py +0 -0
  16. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/datatypes.py +0 -0
  17. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/feedback_manager.py +0 -0
  18. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/git_settings.py +0 -0
  19. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/sql.py +0 -0
  20. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/sql_template_fmt.py +0 -0
  21. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/syncasync.py +0 -0
  22. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli.py +0 -0
  23. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/auth.py +0 -0
  24. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/branch.py +0 -0
  25. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/cicd.py +0 -0
  26. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/cli.py +0 -0
  27. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/common.py +0 -0
  28. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/config.py +0 -0
  29. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/connection.py +0 -0
  30. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/datasource.py +0 -0
  31. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/exceptions.py +0 -0
  32. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/job.py +0 -0
  33. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/pipe.py +0 -0
  34. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/telemetry.py +0 -0
  35. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/test.py +0 -0
  36. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  37. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  38. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/token.py +0 -0
  39. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/workspace.py +0 -0
  40. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  41. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird/tornado_template.py +0 -0
  42. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/SOURCES.txt +0 -0
  43. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/dependency_links.txt +0 -0
  44. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/entry_points.txt +0 -0
  45. {tinybird-cli-3.11.1.dev1 → tinybird-cli-3.13.1.dev1}/tinybird_cli.egg-info/requires.txt +0 -0
  46. {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.11.1.dev1
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.11.1.dev1
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.11.1.dev1'
8
- __revision__ = '2651f7e'
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.success_test_endpoint(host=host, pipe=p["name"], token=token))
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 expression_wrapper(x, name):
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 = "expression_wrapper(" + x.expression + ',"""' + x.expression.replace('"', '\\"') + '""")'
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"}, preprocess_variables_flag=True)
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"]}, preprocess_variables_flag=True)
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"}, preprocess_variables_flag=True)
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(test) %}{% set _total = sum(test) %} SELECT test as aa, {{Array(test, 'Int32')}} as test, {{_total}} as a {% end %}", {"test": "1,2"})
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 preprocess_variables_flag and variables is not None:
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.11.1.dev1
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.11.1.dev1
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