tinybird-cli 5.8.0.dev2__tar.gz → 5.8.0.dev3__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-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/PKG-INFO +6 -1
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/__cli__.py +2 -2
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/client.py +18 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/feedback_manager.py +14 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/sql_template.py +12 -3
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/datasource.py +62 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird_cli.egg-info/PKG-INFO +6 -1
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/setup.cfg +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/ch_utils/engine.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/check_pypi.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/config.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/connectors.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/context.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/datafile.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/datatypes.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/git_settings.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/sql.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/sql_toolset.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/syncasync.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/cli.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/fmt.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/pipe.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/regions.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/tag.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/token.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tornado_template.py +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird_cli.egg-info/SOURCES.txt +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird_cli.egg-info/dependency_links.txt +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird_cli.egg-info/entry_points.txt +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird_cli.egg-info/requires.txt +0 -0
- {tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/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: 5.8.0.
|
|
3
|
+
Version: 5.8.0.dev3
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/cli/introduction.html
|
|
6
6
|
Author: Tinybird
|
|
@@ -18,6 +18,11 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
|
|
|
18
18
|
Changelog
|
|
19
19
|
----------
|
|
20
20
|
|
|
21
|
+
5.8.0.dev3
|
|
22
|
+
**********
|
|
23
|
+
|
|
24
|
+
- `Added` `tb datasource scheduling` commands to manage the scheduling of a Data Source
|
|
25
|
+
|
|
21
26
|
5.8.0.dev2
|
|
22
27
|
***********
|
|
23
28
|
|
|
@@ -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__ = '5.8.0.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '5.8.0.dev3'
|
|
8
|
+
__revision__ = '43074f3'
|
|
@@ -474,6 +474,24 @@ class TinyB(object):
|
|
|
474
474
|
async def datasource_sync(self, datasource_id: str):
|
|
475
475
|
return await self._req(f"/v0/datasources/{datasource_id}/scheduling/runs", method="POST", data="")
|
|
476
476
|
|
|
477
|
+
async def datasource_scheduling_state(self, datasource_id: str):
|
|
478
|
+
response = await self._req(f"/v0/datasources/{datasource_id}/scheduling/state", method="GET")
|
|
479
|
+
return response["state"]
|
|
480
|
+
|
|
481
|
+
async def datasource_scheduling_pause(self, datasource_id: str):
|
|
482
|
+
return await self._req(
|
|
483
|
+
f"/v0/datasources/{datasource_id}/scheduling/state",
|
|
484
|
+
method="PUT",
|
|
485
|
+
data='{"state": "paused"}',
|
|
486
|
+
)
|
|
487
|
+
|
|
488
|
+
async def datasource_scheduling_resume(self, datasource_id: str):
|
|
489
|
+
return await self._req(
|
|
490
|
+
f"/v0/datasources/{datasource_id}/scheduling/state",
|
|
491
|
+
method="PUT",
|
|
492
|
+
data='{"state": "running"}',
|
|
493
|
+
)
|
|
494
|
+
|
|
477
495
|
async def datasource_exchange(self, datasource_a: str, datasource_b: str):
|
|
478
496
|
payload = {"datasource_a": datasource_a, "datasource_b": datasource_b}
|
|
479
497
|
return await self._req("/v0/datasources/exchange", method="POST", data=payload)
|
|
@@ -157,6 +157,15 @@ class FeedbackManager:
|
|
|
157
157
|
error_creating_copy_job = error_message("Failed creating copy job: {error}")
|
|
158
158
|
error_pausing_copy_pipe = error_message("Failed pausing copy pipe: {error}")
|
|
159
159
|
error_resuming_copy_pipe = error_message("Failed resuming copy pipe: {error}")
|
|
160
|
+
error_pausing_datasource_scheduling = error_message(
|
|
161
|
+
"Failed pausing scheduling for Data Source '{datasource}': {error}"
|
|
162
|
+
)
|
|
163
|
+
error_resuming_datasource_scheduling = error_message(
|
|
164
|
+
"Failed resuming scheduling for Data Source '{datasource}': {error}"
|
|
165
|
+
)
|
|
166
|
+
error_datasource_scheduling_state = error_message(
|
|
167
|
+
"Failed requesting scheduling state for Data Source '{datasource}': {error}"
|
|
168
|
+
)
|
|
160
169
|
error_creating_pipe = error_message("Failed creating pipe {error}")
|
|
161
170
|
error_creating_sink_job = error_message("Failed creating sink job: {error}")
|
|
162
171
|
error_running_on_demand_sink_job = error_message("Failed running on-demand sink job: {error}")
|
|
@@ -681,6 +690,9 @@ Ready? """
|
|
|
681
690
|
info_datasource_title = print_message("** {title}", bcolors.BOLD)
|
|
682
691
|
info_datasource_row = info_message("{row}")
|
|
683
692
|
info_datasource_delete_rows_job_url = info_message("** Delete rows job url {url}")
|
|
693
|
+
info_datasource_scheduling_state = info_message("** Scheduling state for Data Source '{datasource}': {state}")
|
|
694
|
+
info_datasource_scheduling_pause = info_message("** Pausing scheduling...")
|
|
695
|
+
info_datasource_scheduling_resume = info_message("** Resuming scheduling...")
|
|
684
696
|
info_pipes = info_message("** Pipes:")
|
|
685
697
|
info_pipe_name = info_message("** - {pipe}")
|
|
686
698
|
info_using_node = print_message("** Using last node {node} as endpoint")
|
|
@@ -933,6 +945,8 @@ Ready? """
|
|
|
933
945
|
success_datasource_unshared = success_message(
|
|
934
946
|
"** The Data Source {datasource} has been correctly unshared from {workspace}"
|
|
935
947
|
)
|
|
948
|
+
success_datasource_scheduling_resumed = success_message("""** Scheduling resumed for Data Source '{datasource}'""")
|
|
949
|
+
success_datasource_scheduling_paused = success_message("""** Scheduling paused for Data Source '{datasource}'""")
|
|
936
950
|
success_connection_created = success_message("** Connection {id} created successfully!")
|
|
937
951
|
|
|
938
952
|
# TODO: Update the message when the .env feature is implemented
|
|
@@ -386,14 +386,14 @@ def array_type(types): # noqa: C901
|
|
|
386
386
|
for i, t in enumerate(list_values):
|
|
387
387
|
if _type in testers:
|
|
388
388
|
if testers[_type](str(t)):
|
|
389
|
-
values.append(expression_wrapper(types[_type](t),
|
|
389
|
+
values.append(expression_wrapper(types[_type](t), str(t)))
|
|
390
390
|
else:
|
|
391
391
|
raise SQLTemplateException(
|
|
392
392
|
f"Error validating {x}[{i}]({t}) to type {_type}",
|
|
393
393
|
documentation="/cli/advanced-templates.html",
|
|
394
394
|
)
|
|
395
395
|
else:
|
|
396
|
-
values.append(expression_wrapper(types.get(_type, lambda x: x)(t),
|
|
396
|
+
values.append(expression_wrapper(types.get(_type, lambda x: x)(t), str(t)))
|
|
397
397
|
return Expression(f"[{','.join(map(str, values))}]")
|
|
398
398
|
except AttributeError as e:
|
|
399
399
|
logging.warning(f"AttributeError on Array: {e}")
|
|
@@ -1314,8 +1314,9 @@ def expression_wrapper(x, name, escape_arrays: bool = False):
|
|
|
1314
1314
|
elif isinstance(x, Comment):
|
|
1315
1315
|
return "-- {x} \n"
|
|
1316
1316
|
if x is None:
|
|
1317
|
+
truncated_name = name[:20] + "..." if len(name) > 20 else name
|
|
1317
1318
|
raise SQLTemplateException(
|
|
1318
|
-
f'expression "{
|
|
1319
|
+
f'expression "{truncated_name}" evaluated to null', documentation="/cli/advanced-templates.html"
|
|
1319
1320
|
)
|
|
1320
1321
|
if isinstance(x, list) and escape_arrays:
|
|
1321
1322
|
logging.warning(f"expression_wrapper -> list :{x}:")
|
|
@@ -1992,6 +1993,14 @@ def render_sql_template(
|
|
|
1992
1993
|
Traceback (most recent call last):
|
|
1993
1994
|
...
|
|
1994
1995
|
tinybird.sql_template.SQLTemplateException: Template Syntax Error: expression "test" evaluated to null
|
|
1996
|
+
>>> render_sql_template("SELECT {{testisasuperlongthingandwedontwanttoreturnthefullthing}}", {'token':'testing'})
|
|
1997
|
+
Traceback (most recent call last):
|
|
1998
|
+
...
|
|
1999
|
+
tinybird.sql_template.SQLTemplateException: Template Syntax Error: expression "testisasuperlongthin..." evaluated to null
|
|
2000
|
+
>>> render_sql_template("SELECT {{ Array(embedding, 'Float32') }}", {'token':'testing', 'embedding': '1,2,3,4, null'})
|
|
2001
|
+
Traceback (most recent call last):
|
|
2002
|
+
...
|
|
2003
|
+
tinybird.sql_template.SQLTemplateException: Template Syntax Error: Error validating 1,2,3,4, null[4]( null) to type Float32
|
|
1995
2004
|
>>> render_sql_template('{% if test %}SELECT 1{% else %} select 2 {% end %}')
|
|
1996
2005
|
(' select 2 ', {}, [])
|
|
1997
2006
|
>>> render_sql_template('{% if Int32(test, 1) %}SELECT 1{% else %} select 2 {% end %}')
|
|
@@ -805,3 +805,65 @@ async def datasource_copy_from_main(
|
|
|
805
805
|
if wait:
|
|
806
806
|
base_msg = "Copy from Main Workspace" if sql_from_main else f"Copy from {sql}"
|
|
807
807
|
await wait_job(client, job_id, job_url, f"{base_msg} to {datasource_name}")
|
|
808
|
+
|
|
809
|
+
|
|
810
|
+
@datasource.group(name="scheduling")
|
|
811
|
+
@click.pass_context
|
|
812
|
+
def datasource_scheduling(ctx: Context) -> None:
|
|
813
|
+
"""Data Source scheduling commands."""
|
|
814
|
+
|
|
815
|
+
|
|
816
|
+
@datasource_scheduling.command(name="state")
|
|
817
|
+
@click.argument("datasource_name")
|
|
818
|
+
@click.pass_context
|
|
819
|
+
@coro
|
|
820
|
+
async def datasource_scheduling_state(ctx: Context, datasource_name: str) -> None:
|
|
821
|
+
"""Get the scheduling state of a Data Source."""
|
|
822
|
+
client: TinyB = ctx.obj["client"]
|
|
823
|
+
try:
|
|
824
|
+
state = await client.datasource_scheduling_state(datasource_name)
|
|
825
|
+
click.echo(FeedbackManager.info_datasource_scheduling_state(datasource=datasource_name, state=state))
|
|
826
|
+
except Exception as e:
|
|
827
|
+
raise CLIDatasourceException(
|
|
828
|
+
FeedbackManager.error_datasource_scheduling_state(datasource=datasource_name, error=e)
|
|
829
|
+
)
|
|
830
|
+
|
|
831
|
+
|
|
832
|
+
@datasource_scheduling.command(name="pause")
|
|
833
|
+
@click.argument("datasource_name")
|
|
834
|
+
@click.pass_context
|
|
835
|
+
@coro
|
|
836
|
+
async def datasource_scheduling_pause(ctx: Context, datasource_name: str) -> None:
|
|
837
|
+
"""Pause the scheduling of a Data Source."""
|
|
838
|
+
|
|
839
|
+
click.echo(FeedbackManager.info_datasource_scheduling_pause())
|
|
840
|
+
client: TinyB = ctx.ensure_object(dict)["client"]
|
|
841
|
+
|
|
842
|
+
try:
|
|
843
|
+
await client.datasource_scheduling_pause(datasource_name)
|
|
844
|
+
click.echo(FeedbackManager.success_datasource_scheduling_paused(datasource=datasource_name))
|
|
845
|
+
|
|
846
|
+
except Exception as e:
|
|
847
|
+
raise CLIDatasourceException(
|
|
848
|
+
FeedbackManager.error_pausing_datasource_scheduling(datasource=datasource_name, error=e)
|
|
849
|
+
)
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
@datasource_scheduling.command(name="resume")
|
|
853
|
+
@click.argument("datasource_name")
|
|
854
|
+
@click.pass_context
|
|
855
|
+
@coro
|
|
856
|
+
async def datasource_scheduling_resume(ctx: Context, datasource_name: str) -> None:
|
|
857
|
+
"""Resume the scheduling of a Data Source."""
|
|
858
|
+
|
|
859
|
+
click.echo(FeedbackManager.info_datasource_scheduling_resume())
|
|
860
|
+
client: TinyB = ctx.ensure_object(dict)["client"]
|
|
861
|
+
|
|
862
|
+
try:
|
|
863
|
+
await client.datasource_scheduling_resume(datasource_name)
|
|
864
|
+
click.echo(FeedbackManager.success_datasource_scheduling_resumed(datasource=datasource_name))
|
|
865
|
+
|
|
866
|
+
except Exception as e:
|
|
867
|
+
raise CLIDatasourceException(
|
|
868
|
+
FeedbackManager.error_resuming_datasource_scheduling(datasource=datasource_name, error=e)
|
|
869
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tinybird-cli
|
|
3
|
-
Version: 5.8.0.
|
|
3
|
+
Version: 5.8.0.dev3
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/cli/introduction.html
|
|
6
6
|
Author: Tinybird
|
|
@@ -18,6 +18,11 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
|
|
|
18
18
|
Changelog
|
|
19
19
|
----------
|
|
20
20
|
|
|
21
|
+
5.8.0.dev3
|
|
22
|
+
**********
|
|
23
|
+
|
|
24
|
+
- `Added` `tb datasource scheduling` commands to manage the scheduling of a Data Source
|
|
25
|
+
|
|
21
26
|
5.8.0.dev2
|
|
22
27
|
***********
|
|
23
28
|
|
|
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-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/tinyunit/tinyunit.py
RENAMED
|
File without changes
|
{tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird/tb_cli_modules/workspace_members.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-5.8.0.dev2 → tinybird-cli-5.8.0.dev3}/tinybird_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|