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.

Files changed (150) hide show
  1. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/PKG-INFO +2 -1
  2. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/sql_template.py +14 -7
  3. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/__cli__.py +2 -2
  4. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/banner.py +14 -14
  5. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/execute_query.py +13 -16
  6. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/utils.py +37 -46
  7. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/build_common.py +16 -17
  8. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/cli.py +3 -4
  9. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/common.py +9 -10
  10. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build.py +26 -37
  11. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build_datasource.py +21 -25
  12. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/format_pipe.py +1 -1
  13. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/playground.py +58 -67
  14. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/pull.py +2 -3
  15. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/deployment_common.py +3 -1
  16. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/infra.py +4 -5
  17. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/local.py +53 -3
  18. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/local_common.py +10 -2
  19. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/login.py +18 -0
  20. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/login_common.py +2 -3
  21. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/telemetry.py +4 -0
  22. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -14
  23. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -6
  24. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -14
  25. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -6
  26. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tornado_template.py +4 -5
  27. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/PKG-INFO +2 -1
  28. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/requires.txt +1 -0
  29. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/setup.cfg +0 -0
  30. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/__cli__.py +0 -0
  31. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/ch_utils/constants.py +0 -0
  32. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/ch_utils/engine.py +0 -0
  33. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/check_pypi.py +0 -0
  34. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/client.py +0 -0
  35. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/config.py +0 -0
  36. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/connectors.py +0 -0
  37. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/context.py +0 -0
  38. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/common.py +0 -0
  39. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/exceptions.py +0 -0
  40. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/parse_connection.py +0 -0
  41. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/parse_datasource.py +0 -0
  42. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datafile/parse_pipe.py +0 -0
  43. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/datatypes.py +0 -0
  44. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/feedback_manager.py +0 -0
  45. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/git_settings.py +0 -0
  46. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/prompts.py +0 -0
  47. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/service_datasources.py +0 -0
  48. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/sql.py +0 -0
  49. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/sql_template_fmt.py +0 -0
  50. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/sql_toolset.py +0 -0
  51. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/syncasync.py +0 -0
  52. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/check_pypi.py +0 -0
  53. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/cli.py +0 -0
  54. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/client.py +0 -0
  55. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/config.py +0 -0
  56. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/__init__.py +0 -0
  57. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/agent.py +0 -0
  58. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/animations.py +0 -0
  59. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/command_agent.py +0 -0
  60. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/compactor.py +0 -0
  61. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/explore_agent.py +0 -0
  62. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/file_agent.py +0 -0
  63. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/memory.py +0 -0
  64. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/mock_agent.py +0 -0
  65. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/models.py +0 -0
  66. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/prompts.py +0 -0
  67. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/testing_agent.py +0 -0
  68. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
  69. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
  70. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/append.py +0 -0
  71. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/build.py +0 -0
  72. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/datafile.py +0 -0
  73. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
  74. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
  75. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
  76. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/file.py +0 -0
  77. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
  78. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
  79. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/mock.py +0 -0
  80. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/plan.py +0 -0
  81. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
  82. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
  83. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/secret.py +0 -0
  84. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/agent/tools/test.py +0 -0
  85. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/build.py +0 -0
  86. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/cicd.py +0 -0
  87. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/config.py +0 -0
  88. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/connection.py +0 -0
  89. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/copy.py +0 -0
  90. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/create.py +0 -0
  91. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build_common.py +0 -0
  92. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
  93. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/diff.py +0 -0
  94. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/fixture.py +0 -0
  95. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/format_common.py +0 -0
  96. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
  97. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
  98. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/datasource.py +0 -0
  99. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/deployment.py +0 -0
  100. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/deprecations.py +0 -0
  101. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/dev_server.py +0 -0
  102. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/endpoint.py +0 -0
  103. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/exceptions.py +0 -0
  104. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/feedback_manager.py +0 -0
  105. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/info.py +0 -0
  106. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/job.py +0 -0
  107. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/llm.py +0 -0
  108. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/llm_utils.py +0 -0
  109. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/logout.py +0 -0
  110. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/materialization.py +0 -0
  111. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/mock.py +0 -0
  112. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/mock_common.py +0 -0
  113. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/open.py +0 -0
  114. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/pipe.py +0 -0
  115. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/project.py +0 -0
  116. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/regions.py +0 -0
  117. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/secret.py +0 -0
  118. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/secret_common.py +0 -0
  119. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/shell.py +0 -0
  120. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/sink.py +0 -0
  121. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/table.py +0 -0
  122. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/test.py +0 -0
  123. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/test_common.py +0 -0
  124. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/token.py +0 -0
  125. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/watch.py +0 -0
  126. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/workspace.py +0 -0
  127. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb/modules/workspace_members.py +0 -0
  128. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli.py +0 -0
  129. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/auth.py +0 -0
  130. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/branch.py +0 -0
  131. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/cicd.py +0 -0
  132. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/cli.py +0 -0
  133. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/common.py +0 -0
  134. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/config.py +0 -0
  135. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/connection.py +0 -0
  136. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/datasource.py +0 -0
  137. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/exceptions.py +0 -0
  138. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/fmt.py +0 -0
  139. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/job.py +0 -0
  140. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/pipe.py +0 -0
  141. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/regions.py +0 -0
  142. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/tag.py +0 -0
  143. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/telemetry.py +0 -0
  144. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/test.py +0 -0
  145. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/workspace.py +0 -0
  146. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  147. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/SOURCES.txt +0 -0
  148. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/dependency_links.txt +0 -0
  149. {tinybird-0.0.1.dev303 → tinybird-0.0.1.dev305}/tinybird.egg-info/entry_points.txt +0 -0
  150. {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.dev303
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
- else:
388
- if _type and _type in types:
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.dev303'
8
- __revision__ = 'ff545f6'
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
- else:
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
- else:
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"
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
@@ -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
- if script:
130
- try:
131
- # Execute the LLM-generated plotext script
132
- chart_output = _execute_plotext_script(script, result["data"], result["meta"])
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
- if diff_marker:
584
- if COLORAMA_AVAILABLE:
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
- # Calculate how much space we need to fill with background
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
- line = f"{vertical} {Back.RED} {content}{' ' * content_padding}{Style.RESET_ALL}"
622
- else:
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
- # Calculate how much space we need to fill with background
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
- line = f"{vertical} {Back.GREEN} {content}{' ' * content_padding}{Style.RESET_ALL}"
632
- else:
633
- line = f"{vertical} {Back.GREEN} {content}{Style.RESET_ALL}"
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} {content}"
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
- else:
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"))
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
- else:
284
- if not silent:
285
- echo_changes(project, new_datasources, ".datasource", "created")
286
- echo_changes(project, changed_datasources, ".datasource", "changed")
287
- echo_changes(project, deleted_datasources, ".datasource", "deleted")
288
- echo_changes(project, new_pipes, ".pipe", "created")
289
- echo_changes(project, changed_pipes, ".pipe", "changed")
290
- echo_changes(project, deleted_pipes, ".pipe", "deleted")
291
- echo_changes(project, new_connections, ".connection", "created")
292
- echo_changes(project, changed_connections, ".connection", "changed")
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
- if show_tokens or not cloud or ctx.invoked_subcommand == "build":
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
- if len(organizations) == 1:
2202
- organization_name = organizations[0]["name"]
2203
- organization_id = organizations[0]["id"]
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
- sorted_organizations = sort_organizations_by_user(organizations, user_email=user_email)
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
- else:
132
- if raise_on_exists:
133
- raise AlreadyExistsException(
134
- FeedbackManager.warning_name_already_exists(
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
- if name_matches_existing_resource(resource, name, tb_client):
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
- if name_matches_existing_resource(resource, name, tb_client):
160
- if resource == "pipes":
161
- click.echo(FeedbackManager.warning_pipe_cannot_be_pushed(name=name))
162
- else:
163
- click.echo(FeedbackManager.warning_datasource_cannot_be_pushed(name=name))
164
- else:
165
- click.echo(FeedbackManager.warning_dry_name_already_exists(name=name))
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
- else:
936
- if not params.get("import_external_datasource", None):
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
 
@@ -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
- # removed replacing by default. When a datasource is removed data is
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
- else:
218
- if raise_on_exists:
219
- raise AlreadyExistsException(
220
- FeedbackManager.warning_name_already_exists(
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
- if name_matches_existing_resource(resource, name, tb_client):
226
- if resource == "pipes":
227
- click.echo(FeedbackManager.error_pipe_cannot_be_pushed(name=name))
228
- else:
229
- click.echo(FeedbackManager.error_datasource_cannot_be_pushed(name=name))
230
- else:
231
- click.echo(
232
- FeedbackManager.warning_name_already_exists(
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
- else:
245
- if name_matches_existing_resource(resource, name, tb_client):
246
- if resource == "pipes":
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.warning_dry_name_already_exists(name=name))
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
- else:
797
- if verbose:
798
- click.echo(FeedbackManager.info_processing_file(filename=filename))
789
+ continue
799
790
 
800
- if ".incl" in filename:
801
- click.echo(FeedbackManager.warning_skipping_include_file(file=filename))
791
+ if verbose:
792
+ click.echo(FeedbackManager.info_processing_file(filename=filename))
802
793
 
803
- if tb_client is None:
804
- raise ValueError("tb_client cannot be None")
794
+ if ".incl" in filename:
795
+ click.echo(FeedbackManager.warning_skipping_include_file(file=filename))
805
796
 
806
- name, warnings = process(
807
- filename=filename,
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
- if verbose:
825
- if len(warnings) == 1:
826
- click.echo(FeedbackManager.warning_pipe_restricted_param(word=warnings[0]))
827
- elif len(warnings) > 1:
828
- click.echo(
829
- FeedbackManager.warning_pipe_restricted_params(
830
- words=", ".join(["'{}'".format(param) for param in warnings[:-1]]),
831
- last_word=warnings[-1],
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
- else:
1086
- if not params.get("import_external_datasource", None):
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