tinybird-cli 5.15.2.dev0__tar.gz → 5.16.0.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 (48) hide show
  1. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/PKG-INFO +11 -4
  2. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/__cli__.py +2 -2
  3. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/client.py +1 -1
  4. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/feedback_manager.py +2 -2
  5. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/sql_template.py +38 -5
  6. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/cli.py +0 -1
  7. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/common.py +1 -1
  8. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/pipe.py +0 -1
  9. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/telemetry.py +1 -1
  10. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -2
  11. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tornado_template.py +1 -1
  12. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird_cli.egg-info/PKG-INFO +11 -4
  13. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird_cli.egg-info/requires.txt +2 -2
  14. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/setup.cfg +0 -0
  15. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/ch_utils/constants.py +0 -0
  16. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/ch_utils/engine.py +0 -0
  17. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/check_pypi.py +0 -0
  18. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/config.py +0 -0
  19. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/connectors.py +0 -0
  20. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/context.py +0 -0
  21. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/datafile.py +0 -0
  22. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/datatypes.py +0 -0
  23. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/git_settings.py +0 -0
  24. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/sql.py +0 -0
  25. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/sql_template_fmt.py +0 -0
  26. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/sql_toolset.py +0 -0
  27. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/syncasync.py +0 -0
  28. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli.py +0 -0
  29. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/auth.py +0 -0
  30. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/branch.py +0 -0
  31. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/cicd.py +0 -0
  32. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/config.py +0 -0
  33. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/connection.py +0 -0
  34. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/datasource.py +0 -0
  35. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/exceptions.py +0 -0
  36. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/fmt.py +0 -0
  37. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/job.py +0 -0
  38. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/regions.py +0 -0
  39. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/tag.py +0 -0
  40. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/test.py +0 -0
  41. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  42. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/token.py +0 -0
  43. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/workspace.py +0 -0
  44. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  45. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird_cli.egg-info/SOURCES.txt +0 -0
  46. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird_cli.egg-info/dependency_links.txt +0 -0
  47. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird_cli.egg-info/entry_points.txt +0 -0
  48. {tinybird_cli-5.15.2.dev0 → tinybird_cli-5.16.0.dev1}/tinybird_cli.egg-info/top_level.txt +0 -0
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird_cli
3
- Version: 5.15.2.dev0
3
+ Version: 5.16.0.dev1
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli
6
6
  Author: Tinybird
7
7
  Author-email: support@tinybird.co
8
- Requires-Python: >=3.9, <3.13
8
+ Requires-Python: >=3.9, <3.14
9
9
  Description-Content-Type: text/x-rst
10
10
  Requires-Dist: aiofiles==24.1.0
11
11
  Requires-Dist: click<8.2,>=8.1.6
12
- Requires-Dist: clickhouse-toolset==0.33.dev0
12
+ Requires-Dist: clickhouse-toolset==0.34.dev0
13
13
  Requires-Dist: colorama==0.4.6
14
14
  Requires-Dist: cryptography~=41.0.0
15
- Requires-Dist: croniter==1.3.8
15
+ Requires-Dist: croniter==1.3.15
16
16
  Requires-Dist: GitPython~=3.1.32
17
17
  Requires-Dist: humanfriendly~=8.2
18
18
  Requires-Dist: pydantic~=2.8.0
@@ -61,6 +61,13 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
61
61
  Changelog
62
62
  ----------
63
63
 
64
+ 5.16.0.dev1
65
+ ***********
66
+
67
+ - `Added` support for Python 3.13
68
+ - `Updated` dependencies:
69
+ - croniter: from 1.3.8 to 1.3.15
70
+
64
71
  5.15.1
65
72
  ***********
66
73
 
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://www.tinybird.co/docs/cli'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '5.15.2.dev0'
8
- __revision__ = '5fcfa0c'
7
+ __version__ = '5.16.0.dev1'
8
+ __revision__ = '65d0c58'
@@ -174,7 +174,7 @@ class TinyB:
174
174
  if not token_to_use:
175
175
  raise AuthNoTokenException(f"Forbidden: {error}")
176
176
  raise AuthException(f"Forbidden: {error}")
177
- if response.status_code == 204 or response.status_code == 205:
177
+ if response.status_code in (204, 205):
178
178
  return None
