tinybird 3.1.0.dev0__tar.gz → 3.2.0__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.1.0.dev0 → tinybird-3.2.0}/PKG-INFO +6 -1
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/datafile/common.py +3 -1
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/__cli__.py +2 -2
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/connection_s3.py +15 -1
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/build_datasource.py +14 -3
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datasource.py +33 -2
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird.egg-info/PKG-INFO +6 -1
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/setup.cfg +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/__cli__.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/ch_utils/engine.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/check_pypi.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/client.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/config.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/context.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/datafile/exceptions.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/datafile/parse_connection.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/datafile/parse_datasource.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/datafile/parse_pipe.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/datatypes.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/feedback_manager.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/git_settings.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/prompts.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/service_datasources.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/sql.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/sql_template.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/sql_toolset.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/syncasync.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/check_pypi.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/cli.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/client.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/config.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/__init__.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/agent.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/animations.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/banner.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/command_agent.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/compactor.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/explore_agent.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/file_agent.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/memory.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/mock_agent.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/models.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/prompts.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/testing_agent.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/append.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/build.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/datafile.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/execute_query.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/file.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/mock.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/plan.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/secret.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/test.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/utils.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/branch.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/build.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/build_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/cicd.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/cli.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/config.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/connection.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/connection_kafka.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/copy.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/create.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/build.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/build_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/diff.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/fixture.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/format_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/format_connection.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/playground.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/datafile/pull.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/deployment.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/deployment_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/deprecations.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/dev_server.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/endpoint.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/exceptions.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/feedback_manager.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/fmt.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/info.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/infra.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/job.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/job_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/llm.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/llm_utils.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/local.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/local_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/local_logs.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/login.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/login_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/logout.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/materialization.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/mock.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/mock_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/open.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/pipe.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/project.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/project_commands.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/regions.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/secret.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/secret_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/shell.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/sink.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/table.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/telemetry.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/test.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/test_common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/token.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/watch.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/workspace.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/workspace_members.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/cli.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/datasource.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/fmt.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/pipe.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/regions.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/tag.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tornado_template.py +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird.egg-info/SOURCES.txt +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird.egg-info/dependency_links.txt +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird.egg-info/entry_points.txt +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird.egg-info/requires.txt +0 -0
- {tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: tinybird
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0
|
|
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,11 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
|
|
|
57
57
|
Changelog
|
|
58
58
|
----------
|
|
59
59
|
|
|
60
|
+
3.0.2
|
|
61
|
+
*******
|
|
62
|
+
|
|
63
|
+
- `Changed` `IMPORT_FORMAT` is now optional for S3/GCS data sources and will be automatically inferred from the file extension if not provided
|
|
64
|
+
|
|
60
65
|
3.0.1
|
|
61
66
|
*******
|
|
62
67
|
|
|
@@ -270,7 +270,7 @@ REQUIRED_BLOB_STORAGE_PARAMS = {
|
|
|
270
270
|
"import_schedule",
|
|
271
271
|
"import_bucket_uri",
|
|
272
272
|
}
|
|
273
|
-
BLOB_STORAGE_PARAMS = REQUIRED_BLOB_STORAGE_PARAMS.union({"import_from_timestamp"})
|
|
273
|
+
BLOB_STORAGE_PARAMS = REQUIRED_BLOB_STORAGE_PARAMS.union({"import_from_timestamp", "import_format"})
|
|
274
274
|
VALID_BLOB_STORAGE_CRON_VALUES = {
|
|
275
275
|
"@once",
|
|
276
276
|
"@on-demand",
|
|
@@ -2017,6 +2017,7 @@ def parse(
|
|
|
2017
2017
|
"import_schedule": assign_var("import_schedule"),
|
|
2018
2018
|
"import_strategy": import_strategy_deprecated, # Deprecated, always append
|
|
2019
2019
|
"import_bucket_uri": assign_var("import_bucket_uri"),
|
|
2020
|
+
"import_format": assign_var("import_format"),
|
|
2020
2021
|
"import_from_timestamp": assign_var("import_from_timestamp"),
|
|
2021
2022
|
"import_service": import_service_deprecated, # Deprecated
|
|
2022
2023
|
"import_external_datasource": import_external_datasource_deprecated, # Deprecated, BQ and SFK
|
|
@@ -2196,6 +2197,7 @@ class ImportReplacements:
|
|
|
2196
2197
|
("import_connector", "connector", None),
|
|
2197
2198
|
("import_external_datasource", "external_data_source", None),
|
|
2198
2199
|
("import_bucket_uri", "bucket_uri", None),
|
|
2200
|
+
("import_format", "format", None),
|
|
2199
2201
|
("import_from_timestamp", "from_time", None),
|
|
2200
2202
|
("import_table_arn", "dynamodb_table_arn", None),
|
|
2201
2203
|
("import_export_bucket", "dynamodb_export_bucket", None),
|
|
@@ -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.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '3.2.0'
|
|
8
|
+
__revision__ = '5429eb1'
|
|
@@ -236,6 +236,9 @@ def meta_to_schema(meta: list[dict[str, Any]], file_format: str) -> str:
|
|
|
236
236
|
Returns:
|
|
237
237
|
The schema string
|
|
238
238
|
"""
|
|
239
|
+
# Normalize format to lowercase for case-insensitive comparison
|
|
240
|
+
file_format = file_format.lower()
|
|
241
|
+
|
|
239
242
|
if file_format == "csv":
|
|
240
243
|
# CSV files don't use JSONPath
|
|
241
244
|
return ",\n ".join([f"`{col['name']}` {col['type']}" for col in meta])
|
|
@@ -249,6 +252,7 @@ def meta_to_s3_datasource_datafile(
|
|
|
249
252
|
connection_name: str,
|
|
250
253
|
bucket_uri: str,
|
|
251
254
|
import_schedule: str = "@auto",
|
|
255
|
+
import_format: Optional[str] = None,
|
|
252
256
|
) -> str:
|
|
253
257
|
"""Generate S3 datasource datafile content from preview metadata.
|
|
254
258
|
|
|
@@ -257,11 +261,20 @@ def meta_to_s3_datasource_datafile(
|
|
|
257
261
|
connection_name: The S3 connection name
|
|
258
262
|
bucket_uri: The S3 bucket URI
|
|
259
263
|
import_schedule: The import schedule (default: @auto)
|
|
264
|
+
import_format: The import format (default: auto-detected from bucket_uri)
|
|
260
265
|
|
|
261
266
|
Returns:
|
|
262
267
|
The datasource datafile content as a string
|
|
263
268
|
"""
|
|
264
|
-
|
|
269
|
+
# Use provided format or auto-detect from bucket URI
|
|
270
|
+
# Treat "auto" the same as None to trigger auto-detection
|
|
271
|
+
# Normalize import_format to lowercase if provided
|
|
272
|
+
if import_format is not None:
|
|
273
|
+
import_format = import_format.lower()
|
|
274
|
+
|
|
275
|
+
file_format = (
|
|
276
|
+
import_format if import_format is not None and import_format != "auto" else get_format_from_uri(bucket_uri)
|
|
277
|
+
)
|
|
265
278
|
schema: str = meta_to_schema(meta, file_format)
|
|
266
279
|
ds_content = f"""SCHEMA >
|
|
267
280
|
{schema}
|
|
@@ -273,6 +286,7 @@ ENGINE "MergeTree"
|
|
|
273
286
|
IMPORT_CONNECTION_NAME {connection_name}
|
|
274
287
|
IMPORT_BUCKET_URI "{bucket_uri}"
|
|
275
288
|
IMPORT_SCHEDULE "{import_schedule}"
|
|
289
|
+
IMPORT_FORMAT "{file_format}"
|
|
276
290
|
# Learn more at https://www.tinybird.co/docs/forward/get-data-in/connectors/s3#datasource-settings
|
|
277
291
|
"""
|
|
278
292
|
return ds_content
|
|
@@ -68,13 +68,24 @@ def new_ds(
|
|
|
68
68
|
and params.get("bucket_uri")
|
|
69
69
|
):
|
|
70
70
|
bucket_uri = params.get("bucket_uri")
|
|
71
|
+
file_format = params.get("format", "").lower()
|
|
71
72
|
extension = bucket_uri.split(".")[-1]
|
|
72
73
|
if extension == "gz":
|
|
73
74
|
extension = bucket_uri.split(".")[-2]
|
|
74
75
|
valid_formats = ["csv", "json", "jsonl", "ndjson", "parquet"]
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
|
|
77
|
+
# If user provided a format, validate it specifically
|
|
78
|
+
if file_format:
|
|
79
|
+
if file_format not in valid_formats:
|
|
80
|
+
raise Exception(
|
|
81
|
+
FeedbackManager.error_format(extension=file_format, valid_formats=valid_formats)
|
|
82
|
+
)
|
|
83
|
+
params["format"] = file_format
|
|
84
|
+
else:
|
|
85
|
+
# Fall back to extension validation
|
|
86
|
+
if extension not in valid_formats:
|
|
87
|
+
raise Exception(FeedbackManager.error_format(extension=extension, valid_formats=valid_formats))
|
|
88
|
+
params["format"] = extension
|
|
78
89
|
datasource_response = client.datasource_create_from_definition(params)
|
|
79
90
|
datasource = datasource_response.get("datasource", {})
|
|
80
91
|
|
|
@@ -672,6 +672,12 @@ def datasource_sync(ctx: Context, datasource_name: str, yes: bool):
|
|
|
672
672
|
type=click.Choice(["@auto", "@once"], case_sensitive=False),
|
|
673
673
|
help="S3 import schedule (@auto for automatic ingestion, @once for on-demand)",
|
|
674
674
|
)
|
|
675
|
+
@click.option(
|
|
676
|
+
"--s3-format",
|
|
677
|
+
"s3_format_param",
|
|
678
|
+
type=click.Choice(["csv", "ndjson", "parquet"], case_sensitive=False),
|
|
679
|
+
help="S3 import format (default: auto-detected from file extension)",
|
|
680
|
+
)
|
|
675
681
|
@click.option("--yes", is_flag=True, default=False, help="Do not ask for confirmation")
|
|
676
682
|
@click.pass_context
|
|
677
683
|
def datasource_create(
|
|
@@ -691,6 +697,7 @@ def datasource_create(
|
|
|
691
697
|
s3_bucket_uri_param: Optional[str],
|
|
692
698
|
s3_sample_file_param: Optional[str],
|
|
693
699
|
s3_schedule_param: Optional[str],
|
|
700
|
+
s3_format_param: Optional[str],
|
|
694
701
|
yes: bool,
|
|
695
702
|
):
|
|
696
703
|
wizard_data: dict[str, str | bool | float] = {
|
|
@@ -1174,6 +1181,7 @@ ENGINE "MergeTree"
|
|
|
1174
1181
|
s3_bucket_uri = select_bucket_uri(None)
|
|
1175
1182
|
|
|
1176
1183
|
s3_sample_file = select_sample_file_uri(s3_sample_file_param, s3_bucket_uri, s3_connection_id, client)
|
|
1184
|
+
s3_format: str = s3_format_param.lower() if s3_format_param else select_format_file(None)
|
|
1177
1185
|
|
|
1178
1186
|
s3_schedule: Optional[str] = None
|
|
1179
1187
|
if s3_schedule_param:
|
|
@@ -1194,10 +1202,13 @@ ENGINE "MergeTree"
|
|
|
1194
1202
|
assert s3_bucket_uri is not None
|
|
1195
1203
|
assert s3_sample_file is not None
|
|
1196
1204
|
assert s3_schedule is not None
|
|
1205
|
+
assert s3_format is not None
|
|
1197
1206
|
click.echo(FeedbackManager.gray(message="\n» Generating schema..."))
|
|
1198
1207
|
response = client.preview_s3(s3_connection_id, s3_bucket_uri, s3_sample_file, None)
|
|
1199
1208
|
meta = response.get("preview", {}).get("meta", [])
|
|
1200
|
-
ds_content = meta_to_s3_datasource_datafile(
|
|
1209
|
+
ds_content = meta_to_s3_datasource_datafile(
|
|
1210
|
+
meta, connection_name, s3_bucket_uri, s3_schedule, s3_format
|
|
1211
|
+
)
|
|
1201
1212
|
|
|
1202
1213
|
while not confirmed:
|
|
1203
1214
|
# Select connection if not set or if user wants to change it
|
|
@@ -1235,7 +1246,9 @@ ENGINE "MergeTree"
|
|
|
1235
1246
|
preview_result = echo_s3_data(s3_connection_id, connection_name, s3_bucket_uri, s3_sample_file, client)
|
|
1236
1247
|
click.echo(FeedbackManager.highlight(message=f"\n» Previewing {name}.datasource"))
|
|
1237
1248
|
meta = preview_result["meta"]
|
|
1238
|
-
ds_content = meta_to_s3_datasource_datafile(
|
|
1249
|
+
ds_content = meta_to_s3_datasource_datafile(
|
|
1250
|
+
meta, connection_name, s3_bucket_uri, s3_schedule, s3_format
|
|
1251
|
+
)
|
|
1239
1252
|
click.echo(create_terminal_box(ds_content, title=f"{name}.datasource"))
|
|
1240
1253
|
|
|
1241
1254
|
# Confirmation step
|
|
@@ -1361,3 +1374,21 @@ def select_auto_offset_reset(current_value: Optional[str] = None) -> str:
|
|
|
1361
1374
|
default=current_value or "latest",
|
|
1362
1375
|
show_default=True,
|
|
1363
1376
|
)
|
|
1377
|
+
|
|
1378
|
+
|
|
1379
|
+
def select_format_file(current_value: Optional[str] = None) -> str:
|
|
1380
|
+
"""Select file format for import operations.
|
|
1381
|
+
|
|
1382
|
+
Args:
|
|
1383
|
+
current_value: Current format value to use as default
|
|
1384
|
+
|
|
1385
|
+
Returns:
|
|
1386
|
+
Selected format string ("auto", "csv", "ndjson", or "parquet")
|
|
1387
|
+
"""
|
|
1388
|
+
result = click.prompt(
|
|
1389
|
+
FeedbackManager.highlight(message="? Import format"),
|
|
1390
|
+
type=click.Choice(["Auto", "CSV", "NDJSON", "Parquet"], case_sensitive=False),
|
|
1391
|
+
default=current_value or "Auto",
|
|
1392
|
+
show_default=True,
|
|
1393
|
+
)
|
|
1394
|
+
return result.lower()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: tinybird
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0
|
|
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,11 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
|
|
|
57
57
|
Changelog
|
|
58
58
|
----------
|
|
59
59
|
|
|
60
|
+
3.0.2
|
|
61
|
+
*******
|
|
62
|
+
|
|
63
|
+
- `Changed` `IMPORT_FORMAT` is now optional for S3/GCS data sources and will be automatically inferred from the file extension if not provided
|
|
64
|
+
|
|
60
65
|
3.0.1
|
|
61
66
|
*******
|
|
62
67
|
|
|
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
|
{tinybird-3.1.0.dev0 → tinybird-3.2.0}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py
RENAMED
|
File without changes
|
{tinybird-3.1.0.dev0 → tinybird-3.2.0}/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
|