tinybird 0.0.1.dev278__tar.gz → 0.0.1.dev280__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 (146) hide show
  1. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/PKG-INFO +1 -1
  2. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/__cli__.py +2 -2
  3. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/agent.py +16 -3
  4. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/secret.py +0 -1
  5. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/utils.py +0 -1
  6. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/build.py +0 -3
  7. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/build_common.py +0 -2
  8. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/cli.py +7 -5
  9. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/common.py +28 -0
  10. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/exceptions.py +7 -0
  11. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/local.py +1 -29
  12. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/local_common.py +4 -1
  13. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/secret_common.py +7 -11
  14. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/test_common.py +10 -7
  15. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird.egg-info/PKG-INFO +1 -1
  16. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/setup.cfg +0 -0
  17. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/__cli__.py +0 -0
  18. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/ch_utils/constants.py +0 -0
  19. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/ch_utils/engine.py +0 -0
  20. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/check_pypi.py +0 -0
  21. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/client.py +0 -0
  22. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/config.py +0 -0
  23. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/connectors.py +0 -0
  24. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/context.py +0 -0
  25. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/datafile/common.py +0 -0
  26. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/datafile/exceptions.py +0 -0
  27. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/datafile/parse_connection.py +0 -0
  28. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/datafile/parse_datasource.py +0 -0
  29. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/datafile/parse_pipe.py +0 -0
  30. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/datatypes.py +0 -0
  31. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/feedback_manager.py +0 -0
  32. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/git_settings.py +0 -0
  33. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/prompts.py +0 -0
  34. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/sql.py +0 -0
  35. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/sql_template.py +0 -0
  36. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/sql_template_fmt.py +0 -0
  37. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/sql_toolset.py +0 -0
  38. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/syncasync.py +0 -0
  39. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/check_pypi.py +0 -0
  40. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/cli.py +0 -0
  41. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/client.py +0 -0
  42. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/config.py +0 -0
  43. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/__init__.py +0 -0
  44. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/animations.py +0 -0
  45. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/banner.py +0 -0
  46. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/command_agent.py +0 -0
  47. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/compactor.py +0 -0
  48. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/explore_agent.py +0 -0
  49. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/memory.py +0 -0
  50. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/models.py +0 -0
  51. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/prompts.py +0 -0
  52. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/testing_agent.py +0 -0
  53. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
  54. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
  55. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/append.py +0 -0
  56. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/build.py +0 -0
  57. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/datafile.py +0 -0
  58. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
  59. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
  60. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
  61. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/execute_query.py +0 -0
  62. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
  63. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
  64. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/mock.py +0 -0
  65. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/plan.py +0 -0
  66. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
  67. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
  68. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/agent/tools/test.py +0 -0
  69. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/cicd.py +0 -0
  70. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/config.py +0 -0
  71. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/connection.py +0 -0
  72. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/copy.py +0 -0
  73. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/create.py +0 -0
  74. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/build.py +0 -0
  75. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/build_common.py +0 -0
  76. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
  77. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
  78. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/diff.py +0 -0
  79. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/fixture.py +0 -0
  80. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/format_common.py +0 -0
  81. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
  82. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
  83. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
  84. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/playground.py +0 -0
  85. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datafile/pull.py +0 -0
  86. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/datasource.py +0 -0
  87. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/deployment.py +0 -0
  88. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/deployment_common.py +0 -0
  89. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/deprecations.py +0 -0
  90. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/dev_server.py +0 -0
  91. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/endpoint.py +0 -0
  92. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/feedback_manager.py +0 -0
  93. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/info.py +0 -0
  94. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/infra.py +0 -0
  95. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/job.py +0 -0
  96. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/llm.py +0 -0
  97. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/llm_utils.py +0 -0
  98. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/login.py +0 -0
  99. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/login_common.py +0 -0
  100. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/logout.py +0 -0
  101. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/materialization.py +0 -0
  102. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/mock.py +0 -0
  103. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/mock_common.py +0 -0
  104. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/open.py +0 -0
  105. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/pipe.py +0 -0
  106. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/project.py +0 -0
  107. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/regions.py +0 -0
  108. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/secret.py +0 -0
  109. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/shell.py +0 -0
  110. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/sink.py +0 -0
  111. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/table.py +0 -0
  112. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/telemetry.py +0 -0
  113. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/test.py +0 -0
  114. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
  115. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
  116. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/token.py +0 -0
  117. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/watch.py +0 -0
  118. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/workspace.py +0 -0
  119. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb/modules/workspace_members.py +0 -0
  120. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli.py +0 -0
  121. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/auth.py +0 -0
  122. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/branch.py +0 -0
  123. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/cicd.py +0 -0
  124. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/cli.py +0 -0
  125. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/common.py +0 -0
  126. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/config.py +0 -0
  127. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/connection.py +0 -0
  128. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/datasource.py +0 -0
  129. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/exceptions.py +0 -0
  130. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/fmt.py +0 -0
  131. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/job.py +0 -0
  132. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/pipe.py +0 -0
  133. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/regions.py +0 -0
  134. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/tag.py +0 -0
  135. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/telemetry.py +0 -0
  136. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/test.py +0 -0
  137. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  138. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  139. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/workspace.py +0 -0
  140. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  141. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird/tornado_template.py +0 -0
  142. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird.egg-info/SOURCES.txt +0 -0
  143. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird.egg-info/dependency_links.txt +0 -0
  144. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird.egg-info/entry_points.txt +0 -0
  145. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/tinybird.egg-info/requires.txt +0 -0
  146. {tinybird-0.0.1.dev278 → tinybird-0.0.1.dev280}/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.dev278