179
179
  if response.status_code == 404:
180
180
  error = parse_error_response(response)
@@ -458,7 +458,7 @@ class FeedbackManager:
458
458
  info_releases_detected = info_message("** Live Release: {current_semver} => New Release: {semver}")
459
459
  info_dry_releases_detected = info_message("** [DRY RUN] Live Release: {current_semver} => New Release: {semver}")
460
460
  info_pre_prompt_auth_login_user_token = info_message(
461
- "ℹ️ In order to log into Tinybird, you need your user token. Please, go to {host}/tokens/ and paste your User Token here."
461
+ "ℹ️ In order to log into Tinybird, you need your user token. Please, go to {host}/tokens/ and paste your User Token here." # noqa: RUF001
462
462
  )
463
463
  prompt_auth_login_user_token = prompt_message("❓ User token:")
464
464
 
@@ -609,7 +609,7 @@ Ready? """
609
609
  )
610
610
  warning_datasource_sync = warning_message("** Warning: Do you want to sync the Data Source {datasource}?")
611
611
  warning_datasource_sync_bucket = warning_message(
612
- "** Warning: Do you want to ingest all the selected files (new and previous) from the {datasource} bucket? Be aware that data might be duplicated if you have previously ingested those files.\n"
612
+ "** Warning: Do you want to ingest all the selected files (new and previous) from the {datasource} bucket? Be aware that data might be duplicated if you have previously ingested those files.\n"
613
613
  )
614
614
  warning_users_dont_exist = warning_message(
615
615
  "** Warning: The following users do not exist in the workspace {workspace}: {users}"
@@ -385,9 +385,12 @@ def array_type(types):
385
385
  x = default
386
386
  else:
387
387
  if _type and _type in types:
388
- x = ",".join(map(str, [types[_type](x) for _ in range(2)]))
388
+ if _type == "String":
389
+ x = ""
390
+ else:
391
+ x = ",".join(map(str, [types[_type](x) for _ in range(2)]))
389
392
  else:
390
- x = ",".join([f"__no_value__{i}" for i in range(2)])
393
+ x = ""
391
394
  elif x is None:
392
395
  x = default
393
396
  if x is None:
@@ -405,7 +408,7 @@ def array_type(types):
405
408
  values.append(expression_wrapper(types[_type](t), str(t)))
406
409
  else:
407
410
  raise SQLTemplateException(
408
- f"Error validating {x}[{i}]({t}) to type {_type}",
411
+ f"Error validating [{x}][{i}] ({'empty string' if t == '' else t}) to type {_type}",
409
412
  documentation="/cli/advanced-templates.html",
410
413
  )
411
414
  else:
@@ -2056,7 +2059,11 @@ def render_sql_template(
2056
2059
  >>> render_sql_template("SELECT {{ Array(embedding, 'Float32') }}", {'token':'testing', 'embedding': '1,2,3,4, null'})
2057
2060
  Traceback (most recent call last):
2058
2061
  ...
2059
- tinybird.sql_template.SQLTemplateException: Template Syntax Error: Error validating 1,2,3,4, null[4]( null) to type Float32
2062
+ tinybird.sql_template.SQLTemplateException: Template Syntax Error: Error validating [1,2,3,4, null][4] ( null) to type Float32
2063
+ >>> render_sql_template("SELECT {{ Array(embedding, 'Int32', '') }}", {'token':'testing', 'embedding': ''})
2064
+ Traceback (most recent call last):
2065
+ ...
2066
+ tinybird.sql_template.SQLTemplateException: Template Syntax Error: Error validating [][0] (empty string) to type Int32
2060
2067
  >>> render_sql_template('{% if test %}SELECT 1{% else %} select 2 {% end %}')
2061
2068
  (' select 2 ', {}, [])
2062
2069
  >>> render_sql_template('{% if Int32(test, 1) %}SELECT 1{% else %} select 2 {% end %}')
@@ -2096,7 +2103,7 @@ def render_sql_template(
2096
2103
  >>> render_sql_template("SELECT {{Array(foo, 'Int32')}}", test_mode=True)
2097
2104
  ('SELECT [0,0]', {}, [])
2098
2105
  >>> render_sql_template("SELECT {{Array(foo)}}", test_mode=True)
2099
- ("SELECT ['__no_value__0','__no_value__1']", {}, [])
2106
+ ("SELECT ['']", {}, [])
2100
2107
  >>> render_sql_template("{{max_threads(2)}} SELECT 1")
2101
2108
  ('-- max_threads 2\\n SELECT 1', {'max_threads': 2}, [])
2102
2109
  >>> render_sql_template("SELECT {{String(foo)}}", test_mode=True)
@@ -2183,6 +2190,14 @@ def render_sql_template(
2183
2190
  ("% SELECT ['pre','pro']", {}, [])
2184
2191
  >>> render_sql_template("% SELECT {{Array(click_selector, 'String', 'pre,pro')}}", {'click_selector': 'hi,hello'})
2185
2192
  ("% SELECT ['hi','hello']", {}, [])
2193
+ >>> render_sql_template("% SELECT {{Array(click_selector, 'String', '')}}")
2194
+ ("% SELECT ['']", {}, [])
2195
+ >>> render_sql_template("SELECT {{ Array(embedding, 'Int32', '') }}")
2196
+ Traceback (most recent call last):
2197
+ ...
2198
+ tinybird.sql_template.SQLTemplateException: Template Syntax Error: Error validating [][0] (empty string) to type Int32
2199
+ >>> render_sql_template("% SELECT {{Array(click_selector, 'String', '')}}", test_mode=True)
2200
+ ("% SELECT ['']", {}, [])
2186
2201
  >>> render_sql_template("% SELECT now() > {{DateTime64(variable, '2020-09-09 10:10:10.000')}}", {})
2187
2202
  ("% SELECT now() > '2020-09-09 10:10:10.000'", {}, [])
2188
2203
  >>> render_sql_template("% SELECT {% if defined(x) %} x, 1", {})
@@ -2241,6 +2256,16 @@ def render_sql_template(
2241
2256
  Traceback (most recent call last):
2242
2257
  ...
2243
2258
  tinybird.sql_template.SQLTemplateException: Template Syntax Error: Required parameter is not defined. Check the parameters test. Please provide a value or set a default value in the pipe code.
2259
+ >>> render_sql_template("SELECT * FROM test WHERE {% for item in JSON(filters, '[{}]') %} {{item.get('operand')}} {% end %}")
2260
+ Traceback (most recent call last):
2261
+ ...
2262
+ tinybird.sql_template.SQLTemplateException: Template Syntax Error: expression "item.get('operand')" evaluated to null
2263
+ >>> render_sql_template("SELECT * FROM test WHERE {% for item in JSON(filters, '[{\\\"operand\\\":\\\"test\\\"}]') %} {{item.get('operand')}} {% end %}")
2264
+ ("SELECT * FROM test WHERE 'test' ", {}, [])
2265
+ >>> render_sql_template("SELECT * FROM test WHERE {% for item in JSON(filters, '[\\\"test\\\"]') %} {{item.get('operator')}} {% end %}")
2266
+ Traceback (most recent call last):
2267
+ ...
2268
+ tinybird.sql_template.SQLTemplateException: Template Syntax Error: 'str' object has no attribute 'get'. Make sure you're using an object/dictionary where trying to use .get()
2244
2269
  """
