tinybird 3.5.3.dev0__tar.gz → 3.5.4__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-3.5.3.dev0 → tinybird-3.5.4}/PKG-INFO +11 -1
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/common.py +2 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/service_datasources.py +92 -27
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/sql_toolset.py +32 -2
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/syncasync.py +27 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/__cli__.py +2 -2
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/client.py +4 -1
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/connection_kafka.py +2 -2
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/PKG-INFO +11 -1
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/top_level.txt +2 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/setup.cfg +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/__cli__.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/ch_utils/engine.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/check_pypi.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/client.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/config.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/context.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/exceptions.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/parse_connection.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/parse_datasource.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/parse_pipe.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datatypes.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/feedback_manager.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/git_settings.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/prompts.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/sql.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/sql_template.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/check_pypi.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/cli.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/config.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/__init__.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/agent.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/animations.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/banner.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/command_agent.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/compactor.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/explore_agent.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/file_agent.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/memory.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/mock_agent.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/models.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/prompts.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/testing_agent.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/append.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/build.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/datafile.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/execute_query.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/file.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/mock.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/plan.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/secret.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/test.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/utils.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/branch.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/build.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/build_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/cicd.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/cli.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/config.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/connection.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/connection_s3.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/copy.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/create.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/build.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/build_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/diff.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/fixture.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/format_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/format_connection.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/playground.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/pull.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datasource.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/deployment.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/deployment_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/deprecations.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/dev_server.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/endpoint.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/exceptions.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/feedback_manager.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/fmt.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/info.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/infra.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/job.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/job_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/llm.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/llm_utils.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/local.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/local_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/local_logs.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/login.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/login_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/logout.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/materialization.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/mock.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/mock_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/open.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/pipe.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/project.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/project_commands.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/regions.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/secret.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/secret_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/shell.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/sink.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/table.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/telemetry.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/test.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/test_common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/token.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/watch.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/workspace.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/workspace_members.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/cli.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/datasource.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/fmt.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/pipe.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/regions.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/tag.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tornado_template.py +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/SOURCES.txt +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/dependency_links.txt +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/entry_points.txt +0 -0
- {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/requires.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: tinybird
|
|
3
|
-
Version: 3.5.
|
|
3
|
+
Version: 3.5.4
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/forward/commands
|
|
6
6
|
Author: Tinybird
|
|
@@ -57,6 +57,16 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
|
|
|
57
57
|
Changelog
|
|
58
58
|
----------
|
|
59
59
|
|
|
60
|
+
3.5.4
|
|
61
|
+
*******
|
|
62
|
+
|
|
63
|
+
- `Fixed` Pulling vendored data sources from a Classic workspace to migrate to Forward now includes all workspaces in SHARED_WITH.
|
|
64
|
+
|
|
65
|
+
3.5.3
|
|
66
|
+
*******
|
|
67
|
+
|
|
68
|
+
- `Fixed` Support `SASL_PLAINTEXT` as a Kafka security protocol, fixing connections to brokers that use SASL authentication without TLS (e.g. WarpStream).
|
|
69
|
+
|
|
60
70
|
3.5.2
|
|
61
71
|
*******
|
|
62
72
|
|
|
@@ -559,6 +559,8 @@ class Datafile:
|
|
|
559
559
|
raise DatafileValidationError(
|
|
560
560
|
f"Some Kafka params have been provided, but the following required ones are missing: {missing}"
|
|
561
561
|
)
|
|
562
|
+
if "kafka_group_id" in node and not str(node["kafka_group_id"]).strip():
|
|
563
|
+
raise DatafileValidationError("KAFKA_GROUP_ID cannot be empty")
|
|
562
564
|
# Validate S3 params
|
|
563
565
|
if any(param in node for param in BLOB_STORAGE_PARAMS):
|
|
564
566
|
if missing := [param for param in REQUIRED_BLOB_STORAGE_PARAMS if param not in node]:
|
|
@@ -456,33 +456,6 @@ def get_tinybird_service_datasources() -> List[Dict[str, Any]]:
|
|
|
456
456
|
{"name": "feature", "type": "String"},
|
|
457
457
|
],
|
|
458
458
|
},
|
|
459
|
-
{
|
|
460
|
-
"name": "tinybird.llm_usage",
|
|
461
|
-
"description": "LLM usage metrics from Tinybird AI features including token consumption, costs, and model usage for each request in the workspace.",
|
|
462
|
-
"dateColumn": "start_time",
|
|
463
|
-
"engine": {
|
|
464
|
-
"engine": "MergeTree",
|
|
465
|
-
"sorting_key": "workspace_id, start_time, user_email, request_id",
|
|
466
|
-
"partition_key": "toYYYYMM(start_time)",
|
|
467
|
-
},
|
|
468
|
-
"columns": [
|
|
469
|
-
{"name": "start_time", "type": "DateTime"},
|
|
470
|
-
{"name": "end_time", "type": "DateTime"},
|
|
471
|
-
{"name": "organization_id", "type": "String"},
|
|
472
|
-
{"name": "organization_name", "type": "String"},
|
|
473
|
-
{"name": "workspace_id", "type": "String"},
|
|
474
|
-
{"name": "workspace_name", "type": "String"},
|
|
475
|
-
{"name": "user_email", "type": "String"},
|
|
476
|
-
{"name": "request_id", "type": "String"},
|
|
477
|
-
{"name": "prompt_tokens", "type": "UInt32"},
|
|
478
|
-
{"name": "completion_tokens", "type": "UInt32"},
|
|
479
|
-
{"name": "total_tokens", "type": "UInt32"},
|
|
480
|
-
{"name": "duration", "type": "Float32"},
|
|
481
|
-
{"name": "cost", "type": "Float32"},
|
|
482
|
-
{"name": "origin", "type": "String"},
|
|
483
|
-
{"name": "feature", "type": "String"},
|
|
484
|
-
],
|
|
485
|
-
},
|
|
486
459
|
{
|
|
487
460
|
"name": "tinybird.query_validator_log",
|
|
488
461
|
"description": "Log of failed queries executions in the next available ClickHouse version and their results.",
|
|
@@ -537,6 +510,26 @@ def get_tinybird_service_datasources() -> List[Dict[str, Any]]:
|
|
|
537
510
|
{"name": "rate_limited", "type": "UInt8"},
|
|
538
511
|
],
|
|
539
512
|
},
|
|
513
|
+
{
|
|
514
|
+
"name": "tinybird.realtime_ingestion_mv",
|
|
515
|
+
"description": "Per-second adjusted MB/s throughput per workspace for realtime ingestion (HFI and Kafka).",
|
|
516
|
+
"dateColumn": "second_slot",
|
|
517
|
+
"engine": {
|
|
518
|
+
"engine": "AggregatingMergeTree",
|
|
519
|
+
"sorting_key": "workspace_id, datasource_id, type, second_slot",
|
|
520
|
+
"partition_key": "toYYYYMM(second_slot)",
|
|
521
|
+
},
|
|
522
|
+
"columns": [
|
|
523
|
+
{"name": "second_slot", "type": "DateTime"},
|
|
524
|
+
{"name": "type", "type": "LowCardinality(String)"},
|
|
525
|
+
{"name": "organization_id", "type": "String"},
|
|
526
|
+
{"name": "workspace_id", "type": "String"},
|
|
527
|
+
{"name": "datasource_id", "type": "String"},
|
|
528
|
+
{"name": "total_mbps", "type": "SimpleAggregateFunction(sum, Float64)"},
|
|
529
|
+
{"name": "mbs_ingestion_block", "type": "SimpleAggregateFunction(min, Float64)"},
|
|
530
|
+
{"name": "flush_time", "type": "SimpleAggregateFunction(min, Float64)"},
|
|
531
|
+
],
|
|
532
|
+
},
|
|
540
533
|
]
|
|
541
534
|
|
|
542
535
|
|
|
@@ -1033,6 +1026,78 @@ def get_organization_service_datasources() -> List[Dict[str, Any]]:
|
|
|
1033
1026
|
{"name": "feature", "type": "String"},
|
|
1034
1027
|
],
|
|
1035
1028
|
},
|
|
1029
|
+
{
|
|
1030
|
+
"name": "organization.backups",
|
|
1031
|
+
"description": "Contains backup information for dedicated clusters in the organization.",
|
|
1032
|
+
"dateColumn": "end_time",
|
|
1033
|
+
"engine": {
|
|
1034
|
+
"engine": "ReplacingMergeTree",
|
|
1035
|
+
"sorting_key": "organization_id, cluster, end_time",
|
|
1036
|
+
"partition_key": "toYYYYMM(end_time)",
|
|
1037
|
+
},
|
|
1038
|
+
"columns": [
|
|
1039
|
+
{"name": "organization_id", "type": "String"},
|
|
1040
|
+
{"name": "cluster", "type": "LowCardinality(String)"},
|
|
1041
|
+
{"name": "backup_id", "type": "String"},
|
|
1042
|
+
{"name": "query_id", "type": "String"},
|
|
1043
|
+
{"name": "start_time", "type": "DateTime"},
|
|
1044
|
+
{"name": "end_time", "type": "DateTime"},
|
|
1045
|
+
{"name": "status", "type": "LowCardinality(String)"},
|
|
1046
|
+
{"name": "total_size", "type": "UInt64"},
|
|
1047
|
+
{"name": "compressed_size", "type": "UInt64"},
|
|
1048
|
+
{"name": "uncompressed_size", "type": "UInt64"},
|
|
1049
|
+
{"name": "is_full_backup", "type": "Bool"},
|
|
1050
|
+
],
|
|
1051
|
+
},
|
|
1052
|
+
{
|
|
1053
|
+
"name": "organization.private_link",
|
|
1054
|
+
"description": "Private Link costs pre-joined with organization info for observability. Filtered for AmazonVPC/VpcEndpoint and AWSELB products.",
|
|
1055
|
+
"dateColumn": "timestamp",
|
|
1056
|
+
"engine": {
|
|
1057
|
+
"engine": "MergeTree",
|
|
1058
|
+
"sorting_key": "organization_id, timestamp",
|
|
1059
|
+
"partition_key": "toYYYYMM(timestamp)",
|
|
1060
|
+
},
|
|
1061
|
+
"columns": [
|
|
1062
|
+
{"name": "timestamp", "type": "DateTime"},
|
|
1063
|
+
{"name": "region", "type": "String"},
|
|
1064
|
+
{"name": "organization_id", "type": "String"},
|
|
1065
|
+
{"name": "organization_name", "type": "String"},
|
|
1066
|
+
{"name": "usage_start_date", "type": "Nullable(DateTime)"},
|
|
1067
|
+
{"name": "usage_end_date", "type": "Nullable(DateTime)"},
|
|
1068
|
+
{"name": "product_code", "type": "Nullable(String)"},
|
|
1069
|
+
{"name": "usage_type", "type": "Nullable(String)"},
|
|
1070
|
+
{"name": "operation", "type": "Nullable(String)"},
|
|
1071
|
+
{"name": "usage_amount", "type": "Nullable(Float32)"},
|
|
1072
|
+
{"name": "cost", "type": "Nullable(Float32)"},
|
|
1073
|
+
{"name": "blended_cost", "type": "Nullable(Float32)"},
|
|
1074
|
+
{"name": "currency", "type": "Nullable(String)"},
|
|
1075
|
+
{"name": "product_name", "type": "Nullable(String)"},
|
|
1076
|
+
{"name": "service_name", "type": "Nullable(String)"},
|
|
1077
|
+
{"name": "product_family", "type": "Nullable(String)"},
|
|
1078
|
+
{"name": "type", "type": "Nullable(String)"},
|
|
1079
|
+
],
|
|
1080
|
+
},
|
|
1081
|
+
{
|
|
1082
|
+
"name": "organization.realtime_ingestion_mv",
|
|
1083
|
+
"description": "Per-second adjusted MB/s throughput per organization for realtime ingestion (HFI and Kafka).",
|
|
1084
|
+
"dateColumn": "second_slot",
|
|
1085
|
+
"engine": {
|
|
1086
|
+
"engine": "AggregatingMergeTree",
|
|
1087
|
+
"sorting_key": "organization_id, workspace_id, datasource_id, type, second_slot",
|
|
1088
|
+
"partition_key": "toYYYYMM(second_slot)",
|
|
1089
|
+
},
|
|
1090
|
+
"columns": [
|
|
1091
|
+
{"name": "second_slot", "type": "DateTime"},
|
|
1092
|
+
{"name": "type", "type": "LowCardinality(String)"},
|
|
1093
|
+
{"name": "organization_id", "type": "String"},
|
|
1094
|
+
{"name": "workspace_id", "type": "String"},
|
|
1095
|
+
{"name": "datasource_id", "type": "String"},
|
|
1096
|
+
{"name": "total_mbps", "type": "SimpleAggregateFunction(sum, Float64)"},
|
|
1097
|
+
{"name": "mbs_ingestion_block", "type": "SimpleAggregateFunction(min, Float64)"},
|
|
1098
|
+
{"name": "flush_time", "type": "SimpleAggregateFunction(min, Float64)"},
|
|
1099
|
+
],
|
|
1100
|
+
},
|
|
1036
1101
|
]
|
|
1037
1102
|
|
|
1038
1103
|
|
|
@@ -35,7 +35,7 @@ class InvalidFunction(ValueError):
|
|
|
35
35
|
super().__init__(self.msg)
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
class
|
|
38
|
+
class MissingResource(ValueError):
|
|
39
39
|
def __init__(self, database: str, table: str, default_database: str = ""):
|
|
40
40
|
if default_database and database == default_database:
|
|
41
41
|
database = ""
|
|
@@ -88,6 +88,36 @@ class ColumnInfo:
|
|
|
88
88
|
is_primary_key: bool = False
|
|
89
89
|
|
|
90
90
|
|
|
91
|
+
@dataclass
|
|
92
|
+
class MaterializedViewTarget:
|
|
93
|
+
database: Optional[str]
|
|
94
|
+
table: str
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def parse_materialized_view_target(create_table_query: str) -> Optional[MaterializedViewTarget]:
|
|
98
|
+
"""
|
|
99
|
+
Extract target table info from a CREATE MATERIALIZED VIEW statement.
|
|
100
|
+
|
|
101
|
+
Parses statements like:
|
|
102
|
+
CREATE MATERIALIZED VIEW db.view TO target_db.target_table AS SELECT...
|
|
103
|
+
CREATE MATERIALIZED VIEW db.view TO `target_db`.`target_table` AS SELECT...
|
|
104
|
+
CREATE MATERIALIZED VIEW db.view TO `target_db`.`target_table` (col1 Type1, col2 Nullable(DateTime64(3))) AS SELECT...
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
MaterializedViewTarget with database (optional) and table,
|
|
108
|
+
or None if the query is not a CREATE MATERIALIZED VIEW statement.
|
|
109
|
+
"""
|
|
110
|
+
try:
|
|
111
|
+
result = chquery.parse_create_materialized_view_target_table(create_table_query)
|
|
112
|
+
except ValueError:
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
return MaterializedViewTarget(
|
|
116
|
+
database=result["database"],
|
|
117
|
+
table=result["table"],
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
|
|
91
121
|
def get_columns_from_create_query(sql_schema: str) -> list[ColumnInfo]:
|
|
92
122
|
columns = chquery.get_columns_from_create_query(sql_schema)
|
|
93
123
|
return [ColumnInfo(**col) for col in columns]
|
|
@@ -605,7 +635,7 @@ def replace_tables(
|
|
|
605
635
|
"valid_tables": valid_tables,
|
|
606
636
|
},
|
|
607
637
|
)
|
|
608
|
-
raise
|
|
638
|
+
raise MissingResource(database, table_name, default_database=default_database)
|
|
609
639
|
|
|
610
640
|
if current_replacements:
|
|
611
641
|
# We need to transform the dictionary into something cacheable, so a sorted tuple of tuples it is
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
27
27
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
|
|
29
|
+
import asyncio
|
|
29
30
|
import asyncio.coroutines
|
|
30
31
|
import functools
|
|
31
32
|
import inspect
|
|
@@ -680,3 +681,29 @@ def sync_to_async(
|
|
|
680
681
|
thread_sensitive=thread_sensitive,
|
|
681
682
|
executor=executor,
|
|
682
683
|
)
|
|
684
|
+
|
|
685
|
+
|
|
686
|
+
def run_function_in_event_loop(func_def: Callable[..., Any], *args: Any, **kwargs: Any) -> Any:
|
|
687
|
+
"""Run an async function, handling the case where an event loop may already be running."""
|
|
688
|
+
try:
|
|
689
|
+
asyncio.get_running_loop()
|
|
690
|
+
# If we're already in an event loop, we need to run the coroutine in a thread
|
|
691
|
+
# to avoid blocking the current event loop
|
|
692
|
+
import concurrent.futures
|
|
693
|
+
|
|
694
|
+
def run_in_new_loop() -> Any:
|
|
695
|
+
# Create a new event loop for this thread
|
|
696
|
+
new_loop = asyncio.new_event_loop()
|
|
697
|
+
asyncio.set_event_loop(new_loop)
|
|
698
|
+
try:
|
|
699
|
+
return new_loop.run_until_complete(func_def(*args, **kwargs))
|
|
700
|
+
finally:
|
|
701
|
+
new_loop.close()
|
|
702
|
+
|
|
703
|
+
# Run in a separate thread to avoid blocking the current event loop
|
|
704
|
+
with concurrent.futures.ThreadPoolExecutor() as executor:
|
|
705
|
+
future = executor.submit(run_in_new_loop)
|
|
706
|
+
return future.result()
|
|
707
|
+
except RuntimeError:
|
|
708
|
+
# No event loop running, use asyncio.run()
|
|
709
|
+
return asyncio.run(func_def(*args, **kwargs))
|
|
@@ -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__ = '3.5.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '3.5.4'
|
|
8
|
+
__revision__ = 'f879a5d'
|
|
@@ -373,7 +373,10 @@ class TinyB:
|
|
|
373
373
|
|
|
374
374
|
def datasource_file(self, datasource: str):
|
|
375
375
|
try:
|
|
376
|
-
|
|
376
|
+
include_all_shared_with = "true" if "." in datasource else "false"
|
|
377
|
+
return self._req(
|
|
378
|
+
f"/v0/datasources/{datasource}.datasource?include_all_shared_with={include_all_shared_with}"
|
|
379
|
+
)
|
|
377
380
|
except DoesNotExistException:
|
|
378
381
|
raise Exception(f"Data Source {datasource} not found.")
|
|
379
382
|
|
|
@@ -115,9 +115,9 @@ def connection_create_kafka(
|
|
|
115
115
|
except Exception as e:
|
|
116
116
|
raise CLIConnectionException(FeedbackManager.error(message=str(e)))
|
|
117
117
|
|
|
118
|
-
security_protocol_options = ["SASL_SSL", "PLAINTEXT"]
|
|
118
|
+
security_protocol_options = ["SASL_SSL", "SASL_PLAINTEXT", "PLAINTEXT"]
|
|
119
119
|
security_protocol = security_protocol or click.prompt(
|
|
120
|
-
FeedbackManager.highlight(message="? Security Protocol (SASL_SSL, PLAINTEXT) [SASL_SSL]"),
|
|
120
|
+
FeedbackManager.highlight(message="? Security Protocol (SASL_SSL, SASL_PLAINTEXT, PLAINTEXT) [SASL_SSL]"),
|
|
121
121
|
type=click.Choice(security_protocol_options),
|
|
122
122
|
show_default=False,
|
|
123
123
|
show_choices=False,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: tinybird
|
|
3
|
-
Version: 3.5.
|
|
3
|
+
Version: 3.5.4
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/forward/commands
|
|
6
6
|
Author: Tinybird
|
|
@@ -57,6 +57,16 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
|
|
|
57
57
|
Changelog
|
|
58
58
|
----------
|
|
59
59
|
|
|
60
|
+
3.5.4
|
|
61
|
+
*******
|
|
62
|
+
|
|
63
|
+
- `Fixed` Pulling vendored data sources from a Classic workspace to migrate to Forward now includes all workspaces in SHARED_WITH.
|
|
64
|
+
|
|
65
|
+
3.5.3
|
|
66
|
+
*******
|
|
67
|
+
|
|
68
|
+
- `Fixed` Support `SASL_PLAINTEXT` as a Kafka security protocol, fixing connections to brokers that use SASL authentication without TLS (e.g. WarpStream).
|
|
69
|
+
|
|
60
70
|
3.5.2
|
|
61
71
|
*******
|
|
62
72
|
|
|
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
|
|
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-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py
RENAMED
|
File without changes
|
{tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/get_openapi_definition.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
|
|
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
|
|
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
|