3
+ Version: 0.0.1.dev280
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -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.dev278'
8
- __revision__ = '422553e'
7
+ __version__ = '0.0.1.dev280'
8
+ __revision__ = 'e419ff7'
@@ -14,7 +14,9 @@ from pydantic_ai import Agent, RunContext, Tool
14
14
  from pydantic_ai.messages import ModelMessage, ModelRequest, UserPromptPart
15
15
  from requests import Response
16
16
 
17
+ from tinybird.tb.check_pypi import CheckPypi
17
18
  from tinybird.tb.client import TinyB
19
+ from tinybird.tb.config import CURRENT_VERSION
18
20
  from tinybird.tb.modules.agent.animations import ThinkingAnimation
19
21
  from tinybird.tb.modules.agent.banner import display_banner
20
22
  from tinybird.tb.modules.agent.command_agent import CommandAgent
@@ -54,6 +56,7 @@ from tinybird.tb.modules.common import (
54
56
  echo_safe_humanfriendly_tables_format_pretty_table,
55
57
  get_region_from_host,
56
58
  get_regions,
59
+ update_cli,
57
60
  )
58
61
  from tinybird.tb.modules.config import CLIConfig
59
62
  from tinybird.tb.modules.deployment_common import create_deployment
@@ -64,7 +67,6 @@ from tinybird.tb.modules.local_common import get_tinybird_local_client
64
67
  from tinybird.tb.modules.login_common import login
65
68
  from tinybird.tb.modules.mock_common import append_mock_data, create_mock_data
66
69
  from tinybird.tb.modules.project import Project
67
- from tinybird.tb.modules.secret_common import load_secrets
68
70
  from tinybird.tb.modules.test_common import run_tests as run_tests_common
69
71
 
70
72
 
@@ -206,7 +208,6 @@ class TinybirdAgent:
206
208
  str: The summary of the result.
