tinybird 0.0.1.dev264__tar.gz → 0.0.1.dev266__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.
Potentially problematic release.
This version of tinybird might be problematic. Click here for more details.
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/PKG-INFO +1 -1
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/client.py +3 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/__cli__.py +2 -2
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/client.py +18 -3
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/agent.py +32 -16
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/banner.py +8 -35
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/models.py +8 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/utils.py +1 -1
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/materialization.py +10 -1
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/token.py +33 -12
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/cli.py +8 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/pipe.py +8 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird.egg-info/PKG-INFO +1 -1
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/setup.cfg +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/__cli__.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/ch_utils/engine.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/check_pypi.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/config.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/connectors.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/context.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/datafile/common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/datafile/exceptions.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/datafile/parse_connection.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/datafile/parse_datasource.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/datafile/parse_pipe.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/datatypes.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/feedback_manager.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/git_settings.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/prompts.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/sql.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/sql_template.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/sql_toolset.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/syncasync.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/check_pypi.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/cli.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/config.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/__init__.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/animations.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/command_agent.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/memory.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/prompts.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/testing_agent.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/append.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/build.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/create_datafile.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/execute_query.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/explore.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/mock.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/plan.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/preview_datafile.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/test.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/build.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/build_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/cicd.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/cli.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/config.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/connection.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/copy.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/create.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/build.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/build_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/diff.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/fixture.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/format_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/playground.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/pull.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datasource.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/deployment.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/deployment_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/deprecations.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/dev_server.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/endpoint.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/exceptions.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/feedback_manager.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/info.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/infra.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/job.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/llm.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/llm_utils.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/local.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/local_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/login.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/login_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/logout.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/mock.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/mock_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/open.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/pipe.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/project.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/regions.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/secret.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/secret_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/shell.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/sink.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/table.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/telemetry.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/test.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/test_common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/watch.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/workspace.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/workspace_members.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/datasource.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/fmt.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/regions.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/tag.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tornado_template.py +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird.egg-info/SOURCES.txt +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird.egg-info/dependency_links.txt +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird.egg-info/entry_points.txt +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird.egg-info/requires.txt +0 -0
- {tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird.egg-info/top_level.txt +0 -0
|
@@ -569,6 +569,7 @@ class TinyB:
|
|
|
569
569
|
populate_condition: Optional[str] = None,
|
|
570
570
|
truncate: bool = True,
|
|
571
571
|
unlink_on_populate_error: bool = False,
|
|
572
|
+
on_demand_compute: bool = False,
|
|
572
573
|
):
|
|
573
574
|
params: Dict[str, Any] = {
|
|
574
575
|
"truncate": "true" if truncate else "false",
|
|
@@ -578,6 +579,8 @@ class TinyB:
|
|
|
578
579
|
params.update({"populate_subset": populate_subset})
|
|
579
580
|
if populate_condition:
|
|
580
581
|
params.update({"populate_condition": populate_condition})
|
|
582
|
+
if on_demand_compute:
|
|
583
|
+
params.update({"on_demand_compute": "true"})
|
|
581
584
|
response = await self._req(
|
|
582
585
|
f"/v0/pipes/{pipe_name}/nodes/{node_name}/population?{urlencode(params)}", method="POST"
|
|
583
586
|
)
|
|
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
|
|
|
4
4
|
__url__ = 'https://www.tinybird.co/docs/forward/commands'
|
|
5
5
|
__author__ = 'Tinybird'
|
|
6
6
|
__author_email__ = 'support@tinybird.co'
|
|
7
|
-
__version__ = '0.0.1.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '0.0.1.dev266'
|
|
8
|
+
__revision__ = 'b4193e9'
|
|
@@ -547,12 +547,15 @@ class TinyB:
|
|
|
547
547
|
populate_subset: bool = False,
|
|
548
548
|
populate_condition: Optional[str] = None,
|
|
549
549
|
truncate: bool = True,
|
|
550
|
+
on_demand_compute: bool = False,
|
|
550
551
|
):
|
|
551
552
|
params: Dict[str, Any] = {"truncate": "true" if truncate else "false", "unlink_on_populate_error": "false"}
|
|
552
553
|
if populate_subset:
|
|
553
554
|
params.update({"populate_subset": populate_subset})
|
|
554
555
|
if populate_condition:
|
|
555
556
|
params.update({"populate_condition": populate_condition})
|
|
557
|
+
if on_demand_compute:
|
|
558
|
+
params.update({"on_demand_compute": "true"})
|
|
556
559
|
response = self._req(f"/v0/pipes/{pipe_name}/nodes/{node_name}/population?{urlencode(params)}", method="POST")
|
|
557
560
|
return response
|
|
558
561
|
|
|
@@ -867,9 +870,15 @@ class TinyB:
|
|
|
867
870
|
data={"operation": "change_role", "users": users, "new_role": role},
|
|
868
871
|
)
|
|
869
872
|
|
|
870
|
-
def workspace(
|
|
871
|
-
|
|
872
|
-
|
|
873
|
+
def workspace(
|
|
874
|
+
self, workspace_id: str, with_token: bool = False, with_organization: bool = False, version: str = "v0"
|
|
875
|
+
):
|
|
876
|
+
params = {}
|
|
877
|
+
if with_token:
|
|
878
|
+
params["with_token"] = "true"
|
|
879
|
+
if with_organization:
|
|
880
|
+
params["with_organization"] = "true"
|
|
881
|
+
return self._req(f"/{version}/workspaces/{workspace_id}?{urlencode(params)}")
|
|
873
882
|
|
|
874
883
|
def workspace_info(self, version: str = "v0") -> Dict[str, Any]:
|
|
875
884
|
return self._req(f"/{version}/workspace")
|
|
@@ -877,6 +886,12 @@ class TinyB:
|
|
|
877
886
|
def organization(self, organization_id: str):
|
|
878
887
|
return self._req(f"/v0/organizations/{organization_id}")
|
|
879
888
|
|
|
889
|
+
def organization_limits(self, organization_id: str):
|
|
890
|
+
return self._req(f"/v1/billing/{organization_id}/limits")
|
|
891
|
+
|
|
892
|
+
def organization_subscription(self, organization_id: str):
|
|
893
|
+
return self._req(f"/v1/billing/{organization_id}/subscription")
|
|
894
|
+
|
|
880
895
|
def create_organization(
|
|
881
896
|
self,
|
|
882
897
|
name: str,
|
|
@@ -3,6 +3,7 @@ import shlex
|
|
|
3
3
|
import subprocess
|
|
4
4
|
import sys
|
|
5
5
|
import urllib.parse
|
|
6
|
+
import uuid
|
|
6
7
|
from functools import partial
|
|
7
8
|
from pathlib import Path
|
|
8
9
|
from typing import Any, Optional
|
|
@@ -19,7 +20,7 @@ from tinybird.tb.modules.agent.animations import ThinkingAnimation
|
|
|
19
20
|
from tinybird.tb.modules.agent.banner import display_banner
|
|
20
21
|
from tinybird.tb.modules.agent.command_agent import CommandAgent
|
|
21
22
|
from tinybird.tb.modules.agent.memory import clear_history, clear_messages, load_messages, save_messages
|
|
22
|
-
from tinybird.tb.modules.agent.models import create_model
|
|
23
|
+
from tinybird.tb.modules.agent.models import create_model
|
|
23
24
|
from tinybird.tb.modules.agent.prompts import agent_system_prompt, load_custom_project_rules, resources_prompt
|
|
24
25
|
from tinybird.tb.modules.agent.testing_agent import TestingAgent
|
|
25
26
|
from tinybird.tb.modules.agent.tools.analyze import analyze_file, analyze_url
|
|
@@ -256,12 +257,12 @@ class TinybirdAgent:
|
|
|
256
257
|
click.echo(result.output)
|
|
257
258
|
self._echo_usage(config, result)
|
|
258
259
|
|
|
259
|
-
async def run_iter(self, user_prompt: str, config: dict[str, Any]) -> None:
|
|
260
|
+
async def run_iter(self, user_prompt: str, config: dict[str, Any], model: Any) -> None:
|
|
260
261
|
user_prompt = f"{user_prompt}\n\n{load_custom_project_rules(self.project.folder)}"
|
|
261
262
|
self.thinking_animation.start()
|
|
262
263
|
deps = self._build_agent_deps(config)
|
|
263
264
|
|
|
264
|
-
async with self.agent.iter(user_prompt, deps=deps, message_history=self.messages) as agent_run:
|
|
265
|
+
async with self.agent.iter(user_prompt, deps=deps, message_history=self.messages, model=model) as agent_run:
|
|
265
266
|
async for node in agent_run:
|
|
266
267
|
if hasattr(node, "model_response"):
|
|
267
268
|
for _i, part in enumerate(node.model_response.parts):
|
|
@@ -281,19 +282,32 @@ class TinybirdAgent:
|
|
|
281
282
|
self._echo_usage(config, agent_run.result)
|
|
282
283
|
|
|
283
284
|
def _echo_usage(self, config: dict[str, Any], result: AgentRunResult) -> None:
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
285
|
+
try:
|
|
286
|
+
client = _get_tb_client(config["user_token"], config["host"])
|
|
287
|
+
workspace_id = config.get("id", "")
|
|
288
|
+
workspace = client.workspace(workspace_id, with_organization=True, version="v1")
|
|
289
|
+
limits_data = client.organization_limits(workspace["organization"]["id"])
|
|
290
|
+
ai_requests_limits = limits_data.get("limits", {}).get("ai_requests", {})
|
|
291
|
+
current_ai_requests = ai_requests_limits.get("quantity", 0)
|
|
292
|
+
max_ai_requests = ai_requests_limits.get("max", 0)
|
|
293
|
+
if not max_ai_requests:
|
|
294
|
+
return
|
|
295
|
+
remaining_requests = max(max_ai_requests - current_ai_requests, 0)
|
|
296
|
+
warning_threshold = max_ai_requests * 0.8
|
|
297
|
+
if current_ai_requests >= warning_threshold:
|
|
298
|
+
message_color = FeedbackManager.warning
|
|
299
|
+
else:
|
|
300
|
+
message_color = FeedbackManager.gray
|
|
301
|
+
|
|
302
|
+
current_ai_requests = min(max_ai_requests, current_ai_requests)
|
|
303
|
+
|
|
304
|
+
click.echo(
|
|
305
|
+
message_color(
|
|
306
|
+
message=f"{remaining_requests} agent requests left ({current_ai_requests}/{max_ai_requests}). This message is informative. Limits will be enforced soon."
|
|
307
|
+
)
|
|
292
308
|
)
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
click.echo(f"Total tokens: {total_tokens}")
|
|
296
|
-
click.echo(f"Cost: ${cost:.6f}")
|
|
309
|
+
except Exception:
|
|
310
|
+
pass
|
|
297
311
|
|
|
298
312
|
|
|
299
313
|
def run_agent(
|
|
@@ -426,7 +440,9 @@ def run_agent(
|
|
|
426
440
|
elif user_input.strip() == "":
|
|
427
441
|
continue
|
|
428
442
|
else:
|
|
429
|
-
|
|
443
|
+
run_id = str(uuid.uuid4())
|
|
444
|
+
model = create_model(user_token, host, workspace_id, run_id=run_id)
|
|
445
|
+
asyncio.run(agent.run_iter(user_input, config, model))
|
|
430
446
|
except AgentRunCancelled:
|
|
431
447
|
click.echo(FeedbackManager.info(message="User cancelled the operation"))
|
|
432
448
|
agent.add_message(
|
|
@@ -86,46 +86,19 @@ def display_banner():
|
|
|
86
86
|
color_idx = 16 + (36 * r_idx) + (6 * g_idx) + b_idx
|
|
87
87
|
return f"\033[38;5;{color_idx}m"
|
|
88
88
|
|
|
89
|
-
# Define
|
|
90
|
-
|
|
91
|
-
end_color = [100, 190, 190] # Light turquoise (balanced green and blue)
|
|
89
|
+
# Define solid color (corresponding to #27f795)
|
|
90
|
+
solid_color = [39, 247, 149] # #27f795 in RGB
|
|
92
91
|
|
|
93
|
-
# Print each line with
|
|
92
|
+
# Print each line with solid color for all terminals
|
|
94
93
|
for line in banner:
|
|
95
94
|
colored_line = ""
|
|
95
|
+
color_code = rgb_to_ansi(*solid_color, use_truecolor=capabilities["truecolor"]) # type: ignore
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
for char in line:
|
|
103
|
-
if char == " ":
|
|
104
|
-
colored_line += char
|
|
105
|
-
continue
|
|
106
|
-
|
|
107
|
-
# Calculate smooth gradient position (0.0 to 1.0)
|
|
108
|
-
if non_space_chars > 1:
|
|
109
|
-
gradient_position = char_count / (non_space_chars - 1)
|
|
110
|
-
else:
|
|
111
|
-
gradient_position = 0
|
|
112
|
-
|
|
113
|
-
# Interpolate color
|
|
114
|
-
current_rgb = interpolate_color(start_color, end_color, gradient_position)
|
|
115
|
-
color_code = rgb_to_ansi(*current_rgb, use_truecolor=True) # type: ignore
|
|
116
|
-
|
|
97
|
+
for char in line:
|
|
98
|
+
if char == " ":
|
|
99
|
+
colored_line += char
|
|
100
|
+
else:
|
|
117
101
|
colored_line += f"{color_code}{char}"
|
|
118
|
-
char_count += 1
|
|
119
|
-
else:
|
|
120
|
-
# Use solid color for limited terminals (like macOS Terminal)
|
|
121
|
-
solid_color = start_color # Use the deep teal consistently
|
|
122
|
-
color_code = rgb_to_ansi(*solid_color, use_truecolor=False) # type: ignore
|
|
123
|
-
|
|
124
|
-
for char in line:
|
|
125
|
-
if char == " ":
|
|
126
|
-
colored_line += char
|
|
127
|
-
else:
|
|
128
|
-
colored_line += f"{color_code}{char}"
|
|
129
102
|
|
|
130
103
|
click.echo(colored_line + reset)
|
|
131
104
|
click.echo()
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
1
3
|
from anthropic import AsyncAnthropic
|
|
2
4
|
from httpx import AsyncClient
|
|
3
5
|
from pydantic_ai.models.anthropic import AnthropicModel, AnthropicModelName
|
|
@@ -9,11 +11,17 @@ def create_model(
|
|
|
9
11
|
base_url: str,
|
|
10
12
|
workspace_id: str,
|
|
11
13
|
model: AnthropicModelName = "claude-4-sonnet-20250514",
|
|
14
|
+
run_id: Optional[str] = None,
|
|
12
15
|
):
|
|
16
|
+
default_headers = {}
|
|
17
|
+
if run_id:
|
|
18
|
+
default_headers["X-Run-Id"] = run_id
|
|
19
|
+
|
|
13
20
|
client = AsyncAnthropic(
|
|
14
21
|
base_url=base_url,
|
|
15
22
|
http_client=AsyncClient(params={"token": token, "workspace_id": workspace_id}),
|
|
16
23
|
auth_token=token,
|
|
24
|
+
default_headers=default_headers,
|
|
17
25
|
)
|
|
18
26
|
return AnthropicModel(
|
|
19
27
|
model_name=model,
|
|
@@ -87,6 +87,12 @@ def materialization_ls(ctx: click.Context, match: str, format_: str):
|
|
|
87
87
|
default=False,
|
|
88
88
|
help="Waits for populate jobs to finish, showing a progress bar. Disabled by default.",
|
|
89
89
|
)
|
|
90
|
+
@click.option(
|
|
91
|
+
"--on-demand-compute",
|
|
92
|
+
is_flag=True,
|
|
93
|
+
default=False,
|
|
94
|
+
help="Use on-demand compute instances for the populate job.",
|
|
95
|
+
)
|
|
90
96
|
@click.pass_context
|
|
91
97
|
def pipe_populate(
|
|
92
98
|
ctx: click.Context,
|
|
@@ -95,6 +101,7 @@ def pipe_populate(
|
|
|
95
101
|
sql_condition: str,
|
|
96
102
|
truncate: bool,
|
|
97
103
|
wait: bool,
|
|
104
|
+
on_demand_compute: bool,
|
|
98
105
|
):
|
|
99
106
|
"""Populate the result of a Materialized Node into the target materialized view"""
|
|
100
107
|
|
|
@@ -121,7 +128,9 @@ def pipe_populate(
|
|
|
121
128
|
|
|
122
129
|
node = materialized_ids[0]
|
|
123
130
|
|
|
124
|
-
response = cl.populate_node(
|
|
131
|
+
response = cl.populate_node(
|
|
132
|
+
pipe_name, node, populate_condition=sql_condition, truncate=truncate, on_demand_compute=on_demand_compute
|
|
133
|
+
)
|
|
125
134
|
if "job" not in response:
|
|
126
135
|
raise CLIPipeException(response)
|
|
127
136
|
|
|
@@ -163,7 +163,7 @@ def create(ctx: Context) -> None:
|
|
|
163
163
|
|
|
164
164
|
* Static Tokens do not have a TTL and can have any valid scope (ADMIN, TOKENS, or ORG_DATASOURCES:READ).
|
|
165
165
|
|
|
166
|
-
* JWT tokens have a TTL and can
|
|
166
|
+
* JWT tokens have a TTL and can have PIPES:READ and DATASOURCES:READ scopes. Their main use case is allow your users to call your endpoints or read datasources without exposing your API key.
|
|
167
167
|
|
|
168
168
|
|
|
169
169
|
Examples:
|
|
@@ -173,6 +173,8 @@ def create(ctx: Context) -> None:
|
|
|
173
173
|
tb token create static my_static_token --scope TOKENS
|
|
174
174
|
|
|
175
175
|
tb token create jwt my_jwt_token --ttl 1h --scope PIPES:READ --resource my_pipe
|
|
176
|
+
|
|
177
|
+
tb token create jwt my_jwt_token --ttl 1h --scope DATASOURCES:READ --resource my_datasource --filter "column = 'value'"
|
|
176
178
|
"""
|
|
177
179
|
|
|
178
180
|
|
|
@@ -182,16 +184,21 @@ def create(ctx: Context) -> None:
|
|
|
182
184
|
@click.option(
|
|
183
185
|
"--scope",
|
|
184
186
|
multiple=True,
|
|
185
|
-
type=click.Choice(["PIPES:READ"]),
|
|
187
|
+
type=click.Choice(["PIPES:READ", "DATASOURCES:READ"]),
|
|
186
188
|
required=True,
|
|
187
|
-
help="Scope of the token (only PIPES:READ
|
|
189
|
+
help="Scope of the token (only PIPES:READ and DATASOURCES:READ are allowed for JWT tokens)",
|
|
188
190
|
)
|
|
189
191
|
@click.option("--resource", multiple=True, required=True, help="Resource associated with the scope")
|
|
190
192
|
@click.option(
|
|
191
193
|
"--fixed-params", multiple=True, help="Fixed parameters in key=value format, multiple values separated by commas"
|
|
192
194
|
)
|
|
195
|
+
@click.option(
|
|
196
|
+
"--filter",
|
|
197
|
+
multiple=True,
|
|
198
|
+
help="SQL filter to apply when reading a datasource (only applicable for DATASOURCES:READ scope)",
|
|
199
|
+
)
|
|
193
200
|
@click.pass_context
|
|
194
|
-
def create_jwt_token(ctx: Context, name: str, ttl: timedelta, scope, resource, fixed_params) -> None:
|
|
201
|
+
def create_jwt_token(ctx: Context, name: str, ttl: timedelta, scope, resource, fixed_params, filter) -> None:
|
|
195
202
|
"""Create a JWT token with a TTL specify."""
|
|
196
203
|
|
|
197
204
|
obj: Dict[str, Any] = ctx.ensure_object(dict)
|
|
@@ -205,6 +212,10 @@ def create_jwt_token(ctx: Context, name: str, ttl: timedelta, scope, resource, f
|
|
|
205
212
|
if fixed_params and len(fixed_params) > len(scope):
|
|
206
213
|
raise CLITokenException(FeedbackManager.error_number_of_fixed_params_and_resources_mismatch())
|
|
207
214
|
|
|
215
|
+
# Ensure the number of filters does not exceed the number of scope/resource pairs
|
|
216
|
+
if filter and len(filter) > len(scope):
|
|
217
|
+
raise CLITokenException("The number of SQL filters must match the number of scopes")
|
|
218
|
+
|
|
208
219
|
# Parse fixed params
|
|
209
220
|
parsed_fixed_params = parse_fixed_params(fixed_params) if fixed_params else []
|
|
210
221
|
|
|
@@ -213,15 +224,24 @@ def create_jwt_token(ctx: Context, name: str, ttl: timedelta, scope, resource, f
|
|
|
213
224
|
for i, params in enumerate(parsed_fixed_params):
|
|
214
225
|
fixed_params_list[i] = params
|
|
215
226
|
|
|
227
|
+
# Create a list of filters for each scope/resource pair, defaulting to None if not provided
|
|
228
|
+
filters_list: List[Optional[str]] = [None] * len(scope)
|
|
229
|
+
for i, f in enumerate(filter):
|
|
230
|
+
filters_list[i] = f
|
|
231
|
+
|
|
216
232
|
scopes = []
|
|
217
|
-
for sc, res, fparams in zip(scope, resource, fixed_params_list):
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
233
|
+
for sc, res, fparams, filter in zip(scope, resource, fixed_params_list, filters_list):
|
|
234
|
+
scope_data = {
|
|
235
|
+
"type": sc,
|
|
236
|
+
"resource": res,
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if sc == "PIPES:READ" and fparams:
|
|
240
|
+
scope_data["fixed_params"] = fparams
|
|
241
|
+
elif sc == "DATASOURCES:READ" and filter:
|
|
242
|
+
scope_data["filter"] = filter
|
|
243
|
+
|
|
244
|
+
scopes.append(scope_data)
|
|
225
245
|
|
|
226
246
|
try:
|
|
227
247
|
response = client.create_jwt_token(name, expiration_time, scopes)
|
|
@@ -258,6 +278,7 @@ class DynamicOptionsCommand(click.Command):
|
|
|
258
278
|
# Options
|
|
259
279
|
dynamic_options_help += "Options:\n"
|
|
260
280
|
dynamic_options_help += f" --scope [{','.join(valid_scopes)}] Scope for the token [Required]\n"
|
|
281
|
+
dynamic_options_help += " --resource TEXT Resource you want to associate the scope with\n"
|
|
261
282
|
dynamic_options_help += " -h, --help Show this message and exit.\n"
|
|
262
283
|
|
|
263
284
|
return dynamic_options_help
|
|
@@ -602,6 +602,12 @@ def check(filenames: List[str], debug: bool) -> None:
|
|
|
602
602
|
help="The user token is required for sharing a datasource that contains the SHARED_WITH entry.",
|
|
603
603
|
type=click.types.STRING,
|
|
604
604
|
)
|
|
605
|
+
@click.option(
|
|
606
|
+
"--on-demand-compute",
|
|
607
|
+
is_flag=True,
|
|
608
|
+
default=False,
|
|
609
|
+
help="Use on-demand compute instances for populate jobs. Only effective when used with --populate.",
|
|
610
|
+
)
|
|
605
611
|
@click.pass_context
|
|
606
612
|
@coro
|
|
607
613
|
async def push(
|
|
@@ -633,6 +639,7 @@ async def push(
|
|
|
633
639
|
check_requests_from_main: bool,
|
|
634
640
|
folder: str,
|
|
635
641
|
user_token: Optional[str],
|
|
642
|
+
on_demand_compute: bool,
|
|
636
643
|
) -> None:
|
|
637
644
|
"""Push files to Tinybird."""
|
|
638
645
|
|
|
@@ -674,6 +681,7 @@ async def push(
|
|
|
674
681
|
config=CLIConfig.get_project_config(),
|
|
675
682
|
user_token=user_token,
|
|
676
683
|
is_internal=is_internal,
|
|
684
|
+
on_demand_compute=on_demand_compute,
|
|
677
685
|
)
|
|
678
686
|
|
|
679
687
|
|
|
@@ -234,6 +234,12 @@ async def pipe_ls(ctx: Context, match: str, format_: str):
|
|
|
234
234
|
default=False,
|
|
235
235
|
help="Waits for populate jobs to finish, showing a progress bar. Disabled by default.",
|
|
236
236
|
)
|
|
237
|
+
@click.option(
|
|
238
|
+
"--on-demand-compute",
|
|
239
|
+
is_flag=True,
|
|
240
|
+
default=False,
|
|
241
|
+
help="Use on-demand compute instances for the populate job.",
|
|
242
|
+
)
|
|
237
243
|
@click.pass_context
|
|
238
244
|
@coro
|
|
239
245
|
async def pipe_populate(
|
|
@@ -244,6 +250,7 @@ async def pipe_populate(
|
|
|
244
250
|
truncate: bool,
|
|
245
251
|
unlink_on_populate_error: bool,
|
|
246
252
|
wait: bool,
|
|
253
|
+
on_demand_compute: bool,
|
|
247
254
|
):
|
|
248
255
|
"""Populate the result of a Materialized Node into the target Materialized View"""
|
|
249
256
|
cl = create_tb_client(ctx)
|
|
@@ -270,6 +277,7 @@ async def pipe_populate(
|
|
|
270
277
|
populate_condition=sql_condition,
|
|
271
278
|
truncate=truncate,
|
|
272
279
|
unlink_on_populate_error=unlink_on_populate_error,
|
|
280
|
+
on_demand_compute=on_demand_compute,
|
|
273
281
|
)
|
|
274
282
|
if "job" not in response:
|
|
275
283
|
raise CLIPipeException(response)
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/create_datafile.py
RENAMED
|
File without changes
|
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/deploy_check.py
RENAMED
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/diff_resource.py
RENAMED
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/execute_query.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/preview_datafile.py
RENAMED
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/request_endpoint.py
RENAMED
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/agent/tools/run_command.py
RENAMED
|
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-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/build_common.py
RENAMED
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/build_datasource.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/format_common.py
RENAMED
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/format_datasource.py
RENAMED
|
File without changes
|
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/datafile/pipe_checker.py
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb/modules/tinyunit/tinyunit_lib.py
RENAMED
|
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-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/tinyunit/tinyunit.py
RENAMED
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
{tinybird-0.0.1.dev264 → tinybird-0.0.1.dev266}/tinybird/tb_cli_modules/workspace_members.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|