2245
2270
  escape_split_to_array = ff_split_to_array_escape.get(False)
2246
2271
 
@@ -2308,6 +2333,14 @@ def render_sql_template(
2308
2333
  except SQLTemplateException as e:
2309
2334
  format_SQLTemplateException_message(e, vars_and_types=template_variables_with_types)
2310
2335
  raise
2336
+ except AttributeError as e:
2337
+ # This happens when trying to use `get` on a string or when the object is None
2338
+ if "'str' object has no attribute 'get'" in str(e):
2339
+ raise SQLTemplateException(
2340
+ "'str' object has no attribute 'get'. Make sure you're using an object/dictionary where trying to use .get()",
2341
+ documentation="/cli/advanced-templates.html",
2342
+ )
2343
+ raise SQLTemplateException(str(e), documentation="/cli/advanced-templates.html")
2311
2344
  except Exception as e:
2312
2345
  # errors might vary here, we need to support as much as possible
2313
2346
  # https://gitlab.com/tinybird/analytics/-/issues/943
@@ -676,7 +676,6 @@ async def push(
676
676
  user_token=user_token,
677
677
  is_internal=is_internal,
678
678
  )
679
- return
680
679
 
681
680
 
682
681
  @cli.command()
@@ -600,7 +600,7 @@ def format_host(host: str, subdomain: Optional[str] = None) -> str:
600
600
  if subdomain and not is_localhost:
601
601
  url_info = urlparse(host)
602
602
  current_subdomain = url_info.netloc.split(".")[0]
603
- if current_subdomain == "api" or current_subdomain == "ui":
603
+ if current_subdomain in ("api", "ui"):
604
604
  host = host.replace(current_subdomain, subdomain)
605
605
  if "localhost" in host or is_localhost:
606
606
  host = f"http://{host}" if "http" not in host else host
@@ -701,7 +701,6 @@ async def regression_test(
701
701
  tests_validate_processed_bytes=validate_processed_bytes,
702
702
  tests_check_requests_from_branch=check_requests_from_main,
703
703
  )
704
- return
705
704
 
706
705
 
707
706
  @pipe_copy.command(name="run", short_help="Run an on-demand copy job")
@@ -206,7 +206,7 @@ class TelemetryHelper:
206
206
 
207
207
  self.log(f"Received status {r.status_code}: {r.text}")
208
208
 
209
- if r.status_code == 200 or r.status_code == 202:
209
+ if r.status_code in (200, 202):
210
210
  self.log(f"Successfully sent {len(events)} events to {self.tb_host}")
211
211
  self.events.clear()
212
212
  return
@@ -190,8 +190,6 @@ def generate_file(file: str, overwrite: bool = False) -> None:
190
190
  else:
191
191
  raise CLIException(FeedbackManager.error_file_already_exists(file=p))
192
192
 
193
- return
194
-
195
193
 
196
194
  async def run_test_file(tb_client: TinyB, file: str) -> List[TestResult]:
197
195
  results: List[TestResult] = []
@@ -1144,7 +1144,7 @@ def check_valid_expr(expr):
1144
1144
  return
1145
1145
  if isinstance(expr.value, str):
1146
1146
  return
1147
- if isinstance(expr.value, type(None)):
1147
+ if expr.value is None:
1148
1148
  return
1149
1149
  raise SecurityException(f"Invalid Constant: {ast.dump(expr)}")
1150
1150
  elif isinstance(expr, ast.Name):
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird_cli
3
- Version: 5.15.2.dev0
3
+ Version: 5.16.0.dev1
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli
6
6
  Author: Tinybird
7
7
  Author-email: support@tinybird.co
8
- Requires-Python: >=3.9, <3.13
8
+ Requires-Python: >=3.9, <3.14
9
9
  Description-Content-Type: text/x-rst
10
10
  Requires-Dist: aiofiles==24.1.0
11
11
  Requires-Dist: click<8.2,>=8.1.6
12
- Requires-Dist: clickhouse-toolset==0.33.dev0
12
+ Requires-Dist: clickhouse-toolset==0.34.dev0
13
13
  Requires-Dist: colorama==0.4.6
14
14
  Requires-Dist: cryptography~=41.0.0
15
- Requires-Dist: croniter==1.3.8
15
+ Requires-Dist: croniter==1.3.15
16
16
  Requires-Dist: GitPython~=3.1.32
17
17
  Requires-Dist: humanfriendly~=8.2
18
18
  Requires-Dist: pydantic~=2.8.0
@@ -61,6 +61,13 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
61
61
  Changelog
62
62
  ----------
63
63
 
64
+ 5.16.0.dev1
65
+ ***********
66
+
67
+ - `Added` support for Python 3.13
68
+ - `Updated` dependencies:
69
+ - croniter: from 1.3.8 to 1.3.15
70
+
64
71
  5.15.1
65
72
  ***********
66
73
 
@@ -1,9 +1,9 @@
1
1
  aiofiles==24.1.0
2
2
  click<8.2,>=8.1.6
3
- clickhouse-toolset==0.33.dev0
3
+ clickhouse-toolset==0.34.dev0
4
4
  colorama==0.4.6
5
5
  cryptography~=41.0.0
6
- croniter==1.3.8
6
+ croniter==1.3.15
7
7
  GitPython~=3.1.32
8
8
  humanfriendly~=8.2
9
9
  pydantic~=2.8.0