207
209
  """
208
210
  result = self.explore_agent.run(task, deps=ctx.deps, usage=ctx.usage)
209
- self.explore_agent.clear_messages()
210
211
  return result.output or "No result returned"
211
212
 
212
213
  @self.agent.instructions
@@ -297,7 +298,6 @@ class TinybirdAgent:
297
298
  local_host=local_client.host,
298
299
  local_token=local_client.token,
299
300
  run_id=run_id,
300
- load_secrets_local=partial(load_secrets, project=project, client=local_client),
301
301
  )
302
302
 
303
303
  def run(self, user_prompt: str, config: dict[str, Any]) -> None:
@@ -371,6 +371,19 @@ class TinybirdAgent:
371
371
  def run_agent(
372
372
  config: dict[str, Any], project: Project, dangerously_skip_permissions: bool, prompt: Optional[str] = None
373
373
  ):
374
+ if not prompt:
375
+ latest_version = CheckPypi().get_latest_version()
376
+ if latest_version and "x.y.z" not in CURRENT_VERSION and latest_version != CURRENT_VERSION:
377
+ yes = click.confirm(
378
+ FeedbackManager.warning(
379
+ message=f"New version available. {CURRENT_VERSION} -> {latest_version}. Do you want to update now? [Y/n]"
380
+ ),
381
+ show_default=False,
382
+ default=True,
383
+ prompt_suffix="",
384
+ )
385
+ if yes:
386
+ update_cli()
374
387
  click.echo(FeedbackManager.highlight(message="» Initializing Tinybird Code..."))
375
388
  token = config.get("token", None)
376
389
  host = config.get("host", None)
@@ -84,7 +84,6 @@ def create_or_update_secrets(ctx: RunContext[TinybirdAgentContext], secrets: dic
84
84
  action = "Updating" if env_file_path.exists() and updated_keys else "Creating"
85
85
  click.echo(FeedbackManager.highlight(message=f"» {action} secrets in .env.local..."))
86
86
  env_file_path.write_text(new_content)
87
- ctx.deps.load_secrets_local()
88
87
  ctx.deps.build_project(test=False, silent=True, load_fixtures=False)
89
88
 
90
89
  # Generate success message
@@ -61,7 +61,6 @@ class TinybirdAgentContext(BaseModel):
61
61
  get_connection_datafile_cloud: Callable[..., str]
62
62
  get_connection_datafile_local: Callable[..., str]
63
63
  run_tests: Callable[..., Optional[str]]
64
- load_secrets_local: Callable[..., None]
65
64
  dangerously_skip_permissions: bool
66
65
  token: str
67
66
  user_token: str
@@ -20,7 +20,6 @@ from tinybird.tb.modules.datafile.playground import folder_playground
20
20
  from tinybird.tb.modules.dev_server import BuildStatus, start_server
21
21
  from tinybird.tb.modules.feedback_manager import FeedbackManager
22
22
  from tinybird.tb.modules.project import Project
23
- from tinybird.tb.modules.secret_common import load_secrets
24
23
  from tinybird.tb.modules.shell import Shell, print_table_formatted
25
24
  from tinybird.tb.modules.watch import watch_files, watch_project
26
25
 
@@ -47,7 +46,6 @@ def build(ctx: click.Context, watch: bool) -> None:
47
46
  )
48
47
  )
49
48
 
50
- load_secrets(project, tb_client)
51
49
  click.echo(FeedbackManager.highlight_building_project())
52
50
  process(project=project, tb_client=tb_client, watch=False)
53
51
  if watch:
@@ -76,7 +74,6 @@ def dev(ctx: click.Context, data_origin: str, ui: bool) -> None:
76
74
  # Wait for the server to start
77
75
  time.sleep(0.5)
78
76
 
79
- load_secrets(project, tb_client)
80
77
  click.echo(FeedbackManager.highlight_building_project())
81
78
  process(project=project, tb_client=tb_client, watch=True, build_status=build_status)
82
79
  run_watch(
@@ -14,7 +14,6 @@ from tinybird.tb.modules.datafile.fixture import FixtureExtension, get_fixture_d
14
14
  from tinybird.tb.modules.dev_server import BuildStatus
15
15
  from tinybird.tb.modules.feedback_manager import FeedbackManager
16
16
  from tinybird.tb.modules.project import Project
17
- from tinybird.tb.modules.secret_common import load_secrets
18
17
  from tinybird.tb.modules.shell import print_table_formatted
19
18
 
20
19
 
@@ -49,7 +48,6 @@ def process(
49
48
  build_status.building = False
50
49
  build_status.error = None
51
50
  elif file_changed and (file_changed.endswith(".env.local") or file_changed.endswith(".env")):
52
- load_secrets(project, tb_client)
53
51
  if build_status:
54
52
  build_status.building = False
55
53
  build_status.error = None
@@ -121,7 +121,8 @@ def cli(
121
121
  if getenv_bool("TB_DISABLE_SSL_CHECKS", False):
122
122
  click.echo(FeedbackManager.warning_disabled_ssl_checks())
123
123
 
124
- if not environ.get("PYTEST", None) and version_warning and not token:
124
+ is_agent_mode = ctx.invoked_subcommand is None
125
+ if not environ.get("PYTEST", None) and version_warning and not token and not is_agent_mode:
125
126
  latest_version = CheckPypi().get_latest_version()
126
127
  if latest_version:
127
128
  if "x.y.z" in CURRENT_VERSION:
@@ -195,16 +196,15 @@ def cli(
195
196
  if "--help" in sys.argv or "-h" in sys.argv:
196
197
  return
197
198
 
198
- client = create_ctx_client(ctx, config, cloud, staging, show_warnings=version_warning)
199
+ ctx.ensure_object(dict)["project"] = project
200
+ client = create_ctx_client(ctx, config, cloud, staging, project=project, show_warnings=version_warning)
199
201
 
200
202
  if client:
201
203
  ctx.ensure_object(dict)["client"] = client
202
204
 
203
- ctx.ensure_object(dict)["project"] = project
204
205
  ctx.ensure_object(dict)["env"] = get_target_env(cloud)
205
206
  ctx.ensure_object(dict)["output"] = output
206
207
 
207
- is_agent_mode = ctx.invoked_subcommand is None
208
208
  is_prompt_mode = prompt is not None
209
209
 
210
210
  if is_agent_mode or is_prompt_mode:
@@ -368,7 +368,9 @@ def __hide_click_output() -> None:
368
368
  click.secho = silent_secho # type: ignore
369
369
 
370
370
 
371
- def create_ctx_client(ctx: Context, config: Dict[str, Any], cloud: bool, staging: bool, show_warnings: bool = True):
371
+ def create_ctx_client(
372
+ ctx: Context, config: Dict[str, Any], cloud: bool, staging: bool, project: Project, show_warnings: bool = True
373
+ ):
372
374
  commands_without_ctx_client = [
373
375
  "auth",
374
376
  "check",
@@ -9,6 +9,7 @@ import json
9
9
  import os
10
10
  import re
11
11
  import socket
12
+ import subprocess
12
13
  import sys
13
14
  import time
14
15
  import uuid
@@ -2234,3 +2235,30 @@ def force_echo(string: str) -> None:
2234
2235
 
2235
2236
  def echo_json(data: Dict[str, Any], indent: Union[None, int, str] = None) -> None:
2236
2237
  force_echo(json.dumps(data, indent=indent))
2238
+
2239
+
2240
+ def update_cli() -> None:
2241
+ click.echo(FeedbackManager.highlight(message="» Updating Tinybird CLI..."))
2242
+
2243
+ try:
2244
+ process = subprocess.Popen(
2245
+ ["uv", "tool", "upgrade", "tinybird"],
2246
+ stdout=subprocess.PIPE,
2247
+ stderr=subprocess.PIPE,
2248
+ text=True,
2249
+ )
2250
+ except FileNotFoundError:
2251
+ raise CLIException(
2252
+ FeedbackManager.error(
2253
+ message="Cannot find required tool: uv. Reinstall using: curl https://tinybird.co | sh"
2254
+ )
2255
+ )
2256
+
2257
+ stdout, stderr = process.communicate()
2258
+ if "Nothing to upgrade" not in stdout + stderr:
2259
+ for line in stdout.split("\n") + stderr.split("\n"):
2260
+ if "Updated tinybird" in line:
2261
+ click.echo(FeedbackManager.info(message=f"» {line}"))
2262
+ click.echo(FeedbackManager.success(message="✓ Tinybird CLI updated"))
2263
+ else:
2264
+ click.echo(FeedbackManager.info(message="✓ Tinybird CLI is already up-to-date"))
@@ -139,3 +139,10 @@ class CLILocalException(CLIException):
139
139
 
140
140
  def __init__(self, message: str, **kw_telemetry_event_data: Any) -> None:
141
141
  super().__init__(message, "local_error", **kw_telemetry_event_data)
142
+
143
+
144
+ class CLISecretException(CLIException):
145
+ """Exceptions generated by the secret commands"""
146
+
147
+ def __init__(self, message: str, **kw_telemetry_event_data: Any) -> None:
148
+ super().__init__(message, "secret_error", **kw_telemetry_event_data)
@@ -1,4 +1,3 @@
1
- import subprocess
2
1
  from pathlib import Path
3
2
 
4
3
  import click
@@ -6,7 +5,7 @@ import requests
6
5
 
7
6
  from docker.client import DockerClient
8
7
  from tinybird.tb.modules.cli import cli
9
- from tinybird.tb.modules.exceptions import CLIException
8
+ from tinybird.tb.modules.common import update_cli
10
9
  from tinybird.tb.modules.feedback_manager import FeedbackManager
11
10
  from tinybird.tb.modules.local_common import (
12
11
  TB_CONTAINER_NAME,
@@ -42,33 +41,6 @@ def remove_tinybird_local(docker_client: DockerClient, persist_data: bool) -> No
42
41
  pass
43
42
 
44
43
 
45
- def update_cli() -> None:
46
- click.echo(FeedbackManager.highlight(message="» Updating Tinybird CLI..."))
47
-
48
- try:
49
- process = subprocess.Popen(
50
- ["uv", "tool", "upgrade", "tinybird"],
51
- stdout=subprocess.PIPE,
52
- stderr=subprocess.PIPE,
53
- text=True,
54
- )
55
- except FileNotFoundError:
56
- raise CLIException(
57
- FeedbackManager.error(
58
- message="Cannot find required tool: uv. Reinstall using: curl https://tinybird.co | sh"
59
- )
60
- )
61
-
62
- stdout, stderr = process.communicate()
63
- if "Nothing to upgrade" not in stdout + stderr:
64
- for line in stdout.split("\n") + stderr.split("\n"):
65
- if "Updated tinybird" in line:
66
- click.echo(FeedbackManager.info(message=f"» {line}"))
67
- click.echo(FeedbackManager.success(message="✓ Tinybird CLI updated"))
68
- else:
69
- click.echo(FeedbackManager.info(message="✓ Tinybird CLI is already up-to-date"))
70
-
71
-
72
44
  @cli.command()
73
45
  def update() -> None:
74
46
  """Update Tinybird CLI to the latest version."""
@@ -18,6 +18,7 @@ from tinybird.tb.client import AuthNoTokenException, TinyB
18
18
  from tinybird.tb.modules.config import CLIConfig
19
19
  from tinybird.tb.modules.exceptions import CLILocalException
20
20
  from tinybird.tb.modules.feedback_manager import FeedbackManager
21
+ from tinybird.tb.modules.secret_common import load_secrets
21
22
  from tinybird.tb.modules.telemetry import add_telemetry_event
22
23
 
23
24
  TB_IMAGE_NAME = "tinybirdco/tinybird-local:latest"
@@ -34,7 +35,9 @@ def get_tinybird_local_client(
34
35
  """Get a Tinybird client connected to the local environment."""
35
36
 
36
37
  config = get_tinybird_local_config(config_obj, test=test, silent=silent)
37
- return config.get_client(host=TB_LOCAL_ADDRESS, staging=staging)
38
+ client = config.get_client(host=TB_LOCAL_ADDRESS, staging=staging)
39
+ load_secrets(config_obj.get("path", ""), client)
40
+ return client
38
41
 
39
42
 
40
43
  def get_tinybird_local_config(config_obj: Dict[str, Any], test: bool = False, silent: bool = False) -> CLIConfig:
@@ -1,20 +1,19 @@
1
+ from pathlib import Path
1
2
  from typing import Dict
2
3
 
3
- import click
4
4
  from dotenv import dotenv_values
5
5
 
6
6
  from tinybird.tb.client import TinyB
7
- from tinybird.tb.modules.feedback_manager import FeedbackManager
8
- from tinybird.tb.modules.project import Project
7
+ from tinybird.tb.modules.exceptions import CLISecretException
9
8
 
10
9
 
11
- def load_secrets(project: Project, client: TinyB):
10
+ def load_secrets(project_folder: str, client: TinyB):
12
11
  try:
13
12
  env_vars: Dict[str, str] = {}
14
13
 
15
14
  # Load secrets from .env file
16
15
  env_file = ".env"
17
- env_path = project.path / env_file
16
+ env_path = Path(project_folder) / env_file
18
17
 
19
18
  if env_path.exists():
20
19
  env_values = dotenv_values(env_path)
@@ -23,7 +22,7 @@ def load_secrets(project: Project, client: TinyB):
23
22
 
24
23
  # Load secrets from .env.local file
25
24
  env_file = ".env.local"
26
- env_path = project.path / env_file
25
+ env_path = Path(project_folder) / env_file
27
26
 
28
27
  if env_path.exists():
29
28
  env_values = dotenv_values(env_path)
@@ -33,8 +32,6 @@ def load_secrets(project: Project, client: TinyB):
33
32
  if len(env_vars.keys()) == 0:
34
33
  return
35
34
 
36
- click.echo(FeedbackManager.highlight(message="\n» Loading secrets from .env files..."))
37
-
38
35
  for name, value in env_vars.items():
39
36
  if not value:
40
37
  continue
@@ -49,8 +46,7 @@ def load_secrets(project: Project, client: TinyB):
49
46
  else:
50
47
  client.create_secret(name, value)
51
48
  except Exception as e:
52
- click.echo(FeedbackManager.error(message=f"Error setting secret '{name}': {e}"))
49
+ raise Exception(f"Error setting secret '{name}': {e}")
53
50
 
54
- click.echo(FeedbackManager.success(message="✓ Secrets loaded!"))
55
51
  except Exception as e:
56
- click.echo(FeedbackManager.error(message=f"✗ Error: {e}"))
52
+ raise CLISecretException(str(e))
@@ -25,7 +25,6 @@ from tinybird.tb.modules.llm import LLM
25
25
  from tinybird.tb.modules.llm_utils import extract_xml, parse_xml
26
26
  from tinybird.tb.modules.local_common import get_local_tokens, get_test_workspace_name
27
27
  from tinybird.tb.modules.project import Project
28
- from tinybird.tb.modules.secret_common import load_secrets
29
28
 
30
29
  yaml.SafeDumper.org_represent_str = yaml.SafeDumper.represent_str # type: ignore[attr-defined]
31
30
 
@@ -64,9 +63,10 @@ def create_test(
64
63
  tests: List[Dict[str, Any]] = []
65
64
 
66
65
  try:
67
- load_secrets(project=project, client=client)
68
66
  click.echo(FeedbackManager.highlight(message="\n» Building test environment"))
69
- build_project(project=project, tb_client=client, watch=False, silent=True)
67
+ build_error = build_project(project=project, tb_client=client, watch=False, silent=True, exit_on_error=False)
68
+ if build_error:
69
+ raise Exception(build_error)
70
70
  click.echo(FeedbackManager.info(message="✓ Done!\n"))
71
71
  config = CLIConfig.get_project_config()
72
72
  folder = project.folder
@@ -145,9 +145,11 @@ def dump_tests(tests: List[Dict[str, Any]]) -> str:
145
145
  def update_test(pipe: str, project: Project, client: TinyB) -> None:
146
146
  try:
147
147
  folder = project.folder
148
- load_secrets(project=project, client=client)
149
148
  click.echo(FeedbackManager.highlight(message="\n» Building test environment"))
150
- build_project(project=project, tb_client=client, watch=False, silent=True)
149
+ build_error = build_project(project=project, tb_client=client, watch=False, silent=True, exit_on_error=False)
150
+ if build_error:
151
+ raise Exception(build_error)
152
+
151
153
  click.echo(FeedbackManager.info(message="✓ Done!"))
152
154
  pipe_tests_path = get_pipe_path(pipe, folder)
153
155
  pipe_name = pipe_tests_path.stem
@@ -191,9 +193,10 @@ def update_test(pipe: str, project: Project, client: TinyB) -> None:
191
193
  def run_tests(name: Tuple[str, ...], project: Project, client: TinyB) -> Optional[str]:
192
194
  full_error = ""
193
195
  try:
194
- load_secrets(project=project, client=client)
195
196
  click.echo(FeedbackManager.highlight(message="\n» Building test environment"))
196
- build_project(project=project, tb_client=client, watch=False, silent=True)
197
+ build_error = build_project(project=project, tb_client=client, watch=False, silent=True, exit_on_error=False)
198
+ if build_error:
199
+ raise Exception(build_error)
197
200
  click.echo(FeedbackManager.info(message="✓ Done!"))
198
201
 
199
202
  click.echo(FeedbackManager.highlight(message="\n» Running tests"))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev278
3
+ Version: 0.0.1.dev280
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird