tinybird 0.0.1.dev303__tar.gz → 0.0.1.dev305__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.dev303 → tinybird-0.0.1.dev305}/PKG-INFO +2 -1
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/sql_template.py +14 -7
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/__cli__.py +2 -2
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/banner.py +14 -14
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/execute_query.py +13 -16
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/utils.py +37 -46
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/build_common.py +16 -17
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/cli.py +3 -4
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/common.py +9 -10
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build.py +26 -37
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build_datasource.py +21 -25
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/format_pipe.py +1 -1
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/playground.py +58 -67
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/pull.py +2 -3
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/deployment_common.py +3 -1
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/infra.py +4 -5
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/local.py +53 -3
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/local_common.py +10 -2
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/login.py +18 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/login_common.py +2 -3
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/telemetry.py +4 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -14
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -6
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -14
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -6
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tornado_template.py +4 -5
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/PKG-INFO +2 -1
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/requires.txt +1 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/setup.cfg +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/__cli__.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/ch_utils/engine.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/check_pypi.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/client.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/config.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/connectors.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/context.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/common.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/exceptions.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/parse_connection.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/parse_datasource.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/parse_pipe.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datatypes.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/feedback_manager.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/git_settings.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/prompts.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/service_datasources.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/sql.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/sql_toolset.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/syncasync.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/check_pypi.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/cli.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/client.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/config.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/__init__.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/agent.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/animations.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/command_agent.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/compactor.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/explore_agent.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/file_agent.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/memory.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/mock_agent.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/models.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/prompts.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/testing_agent.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/append.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/build.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/datafile.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/file.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/mock.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/plan.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/secret.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/test.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/build.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/cicd.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/config.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/connection.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/copy.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/create.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build_common.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/diff.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/fixture.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/format_common.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datasource.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/deployment.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/deprecations.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/dev_server.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/endpoint.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/exceptions.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/feedback_manager.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/info.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/job.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/llm.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/llm_utils.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/logout.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/materialization.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/mock.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/mock_common.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/open.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/pipe.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/project.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/regions.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/secret.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/secret_common.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/shell.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/sink.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/table.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/test.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/test_common.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/token.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/watch.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/workspace.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/workspace_members.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/cli.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/datasource.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/fmt.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/pipe.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/regions.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/tag.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/SOURCES.txt +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/dependency_links.txt +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/entry_points.txt +0 -0
- {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: tinybird
|
|
3
|
-
Version: 0.0.1.
|
|
3
|
+
Version: 0.0.1.dev305
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://www.tinybird.co/docs/forward/commands
|
|
6
6
|
Author: Tinybird
|
|
@@ -39,6 +39,7 @@ Requires-Dist: packaging<24,>=23.1
|
|
|
39
39
|
Requires-Dist: llm>=0.19
|
|
40
40
|
Requires-Dist: thefuzz==0.22.1
|
|
41
41
|
Requires-Dist: python-dotenv==1.1.0
|
|
42
|
+
Requires-Dist: pyjwt[crypto]==2.9.0
|
|
42
43
|
Dynamic: author
|
|
43
44
|
Dynamic: author-email
|
|
44
45
|
Dynamic: description
|
|
@@ -384,14 +384,13 @@ def array_type(types):
|
|
|
384
384
|
if isinstance(x, Placeholder):
|
|
385
385
|
if default:
|
|
386
386
|
x = default
|
|
387
|
-
|
|
388
|
-
if _type
|
|
389
|
-
if _type == "String":
|
|
390
|
-
x = ""
|
|
391
|
-
else:
|
|
392
|
-
x = ",".join(map(str, [types[_type](x) for _ in range(2)]))
|
|
393
|
-
else:
|
|
387
|
+
elif _type and _type in types:
|
|
388
|
+
if _type == "String":
|
|
394
389
|
x = ""
|
|
390
|
+
else:
|
|
391
|
+
x = ",".join(map(str, [types[_type](x) for _ in range(2)]))
|
|
392
|
+
else:
|
|
393
|
+
x = ""
|
|
395
394
|
elif x is None:
|
|
396
395
|
x = default
|
|
397
396
|
if x is None:
|
|
@@ -2386,6 +2385,14 @@ def render_sql_template(
|
|
|
2386
2385
|
documentation="/cli/advanced-templates.html",
|
|
2387
2386
|
)
|
|
2388
2387
|
raise SQLTemplateException(str(e), documentation="/cli/advanced-templates.html")
|
|
2388
|
+
except IndexError as e:
|
|
2389
|
+
# This happens when trying to access string indices on empty strings
|
|
2390
|
+
if "string index out of range" in str(e):
|
|
2391
|
+
raise SQLTemplateException(
|
|
2392
|
+
"String index out of range. Check that string parameters have values before accessing specific characters (e.g., param[0]). Provide default values or add length checks in your template.",
|
|
2393
|
+
documentation="/cli/advanced-templates.html",
|
|
2394
|
+
)
|
|
2395
|
+
raise SQLTemplateException(str(e), documentation="/cli/advanced-templates.html")
|
|
2389
2396
|
except Exception as e:
|
|
2390
2397
|
# errors might vary here, we need to support as much as possible
|
|
2391
2398
|
# https://gitlab.com/tinybird/analytics/-/issues/943
|
|
@@ -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.dev305'
|
|
8
|
+
__revision__ = 'cc453b3'
|
|
@@ -54,20 +54,20 @@ def display_banner():
|
|
|
54
54
|
"""Convert RGB values to ANSI escape code"""
|
|
55
55
|
if use_truecolor:
|
|
56
56
|
return f"\033[38;2;{r};{g};{b}m"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
57
|
+
|
|
58
|
+
# Convert to 8-bit color (256 color palette)
|
|
59
|
+
# Simple approximation: map RGB to 216-color cube + grayscale
|
|
60
|
+
if r == g == b:
|
|
61
|
+
# Grayscale
|
|
62
|
+
gray = int(r / 255 * 23) + 232
|
|
63
|
+
return f"\033[38;5;{gray}m"
|
|
64
|
+
|
|
65
|
+
# Color cube (6x6x6)
|
|
66
|
+
r_idx = int(r / 255 * 5)
|
|
67
|
+
g_idx = int(g / 255 * 5)
|
|
68
|
+
b_idx = int(b / 255 * 5)
|
|
69
|
+
color_idx = 16 + (36 * r_idx) + (6 * g_idx) + b_idx
|
|
70
|
+
return f"\033[38;5;{color_idx}m"
|
|
71
71
|
|
|
72
72
|
# Define solid color (corresponding to #27f795)
|
|
73
73
|
solid_color = [39, 247, 149] # #27f795 in RGB
|
{tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/execute_query.py
RENAMED
|
@@ -125,23 +125,20 @@ def execute_query(
|
|
|
125
125
|
|
|
126
126
|
if not result["data"]:
|
|
127
127
|
click.echo(FeedbackManager.info_no_rows())
|
|
128
|
+
elif script:
|
|
129
|
+
try:
|
|
130
|
+
# Execute the LLM-generated plotext script
|
|
131
|
+
chart_output = _execute_plotext_script(script, result["data"], result["meta"])
|
|
132
|
+
click.echo(chart_output)
|
|
133
|
+
except Exception as script_error:
|
|
134
|
+
click.echo(FeedbackManager.error(message=f"There was an error rendering the chart.\n{script_error}"))
|
|
135
|
+
ctx.deps.thinking_animation.start()
|
|
136
|
+
return f"After executing the query: {query}, there was an error rendering the chart: {script_error}. Fix the script and render the chart again."
|
|
128
137
|
else:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
click.echo(chart_output)
|
|
134
|
-
except Exception as script_error:
|
|
135
|
-
click.echo(
|
|
136
|
-
FeedbackManager.error(message=f"There was an error rendering the chart.\n{script_error}")
|
|
137
|
-
)
|
|
138
|
-
ctx.deps.thinking_animation.start()
|
|
139
|
-
return f"After executing the query: {query}, there was an error rendering the chart: {script_error}. Fix the script and render the chart again."
|
|
140
|
-
else:
|
|
141
|
-
echo_safe_humanfriendly_tables_format_pretty_table(
|
|
142
|
-
data=[d.values() for d in result["data"]], column_names=result["data"][0].keys()
|
|
143
|
-
)
|
|
144
|
-
click.echo("Showing first 10 results\n")
|
|
138
|
+
echo_safe_humanfriendly_tables_format_pretty_table(
|
|
139
|
+
data=[d.values() for d in result["data"]], column_names=result["data"][0].keys()
|
|
140
|
+
)
|
|
141
|
+
click.echo("Showing first 10 results\n")
|
|
145
142
|
|
|
146
143
|
ctx.deps.thinking_animation.start()
|
|
147
144
|
display_format = "chart" if script else "table"
|
|
@@ -580,59 +580,50 @@ def create_terminal_box(content: str, new_content: Optional[str] = None, title:
|
|
|
580
580
|
else:
|
|
581
581
|
line_num_str = f"{line_num:>4}"
|
|
582
582
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
if diff_marker == "-":
|
|
586
|
-
# Fill the entire content area with red background
|
|
587
|
-
content_with_bg = f"{Back.RED}{diff_marker} {content}{Style.RESET_ALL}"
|
|
588
|
-
# Calculate padding needed for the content area
|
|
589
|
-
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
590
|
-
content_padding = content_area_width - len(f"{diff_marker} {content}")
|
|
591
|
-
if content_padding > 0:
|
|
592
|
-
content_with_bg = (
|
|
593
|
-
f"{Back.RED}{diff_marker} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
594
|
-
)
|
|
595
|
-
line = f"{vertical} {line_num_str} {content_with_bg}"
|
|
596
|
-
elif diff_marker == "+":
|
|
597
|
-
# Fill the entire content area with green background
|
|
598
|
-
content_with_bg = f"{Back.GREEN}{diff_marker} {content}{Style.RESET_ALL}"
|
|
599
|
-
# Calculate padding needed for the content area
|
|
600
|
-
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
601
|
-
content_padding = content_area_width - len(f"{diff_marker} {content}")
|
|
602
|
-
if content_padding > 0:
|
|
603
|
-
content_with_bg = (
|
|
604
|
-
f"{Back.GREEN}{diff_marker} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
605
|
-
)
|
|
606
|
-
line = f"{vertical} {line_num_str} {content_with_bg}"
|
|
607
|
-
else:
|
|
608
|
-
line = f"{vertical} {line_num:>4} {diff_marker} {content}"
|
|
609
|
-
else:
|
|
610
|
-
line = f"{vertical} {line_num_str} {content}"
|
|
611
|
-
else:
|
|
612
|
-
# Continuation line without number - fill background starting from where symbol would be
|
|
613
|
-
if diff_marker and COLORAMA_AVAILABLE:
|
|
583
|
+
if diff_marker:
|
|
584
|
+
if COLORAMA_AVAILABLE:
|
|
614
585
|
if diff_marker == "-":
|
|
615
|
-
#
|
|
586
|
+
# Fill the entire content area with red background
|
|
587
|
+
content_with_bg = f"{Back.RED}{diff_marker} {content}{Style.RESET_ALL}"
|
|
588
|
+
# Calculate padding needed for the content area
|
|
616
589
|
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
617
|
-
content_padding = content_area_width - len(
|
|
618
|
-
content
|
|
619
|
-
) # Don't subtract spaces, they're in the background
|
|
590
|
+
content_padding = content_area_width - len(f"{diff_marker} {content}")
|
|
620
591
|
if content_padding > 0:
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
line = f"{vertical} {Back.RED} {content}{Style.RESET_ALL}"
|
|
592
|
+
content_with_bg = f"{Back.RED}{diff_marker} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
593
|
+
line = f"{vertical} {line_num_str} {content_with_bg}"
|
|
624
594
|
elif diff_marker == "+":
|
|
625
|
-
#
|
|
595
|
+
# Fill the entire content area with green background
|
|
596
|
+
content_with_bg = f"{Back.GREEN}{diff_marker} {content}{Style.RESET_ALL}"
|
|
597
|
+
# Calculate padding needed for the content area
|
|
626
598
|
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
627
|
-
content_padding = content_area_width - len(
|
|
628
|
-
content
|
|
629
|
-
) # Don't subtract spaces, they're in the background
|
|
599
|
+
content_padding = content_area_width - len(f"{diff_marker} {content}")
|
|
630
600
|
if content_padding > 0:
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
601
|
+
content_with_bg = (
|
|
602
|
+
f"{Back.GREEN}{diff_marker} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
603
|
+
)
|
|
604
|
+
line = f"{vertical} {line_num_str} {content_with_bg}"
|
|
634
605
|
else:
|
|
635
|
-
line = f"{vertical}
|
|
606
|
+
line = f"{vertical} {line_num:>4} {diff_marker} {content}"
|
|
607
|
+
elif diff_marker and COLORAMA_AVAILABLE:
|
|
608
|
+
# Continuation line without number - fill background starting from where symbol would be
|
|
609
|
+
if diff_marker == "-":
|
|
610
|
+
# Calculate how much space we need to fill with background
|
|
611
|
+
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
612
|
+
content_padding = content_area_width - len(content) # Don't subtract spaces, they're in the background
|
|
613
|
+
if content_padding > 0:
|
|
614
|
+
line = f"{vertical} {Back.RED} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
615
|
+
else:
|
|
616
|
+
line = f"{vertical} {Back.RED} {content}{Style.RESET_ALL}"
|
|
617
|
+
elif diff_marker == "+":
|
|
618
|
+
# Calculate how much space we need to fill with background
|
|
619
|
+
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
620
|
+
content_padding = content_area_width - len(content) # Don't subtract spaces, they're in the background
|
|
621
|
+
if content_padding > 0:
|
|
622
|
+
line = f"{vertical} {Back.GREEN} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
623
|
+
else:
|
|
624
|
+
line = f"{vertical} {Back.GREEN} {content}{Style.RESET_ALL}"
|
|
625
|
+
else:
|
|
626
|
+
line = f"{vertical} {content}"
|
|
636
627
|
|
|
637
628
|
# Pad to terminal width
|
|
638
629
|
# Need to account for ANSI escape sequences not taking visual space
|
|
@@ -102,12 +102,12 @@ def process(
|
|
|
102
102
|
build_status.error = build_error
|
|
103
103
|
build_status.building = False
|
|
104
104
|
return build_error
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
105
|
+
|
|
106
|
+
if not silent:
|
|
107
|
+
if build_result == False: # noqa: E712
|
|
108
|
+
click.echo(FeedbackManager.info(message="No changes. Build skipped."))
|
|
109
|
+
else:
|
|
110
|
+
click.echo(FeedbackManager.success(message=f"\n✓ {rebuild_str} completed in {elapsed_time:.1f}s"))
|
|
111
111
|
|
|
112
112
|
return None
|
|
113
113
|
|
|
@@ -280,17 +280,16 @@ def build_project(
|
|
|
280
280
|
)
|
|
281
281
|
if no_changes:
|
|
282
282
|
return False
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
echo_changes(project, deleted_connections, ".connection", "deleted")
|
|
283
|
+
if not silent:
|
|
284
|
+
echo_changes(project, new_datasources, ".datasource", "created")
|
|
285
|
+
echo_changes(project, changed_datasources, ".datasource", "changed")
|
|
286
|
+
echo_changes(project, deleted_datasources, ".datasource", "deleted")
|
|
287
|
+
echo_changes(project, new_pipes, ".pipe", "created")
|
|
288
|
+
echo_changes(project, changed_pipes, ".pipe", "changed")
|
|
289
|
+
echo_changes(project, deleted_pipes, ".pipe", "deleted")
|
|
290
|
+
echo_changes(project, new_connections, ".connection", "created")
|
|
291
|
+
echo_changes(project, changed_connections, ".connection", "changed")
|
|
292
|
+
echo_changes(project, deleted_connections, ".connection", "deleted")
|
|
294
293
|
if load_fixtures:
|
|
295
294
|
try:
|
|
296
295
|
for filename in project_files:
|
|
@@ -116,11 +116,10 @@ def cli(
|
|
|
116
116
|
# We need to unpatch for our tests not to break
|
|
117
117
|
if output != "human":
|
|
118
118
|
__hide_click_output()
|
|
119
|
+
elif show_tokens or not cloud or ctx.invoked_subcommand == "build":
|
|
120
|
+
__unpatch_click_output()
|
|
119
121
|
else:
|
|
120
|
-
|
|
121
|
-
__unpatch_click_output()
|
|
122
|
-
else:
|
|
123
|
-
__patch_click_output()
|
|
122
|
+
__patch_click_output()
|
|
124
123
|
|
|
125
124
|
if getenv_bool("TB_DISABLE_SSL_CHECKS", False):
|
|
126
125
|
click.echo(FeedbackManager.warning_disabled_ssl_checks())
|
|
@@ -2197,18 +2197,17 @@ def ask_for_organization(
|
|
|
2197
2197
|
user_token = get_user_token(config, user_token)
|
|
2198
2198
|
organization = create_organization_and_add_workspaces(config, organization_name, user_token)
|
|
2199
2199
|
organization_id = organization.get("id")
|
|
2200
|
+
elif len(organizations) == 1:
|
|
2201
|
+
organization_name = organizations[0]["name"]
|
|
2202
|
+
organization_id = organizations[0]["id"]
|
|
2200
2203
|
else:
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
+
sorted_organizations = sort_organizations_by_user(organizations, user_email=user_email)
|
|
2205
|
+
current_organization = ask_for_organization_interactively(sorted_organizations)
|
|
2206
|
+
if current_organization:
|
|
2207
|
+
organization_id = current_organization.get("id")
|
|
2208
|
+
organization_name = current_organization.get("name")
|
|
2204
2209
|
else:
|
|
2205
|
-
|
|
2206
|
-
current_organization = ask_for_organization_interactively(sorted_organizations)
|
|
2207
|
-
if current_organization:
|
|
2208
|
-
organization_id = current_organization.get("id")
|
|
2209
|
-
organization_name = current_organization.get("name")
|
|
2210
|
-
else:
|
|
2211
|
-
return None, None
|
|
2210
|
+
return None, None
|
|
2212
2211
|
return organization_id, organization_name
|
|
2213
2212
|
|
|
2214
2213
|
|
|
@@ -128,41 +128,33 @@ def folder_build(
|
|
|
128
128
|
filename = to_run[name]["filename"]
|
|
129
129
|
filename = filename.replace(f"{folder}/", "")
|
|
130
130
|
click.echo(FeedbackManager.info(message=f"✓ {filename}"))
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
name=name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}"
|
|
136
|
-
)
|
|
131
|
+
elif raise_on_exists:
|
|
132
|
+
raise AlreadyExistsException(
|
|
133
|
+
FeedbackManager.warning_name_already_exists(
|
|
134
|
+
name=name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}"
|
|
137
135
|
)
|
|
136
|
+
)
|
|
137
|
+
elif name_matches_existing_resource(resource, name, tb_client):
|
|
138
|
+
if resource == "pipes":
|
|
139
|
+
click.echo(FeedbackManager.error_pipe_cannot_be_pushed(name=name))
|
|
138
140
|
else:
|
|
139
|
-
|
|
140
|
-
if resource == "pipes":
|
|
141
|
-
click.echo(FeedbackManager.error_pipe_cannot_be_pushed(name=name))
|
|
142
|
-
else:
|
|
143
|
-
click.echo(FeedbackManager.error_datasource_cannot_be_pushed(name=name))
|
|
144
|
-
else:
|
|
145
|
-
click.echo(
|
|
146
|
-
FeedbackManager.warning_name_already_exists(
|
|
147
|
-
name=(
|
|
148
|
-
name
|
|
149
|
-
if to_run[name]["version"] is None
|
|
150
|
-
else f"{name}__v{to_run[name]['version']}"
|
|
151
|
-
)
|
|
152
|
-
)
|
|
153
|
-
)
|
|
154
|
-
else:
|
|
155
|
-
if should_push_file(name, remote_resource_names, force, run_tests):
|
|
156
|
-
extension = "pipe" if resource == "pipes" else "datasource"
|
|
157
|
-
click.echo(FeedbackManager.info_building_resource(name=f"{name}.{extension}", version=""))
|
|
141
|
+
click.echo(FeedbackManager.error_datasource_cannot_be_pushed(name=name))
|
|
158
142
|
else:
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
143
|
+
click.echo(
|
|
144
|
+
FeedbackManager.warning_name_already_exists(
|
|
145
|
+
name=(name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}")
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
elif should_push_file(name, remote_resource_names, force, run_tests):
|
|
149
|
+
extension = "pipe" if resource == "pipes" else "datasource"
|
|
150
|
+
click.echo(FeedbackManager.info_building_resource(name=f"{name}.{extension}", version=""))
|
|
151
|
+
elif name_matches_existing_resource(resource, name, tb_client):
|
|
152
|
+
if resource == "pipes":
|
|
153
|
+
click.echo(FeedbackManager.warning_pipe_cannot_be_pushed(name=name))
|
|
154
|
+
else:
|
|
155
|
+
click.echo(FeedbackManager.warning_datasource_cannot_be_pushed(name=name))
|
|
156
|
+
else:
|
|
157
|
+
click.echo(FeedbackManager.warning_dry_name_already_exists(name=name))
|
|
166
158
|
|
|
167
159
|
def push_files(
|
|
168
160
|
dependency_graph: GraphDependencies,
|
|
@@ -932,11 +924,8 @@ def process_file(
|
|
|
932
924
|
raise click.ClickException(FeedbackManager.error_missing_table_arn(datasource=datasource["name"]))
|
|
933
925
|
if not params.get("import_export_bucket", None):
|
|
934
926
|
raise click.ClickException(FeedbackManager.error_missing_export_bucket(datasource=datasource["name"]))
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
raise click.ClickException(
|
|
938
|
-
FeedbackManager.error_missing_external_datasource(datasource=datasource["name"])
|
|
939
|
-
)
|
|
927
|
+
elif not params.get("import_external_datasource", None):
|
|
928
|
+
raise click.ClickException(FeedbackManager.error_missing_external_datasource(datasource=datasource["name"]))
|
|
940
929
|
|
|
941
930
|
return params
|
|
942
931
|
|
{tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build_datasource.py
RENAMED
|
@@ -301,32 +301,28 @@ def new_ds(
|
|
|
301
301
|
if alter_response and make_changes:
|
|
302
302
|
# alter operation finished
|
|
303
303
|
pass
|
|
304
|
+
elif (
|
|
305
|
+
os.getenv("TB_I_KNOW_WHAT_I_AM_DOING")
|
|
306
|
+
and click.prompt(FeedbackManager.info_ask_for_datasource_confirmation()) == ds_name
|
|
307
|
+
): # TODO move to CLI
|
|
308
|
+
try:
|
|
309
|
+
client.datasource_delete(ds_name)
|
|
310
|
+
click.echo(FeedbackManager.success_delete_datasource(datasource=ds_name))
|
|
311
|
+
except Exception:
|
|
312
|
+
raise click.ClickException(FeedbackManager.error_removing_datasource(datasource=ds_name))
|
|
313
|
+
return
|
|
314
|
+
elif alter_error_message:
|
|
315
|
+
raise click.ClickException(
|
|
316
|
+
FeedbackManager.error_datasource_already_exists_and_alter_failed(
|
|
317
|
+
datasource=ds_name, alter_error_message=alter_error_message
|
|
318
|
+
)
|
|
319
|
+
)
|
|
320
|
+
elif promote_error_message:
|
|
321
|
+
raise click.ClickException(
|
|
322
|
+
FeedbackManager.error_promoting_datasource(datasource=ds_name, error=promote_error_message)
|
|
323
|
+
)
|
|
304
324
|
else:
|
|
305
|
-
|
|
306
|
-
# removed and all the references needs to be updated
|
|
307
|
-
if (
|
|
308
|
-
os.getenv("TB_I_KNOW_WHAT_I_AM_DOING")
|
|
309
|
-
and click.prompt(FeedbackManager.info_ask_for_datasource_confirmation()) == ds_name
|
|
310
|
-
): # TODO move to CLI
|
|
311
|
-
try:
|
|
312
|
-
client.datasource_delete(ds_name)
|
|
313
|
-
click.echo(FeedbackManager.success_delete_datasource(datasource=ds_name))
|
|
314
|
-
except Exception:
|
|
315
|
-
raise click.ClickException(FeedbackManager.error_removing_datasource(datasource=ds_name))
|
|
316
|
-
return
|
|
317
|
-
else:
|
|
318
|
-
if alter_error_message:
|
|
319
|
-
raise click.ClickException(
|
|
320
|
-
FeedbackManager.error_datasource_already_exists_and_alter_failed(
|
|
321
|
-
datasource=ds_name, alter_error_message=alter_error_message
|
|
322
|
-
)
|
|
323
|
-
)
|
|
324
|
-
if promote_error_message:
|
|
325
|
-
raise click.ClickException(
|
|
326
|
-
FeedbackManager.error_promoting_datasource(datasource=ds_name, error=promote_error_message)
|
|
327
|
-
)
|
|
328
|
-
else:
|
|
329
|
-
click.echo(FeedbackManager.warning_datasource_already_exists(datasource=ds_name))
|
|
325
|
+
click.echo(FeedbackManager.warning_datasource_already_exists(datasource=ds_name))
|
|
330
326
|
|
|
331
327
|
|
|
332
328
|
def share_and_unshare_datasource(
|
|
@@ -162,7 +162,7 @@ def format_pipe(
|
|
|
162
162
|
if "." in include_file
|
|
163
163
|
else eval_var(include_file)
|
|
164
164
|
)
|
|
165
|
-
included_pipe = parse_pipe(include_file, skip_eval=skip_eval).datafile
|
|
165
|
+
included_pipe = parse_pipe(str(include_file), skip_eval=skip_eval).datafile
|
|
166
166
|
pipe_nodes = doc.nodes.copy()
|
|
167
167
|
for included_node in included_pipe.nodes.copy():
|
|
168
168
|
unrolled_included_node = next(
|
|
@@ -214,41 +214,34 @@ def folder_playground(
|
|
|
214
214
|
error=e,
|
|
215
215
|
)
|
|
216
216
|
raise click.ClickException(exception)
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
name=name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}"
|
|
222
|
-
)
|
|
217
|
+
elif raise_on_exists:
|
|
218
|
+
raise AlreadyExistsException(
|
|
219
|
+
FeedbackManager.warning_name_already_exists(
|
|
220
|
+
name=name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}"
|
|
223
221
|
)
|
|
222
|
+
)
|
|
223
|
+
elif name_matches_existing_resource(resource, name, tb_client):
|
|
224
|
+
if resource == "pipes":
|
|
225
|
+
click.echo(FeedbackManager.error_pipe_cannot_be_pushed(name=name))
|
|
224
226
|
else:
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
name=(
|
|
234
|
-
name
|
|
235
|
-
if to_run[name]["version"] is None
|
|
236
|
-
else f"{name}__v{to_run[name]['version']}"
|
|
237
|
-
)
|
|
238
|
-
)
|
|
239
|
-
)
|
|
240
|
-
else:
|
|
227
|
+
click.echo(FeedbackManager.error_datasource_cannot_be_pushed(name=name))
|
|
228
|
+
else:
|
|
229
|
+
click.echo(
|
|
230
|
+
FeedbackManager.warning_name_already_exists(
|
|
231
|
+
name=(name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}")
|
|
232
|
+
)
|
|
233
|
+
)
|
|
234
|
+
if dry_run:
|
|
241
235
|
if should_push_file(name, remote_resource_names, force, run_tests):
|
|
242
236
|
extension = "pipe" if resource == "pipes" else "datasource"
|
|
243
237
|
click.echo(FeedbackManager.info_building_resource(name=f"{name}.{extension}", version=""))
|
|
244
|
-
|
|
245
|
-
if
|
|
246
|
-
|
|
247
|
-
click.echo(FeedbackManager.warning_pipe_cannot_be_pushed(name=name))
|
|
248
|
-
else:
|
|
249
|
-
click.echo(FeedbackManager.warning_datasource_cannot_be_pushed(name=name))
|
|
238
|
+
elif name_matches_existing_resource(resource, name, tb_client):
|
|
239
|
+
if resource == "pipes":
|
|
240
|
+
click.echo(FeedbackManager.warning_pipe_cannot_be_pushed(name=name))
|
|
250
241
|
else:
|
|
251
|
-
click.echo(FeedbackManager.
|
|
242
|
+
click.echo(FeedbackManager.warning_datasource_cannot_be_pushed(name=name))
|
|
243
|
+
else:
|
|
244
|
+
click.echo(FeedbackManager.warning_dry_name_already_exists(name=name))
|
|
252
245
|
|
|
253
246
|
def push_files(
|
|
254
247
|
dependency_graph: GraphDependencies,
|
|
@@ -793,44 +786,45 @@ def get_processed(
|
|
|
793
786
|
dir_path=dir_path,
|
|
794
787
|
embedded_datasources=embedded_ds,
|
|
795
788
|
)
|
|
796
|
-
|
|
797
|
-
if verbose:
|
|
798
|
-
click.echo(FeedbackManager.info_processing_file(filename=filename))
|
|
789
|
+
continue
|
|
799
790
|
|
|
800
|
-
|
|
801
|
-
|
|
791
|
+
if verbose:
|
|
792
|
+
click.echo(FeedbackManager.info_processing_file(filename=filename))
|
|
802
793
|
|
|
803
|
-
|
|
804
|
-
|
|
794
|
+
if ".incl" in filename:
|
|
795
|
+
click.echo(FeedbackManager.warning_skipping_include_file(file=filename))
|
|
805
796
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
tb_client=tb_client,
|
|
809
|
-
deps=deps_list,
|
|
810
|
-
dep_map=dep_map_dict,
|
|
811
|
-
to_run=to_run_dict,
|
|
812
|
-
vendor_paths=vendor_paths,
|
|
813
|
-
skip_connectors=skip_connectors,
|
|
814
|
-
current_ws=current_ws,
|
|
815
|
-
changed=changed,
|
|
816
|
-
fork_downstream=fork_downstream,
|
|
817
|
-
is_internal=is_internal,
|
|
818
|
-
dir_path=dir_path,
|
|
819
|
-
verbose=verbose,
|
|
820
|
-
embedded_datasources=embedded_ds,
|
|
821
|
-
)
|
|
822
|
-
processed_set.add(name)
|
|
797
|
+
if tb_client is None:
|
|
798
|
+
raise ValueError("tb_client cannot be None")
|
|
823
799
|
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
800
|
+
name, warnings = process(
|
|
801
|
+
filename=filename,
|
|
802
|
+
tb_client=tb_client,
|
|
803
|
+
deps=deps_list,
|
|
804
|
+
dep_map=dep_map_dict,
|
|
805
|
+
to_run=to_run_dict,
|
|
806
|
+
vendor_paths=vendor_paths,
|
|
807
|
+
skip_connectors=skip_connectors,
|
|
808
|
+
current_ws=current_ws,
|
|
809
|
+
changed=changed,
|
|
810
|
+
fork_downstream=fork_downstream,
|
|
811
|
+
is_internal=is_internal,
|
|
812
|
+
dir_path=dir_path,
|
|
813
|
+
verbose=verbose,
|
|
814
|
+
embedded_datasources=embedded_ds,
|
|
815
|
+
)
|
|
816
|
+
processed_set.add(name)
|
|
817
|
+
|
|
818
|
+
if verbose:
|
|
819
|
+
if len(warnings) == 1:
|
|
820
|
+
click.echo(FeedbackManager.warning_pipe_restricted_param(word=warnings[0]))
|
|
821
|
+
elif len(warnings) > 1:
|
|
822
|
+
click.echo(
|
|
823
|
+
FeedbackManager.warning_pipe_restricted_params(
|
|
824
|
+
words=", ".join(["'{}'".format(param) for param in warnings[:-1]]),
|
|
825
|
+
last_word=warnings[-1],
|
|
833
826
|
)
|
|
827
|
+
)
|
|
834
828
|
|
|
835
829
|
|
|
836
830
|
def build_graph(
|
|
@@ -1082,11 +1076,8 @@ def process_file(
|
|
|
1082
1076
|
raise click.ClickException(FeedbackManager.error_missing_table_arn(datasource=datasource["name"]))
|
|
1083
1077
|
if not params.get("import_export_bucket", None):
|
|
1084
1078
|
raise click.ClickException(FeedbackManager.error_missing_export_bucket(datasource=datasource["name"]))
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
raise click.ClickException(
|
|
1088
|
-
FeedbackManager.error_missing_external_datasource(datasource=datasource["name"])
|
|
1089
|
-
)
|
|
1079
|
+
elif not params.get("import_external_datasource", None):
|
|
1080
|
+
raise click.ClickException(FeedbackManager.error_missing_external_datasource(datasource=datasource["name"]))
|
|
1090
1081
|
|
|
1091
1082
|
return params
|
|
1092
1083
|
|