tinybird 3.2.1.dev0__tar.gz → 3.3.1.dev0__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.
Files changed (157) hide show
  1. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/PKG-INFO +8 -1
  2. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/service_datasources.py +26 -97
  3. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/sql_toolset.py +1 -1
  4. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/__cli__.py +2 -2
  5. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/client.py +24 -0
  6. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/build.py +0 -2
  7. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datasource.py +149 -1
  8. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/feedback_manager.py +6 -0
  9. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/tinyunit/tinyunit.py +1 -1
  10. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +1 -1
  11. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird.egg-info/PKG-INFO +8 -1
  12. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/setup.cfg +0 -0
  13. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/__cli__.py +0 -0
  14. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/ch_utils/constants.py +0 -0
  15. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/ch_utils/engine.py +0 -0
  16. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/check_pypi.py +0 -0
  17. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/client.py +0 -0
  18. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/config.py +0 -0
  19. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/context.py +0 -0
  20. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/datafile/common.py +0 -0
  21. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/datafile/exceptions.py +0 -0
  22. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/datafile/parse_connection.py +0 -0
  23. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/datafile/parse_datasource.py +0 -0
  24. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/datafile/parse_pipe.py +0 -0
  25. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/datatypes.py +0 -0
  26. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/feedback_manager.py +0 -0
  27. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/git_settings.py +0 -0
  28. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/prompts.py +0 -0
  29. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/sql.py +0 -0
  30. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/sql_template.py +0 -0
  31. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/sql_template_fmt.py +0 -0
  32. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/syncasync.py +0 -0
  33. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/check_pypi.py +0 -0
  34. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/cli.py +0 -0
  35. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/config.py +0 -0
  36. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/__init__.py +0 -0
  37. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/agent.py +0 -0
  38. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/animations.py +0 -0
  39. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/banner.py +0 -0
  40. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/command_agent.py +0 -0
  41. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/compactor.py +0 -0
  42. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/explore_agent.py +0 -0
  43. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/file_agent.py +0 -0
  44. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/memory.py +0 -0
  45. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/mock_agent.py +0 -0
  46. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/models.py +0 -0
  47. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/prompts.py +0 -0
  48. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/testing_agent.py +0 -0
  49. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
  50. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
  51. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/append.py +0 -0
  52. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/build.py +0 -0
  53. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/datafile.py +0 -0
  54. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
  55. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
  56. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
  57. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/execute_query.py +0 -0
  58. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/file.py +0 -0
  59. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
  60. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
  61. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/mock.py +0 -0
  62. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/plan.py +0 -0
  63. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
  64. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
  65. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/secret.py +0 -0
  66. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/tools/test.py +0 -0
  67. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/agent/utils.py +0 -0
  68. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/branch.py +0 -0
  69. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/build_common.py +0 -0
  70. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/cicd.py +0 -0
  71. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/cli.py +0 -0
  72. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/common.py +0 -0
  73. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/config.py +0 -0
  74. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/connection.py +0 -0
  75. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/connection_kafka.py +0 -0
  76. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/connection_s3.py +0 -0
  77. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/copy.py +0 -0
  78. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/create.py +0 -0
  79. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/build.py +0 -0
  80. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/build_common.py +0 -0
  81. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
  82. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
  83. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/diff.py +0 -0
  84. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/fixture.py +0 -0
  85. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/format_common.py +0 -0
  86. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/format_connection.py +0 -0
  87. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
  88. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
  89. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
  90. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/playground.py +0 -0
  91. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/datafile/pull.py +0 -0
  92. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/deployment.py +0 -0
  93. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/deployment_common.py +0 -0
  94. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/deprecations.py +0 -0
  95. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/dev_server.py +0 -0
  96. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/endpoint.py +0 -0
  97. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/exceptions.py +0 -0
  98. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/fmt.py +0 -0
  99. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/info.py +0 -0
  100. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/infra.py +0 -0
  101. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/job.py +0 -0
  102. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/job_common.py +0 -0
  103. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/llm.py +0 -0
  104. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/llm_utils.py +0 -0
  105. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/local.py +0 -0
  106. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/local_common.py +0 -0
  107. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/local_logs.py +0 -0
  108. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/login.py +0 -0
  109. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/login_common.py +0 -0
  110. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/logout.py +0 -0
  111. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/materialization.py +0 -0
  112. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/mock.py +0 -0
  113. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/mock_common.py +0 -0
  114. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/open.py +0 -0
  115. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/pipe.py +0 -0
  116. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/project.py +0 -0
  117. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/project_commands.py +0 -0
  118. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/regions.py +0 -0
  119. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/secret.py +0 -0
  120. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/secret_common.py +0 -0
  121. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/shell.py +0 -0
  122. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/sink.py +0 -0
  123. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/table.py +0 -0
  124. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/telemetry.py +0 -0
  125. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/test.py +0 -0
  126. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/test_common.py +0 -0
  127. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
  128. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/token.py +0 -0
  129. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/watch.py +0 -0
  130. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/workspace.py +0 -0
  131. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb/modules/workspace_members.py +0 -0
  132. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli.py +0 -0
  133. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/auth.py +0 -0
  134. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/branch.py +0 -0
  135. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/cicd.py +0 -0
  136. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/cli.py +0 -0
  137. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/common.py +0 -0
  138. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/config.py +0 -0
  139. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/connection.py +0 -0
  140. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/datasource.py +0 -0
  141. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/exceptions.py +0 -0
  142. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/fmt.py +0 -0
  143. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/job.py +0 -0
  144. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/pipe.py +0 -0
  145. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/regions.py +0 -0
  146. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/tag.py +0 -0
  147. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/telemetry.py +0 -0
  148. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/test.py +0 -0
  149. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  150. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/workspace.py +0 -0
  151. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  152. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird/tornado_template.py +0 -0
  153. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird.egg-info/SOURCES.txt +0 -0
  154. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird.egg-info/dependency_links.txt +0 -0
  155. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird.egg-info/entry_points.txt +0 -0
  156. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird.egg-info/requires.txt +0 -0
  157. {tinybird-3.2.1.dev0 → tinybird-3.3.1.dev0}/tinybird.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 3.2.1.dev0
3
+ Version: 3.3.1.dev0
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -57,6 +57,13 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
57
57
  Changelog
58
58
  ----------
59
59
 
60
+ 3.3.0
61
+ *******
62
+
63
+ - `Added` ``tb datasource stop`` and ``tb datasource start`` commands to pause/resume Kafka ingestion in forward branches
64
+ - `Added` ``POST /v0/datasources/{name}/sample`` API endpoint to import sample data from S3/GCS connections in forward branches
65
+ - `Changed` ``--with-connections`` flag for ``tb build`` and ``tb deploy`` is now stable (previously experimental)
66
+
60
67
  3.0.2
61
68
  *******
62
69
 
@@ -483,54 +483,6 @@ def get_tinybird_service_datasources() -> List[Dict[str, Any]]:
483
483
  {"name": "feature", "type": "String"},
484
484
  ],
485
485
  },
486
- {
487
- "name": "tinybird.query_metrics",
488
- "description": "Query stats metrics from your workspace.",
489
- "dateColumn": "event_time",
490
- "engine": {
491
- "engine": "ReplacingMergeTree",
492
- "sorting_key": "event_time, organization_id, query_id",
493
- "partition_key": "toStartOfDay(event_time)",
494
- "ttl": "toDate(event_time) + INTERVAL 30 DAY",
495
- },
496
- "columns": [
497
- {"name": "event_time", "type": "DateTime"},
498
- {"name": "organization_id", "type": "String"},
499
- {"name": "workspace_id", "type": "String"},
500
- {"name": "query", "type": "String"},
501
- {"name": "query_id", "type": "String"},
502
- {"name": "query_type", "type": "String"},
503
- {"name": "query_start_time", "type": "DateTime"},
504
- {"name": "query_duration_ms", "type": "Int32"},
505
- {"name": "pipe_id", "type": "String"},
506
- {"name": "job_id", "type": "String"},
507
- {"name": "job_kind", "type": "String"},
508
- {"name": "read_rows", "type": "Int32"},
509
- {"name": "read_bytes", "type": "Int32"},
510
- {"name": "written_rows", "type": "Int32"},
511
- {"name": "written_bytes", "type": "Int32"},
512
- {"name": "memory_usage", "type": "Int32"},
513
- {"name": "vcpu_time", "type": "Float32"},
514
- {"name": "exception_code", "type": "Int32"},
515
- {"name": "exception", "type": "String"},
516
- ],
517
- },
518
- {
519
- "name": "tinybird.vcpu_time",
520
- "description": "vCPU time metrics from your workspace.",
521
- "dateColumn": "second_slot",
522
- "engine": {
523
- "engine": "AggregatingMergeTree",
524
- "sorting_key": "organization_id, second_slot",
525
- "partition_key": "toStartOfDay(second_slot)",
526
- "ttl": "toDate(second_slot) + INTERVAL 30 DAY",
527
- },
528
- "columns": [
529
- {"name": "second_slot", "type": "DateTime"},
530
- {"name": "organization_id", "type": "String"},
531
- {"name": "vcpu_time", "type": "Float64"},
532
- ],
533
- },
534
486
  {
535
487
  "name": "tinybird.query_validator_log",
536
488
  "description": "Log of failed queries executions in the next available ClickHouse version and their results.",
@@ -559,6 +511,32 @@ def get_tinybird_service_datasources() -> List[Dict[str, Any]]:
559
511
  {"name": "run_validation", "type": "DateTime"},
560
512
  ],
561
513
  },
514
+ {
515
+ "name": "tinybird.hfi_requests",
516
+ "description": "HFI requests telemetry from your workspace.",
517
+ "dateColumn": "event_time",
518
+ "engine": {
519
+ "engine": "SummingMergeTree",
520
+ "sorting_key": "workspace_id, datasource_id, event_time",
521
+ "partition_key": "toYYYYMM(event_time)",
522
+ },
523
+ "columns": [
524
+ {"name": "event_time", "type": "DateTime"},
525
+ {"name": "workspace_id", "type": "String"},
526
+ {"name": "datasource_id", "type": "String"},
527
+ {"name": "successful_requests", "type": "UInt64"},
528
+ {"name": "error_requests", "type": "UInt64"},
529
+ {"name": "rows_total", "type": "UInt64"},
530
+ {"name": "rows_successful", "type": "UInt64"},
531
+ {"name": "rows_quarantined", "type": "UInt64"},
532
+ {"name": "bytes_received", "type": "UInt64"},
533
+ {"name": "bytes_decompressed", "type": "UInt64"},
534
+ {"name": "ch_written_rows", "type": "UInt64"},
535
+ {"name": "ch_written_bytes", "type": "UInt64"},
536
+ {"name": "ch_cpu_time", "type": "Float32"},
537
+ {"name": "rate_limited", "type": "UInt8"},
538
+ ],
539
+ },
562
540
  ]
563
541
 
564
542
 
@@ -1055,55 +1033,6 @@ def get_organization_service_datasources() -> List[Dict[str, Any]]:
1055
1033
  {"name": "feature", "type": "String"},
1056
1034
  ],
1057
1035
  },
1058
- {
1059
- "name": "organization.query_metrics",
1060
- "description": "Query stats metrics from your workspace.",
1061
- "dateColumn": "event_time",
1062
- "engine": {
1063
- "engine": "ReplacingMergeTree",
1064
- "sorting_key": "event_time, organization_id, query_id",
1065
- "partition_key": "toStartOfDay(event_time)",
1066
- "ttl": "toDate(event_time) + INTERVAL 30 DAY",
1067
- },
1068
- "columns": [
1069
- {"name": "event_time", "type": "DateTime"},
1070
- {"name": "organization_id", "type": "String"},
1071
- {"name": "workspace_id", "type": "String"},
1072
- {"name": "query", "type": "String"},
1073
- {"name": "query_id", "type": "String"},
1074
- {"name": "query_type", "type": "String"},
1075
- {"name": "query_start_time", "type": "DateTime"},
1076
- {"name": "query_duration_ms", "type": "Int32"},
1077
- {"name": "pipe_id", "type": "String"},
1078
- {"name": "job_id", "type": "String"},
1079
- {"name": "job_kind", "type": "String"},
1080
- {"name": "read_rows", "type": "Int32"},
1081
- {"name": "read_bytes", "type": "Int32"},
1082
- {"name": "written_rows", "type": "Int32"},
1083
- {"name": "written_bytes", "type": "Int32"},
1084
- {"name": "memory_usage", "type": "Int32"},
1085
- {"name": "vcpu_time", "type": "Float32"},
1086
- {"name": "exception_code", "type": "Int32"},
1087
- {"name": "exception", "type": "String"},
1088
- ],
1089
- },
1090
- {
1091
- "name": "organization.vcpu_time",
1092
- "description": "vCPU time metrics from your workspace.",
1093
- "dateColumn": "second_slot",
1094
- "engine": {
1095
- "engine": "AggregatingMergeTree",
1096
- "sorting_key": "organization_id, second_slot",
1097
- "partition_key": "toStartOfDay(second_slot)",
1098
- "ttl": "toDate(second_slot) + INTERVAL 30 DAY",
1099
- },
1100
- "columns": [
1101
- {"name": "second_slot", "type": "DateTime"},
1102
- {"name": "organization_id", "type": "String"},
1103
- {"name": "workspace_id", "type": "String"},
1104
- {"name": "vcpu_time", "type": "Float64"},
1105
- ],
1106
- },
1107
1036
  ]
1108
1037
 
1109
1038
 
@@ -539,7 +539,7 @@ def replace_tables(
539
539
  if (
540
540
  dependent_table[2]
541
541
  and dependent_table[2] not in _enabled_table_functions
542
- and not (dependent_table[2] in ["cluster"] and replacement[0] == VALID_REMOTE)
542
+ and not (dependent_table[2] == "cluster" and replacement[0] == VALID_REMOTE)
543
543
  ):
544
544
  raise InvalidFunction(table_function_name=dependent_table[2])
545
545
  if dependent_table[0] or dependent_table[1]:
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://www.tinybird.co/docs/forward/commands'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '3.2.1.dev0'
8
- __revision__ = '5429eb1'
7
+ __version__ = '3.3.1.dev0'
8
+ __revision__ = '6508f3b'
@@ -449,6 +449,14 @@ class TinyB:
449
449
  def datasource_truncate(self, datasource_name: str):
450
450
  return self._req(f"/v0/datasources/{datasource_name}/truncate", method="POST", data="")
451
451
 
452
+ def datasource_stop(self, datasource_name: str) -> dict:
453
+ """Stop Kafka ingestion for a datasource in a forward branch."""
454
+ return self._req(f"/v0/datasources/{datasource_name}/stop", method="POST", data="")
455
+
456
+ def datasource_start(self, datasource_name: str) -> dict:
457
+ """Start Kafka ingestion for a datasource in a forward branch."""
458
+ return self._req(f"/v0/datasources/{datasource_name}/start", method="POST", data="")
459
+
452
460
  def datasource_delete_rows(self, datasource_name: str, delete_condition: str, dry_run: bool = False):
453
461
  params = {"delete_condition": delete_condition}
454
462
  if dry_run:
@@ -483,6 +491,22 @@ class TinyB:
483
491
  def datasource_sync(self, datasource_id: str):
484
492
  return self._req(f"/v0/datasources/{datasource_id}/scheduling/runs", method="POST", data="")
485
493
 
494
+ def datasource_sample(self, datasource_name: str, max_files: int = 1) -> Dict[str, Any]:
495
+ """Start a sample import job for an S3/GCS connected datasource.
496
+
497
+ Args:
498
+ datasource_name: Name of the datasource to import sample data into
499
+ max_files: Maximum number of files to import (default 1, max 10)
500
+
501
+ Returns:
502
+ dict with job info including id, job_id, job_url, job, status
503
+ """
504
+ return self._req(
505
+ f"/v0/datasources/{datasource_name}/sample",
506
+ method="POST",
507
+ data=json.dumps({"max_files": max_files}),
508
+ )
509
+
486
510
  def datasource_scheduling_state(self, datasource_id: str):
487
511
  response = self._req(f"/v0/datasources/{datasource_id}/scheduling/state", method="GET")
488
512
  return response["state"]
@@ -30,7 +30,6 @@ from tinybird.tb.modules.watch import watch_files, watch_project
30
30
  "--with-connections",
31
31
  is_flag=True,
32
32
  default=False,
33
- hidden=True,
34
33
  help="Create data linkers for connection datasources (S3, Kafka, GCS) during build",
35
34
  )
36
35
  @click.pass_context
@@ -89,7 +88,6 @@ def build(ctx: click.Context, watch: bool, with_connections: bool) -> None:
89
88
  @click.option(
90
89
  "--with-connections/--no-connections",
91
90
  default=None,
92
- hidden=True,
93
91
  help="Create data linkers for connection datasources (S3, Kafka, GCS). Defaults to true for branches.",
94
92
  )
95
93
  @click.pass_context
@@ -19,7 +19,13 @@ from click import Context
19
19
 
20
20
  from tinybird.datafile.common import get_name_version
21
21
  from tinybird.prompts import quarantine_prompt
22
- from tinybird.tb.client import AuthNoTokenException, DoesNotExistException, TinyB
22
+ from tinybird.tb.client import (
23
+ AuthException,
24
+ AuthNoTokenException,
25
+ DoesNotExistException,
26
+ OperationCanNotBePerformed,
27
+ TinyB,
28
+ )
23
29
  from tinybird.tb.modules.agent.utils import (
24
30
  create_terminal_box,
25
31
  )
@@ -459,6 +465,64 @@ def datasource_truncate(ctx, datasource_name, yes, cascade):
459
465
  click.echo(FeedbackManager.info(message="Operation cancelled by user"))
460
466
 
461
467
 
468
+ @datasource.command(name="stop")
469
+ @click.argument("datasource_name", required=True)
470
+ @click.pass_context
471
+ def datasource_stop(ctx: Context, datasource_name: str) -> None:
472
+ """Stop Kafka ingestion for a datasource.
473
+
474
+ This command is only available for Kafka-connected datasources in forward branches
475
+ or tinybird local environments. Once stopped, no new data will be ingested from
476
+ the Kafka topic until the datasource is started again.
477
+
478
+ Example: tb datasource stop my_kafka_datasource
479
+ """
480
+ client: TinyB = ctx.obj["client"]
481
+ try:
482
+ client.datasource_stop(datasource_name)
483
+ except AuthNoTokenException:
484
+ raise
485
+ except DoesNotExistException:
486
+ raise CLIDatasourceException(FeedbackManager.error_datasource_does_not_exist(datasource=datasource_name))
487
+ except AuthException as e:
488
+ raise CLIDatasourceException(FeedbackManager.error_exception(error=e))
489
+ except OperationCanNotBePerformed as e:
490
+ raise CLIDatasourceException(FeedbackManager.error_exception(error=e))
491
+ except Exception as e:
492
+ raise CLIDatasourceException(FeedbackManager.error_exception(error=e))
493
+
494
+ click.echo(FeedbackManager.success_stop_datasource(datasource=datasource_name))
495
+
496
+
497
+ @datasource.command(name="start")
498
+ @click.argument("datasource_name", required=True)
499
+ @click.pass_context
500
+ def datasource_start(ctx: Context, datasource_name: str) -> None:
501
+ """Start Kafka ingestion for a datasource.
502
+
503
+ This command is only available for Kafka-connected datasources in forward branches
504
+ or tinybird local environments. Once started, data will be ingested from the Kafka
505
+ topic, resuming from the last committed offset.
506
+
507
+ Example: tb datasource start my_kafka_datasource
508
+ """
509
+ client: TinyB = ctx.obj["client"]
510
+ try:
511
+ client.datasource_start(datasource_name)
512
+ except AuthNoTokenException:
513
+ raise
514
+ except DoesNotExistException:
515
+ raise CLIDatasourceException(FeedbackManager.error_datasource_does_not_exist(datasource=datasource_name))
516
+ except AuthException as e:
517
+ raise CLIDatasourceException(FeedbackManager.error_exception(error=e))
518
+ except OperationCanNotBePerformed as e:
519
+ raise CLIDatasourceException(FeedbackManager.error_exception(error=e))
520
+ except Exception as e:
521
+ raise CLIDatasourceException(FeedbackManager.error_exception(error=e))
522
+
523
+ click.echo(FeedbackManager.success_start_datasource(datasource=datasource_name))
524
+
525
+
462
526
  @datasource.command(name="delete")
463
527
  @click.argument("datasource_name")
464
528
  @click.option("--sql-condition", default=None, help="SQL WHERE condition to remove rows", hidden=True, required=True)
@@ -646,6 +710,90 @@ def datasource_sync(ctx: Context, datasource_name: str, yes: bool):
646
710
  raise CLIDatasourceException(FeedbackManager.error_syncing_datasource(datasource=datasource_name, error=str(e)))
647
711
 
648
712
 
713
+ @datasource.command(name="sample")
714
+ @click.argument("datasource_name")
715
+ @click.option(
716
+ "--max-files",
717
+ default=1,
718
+ type=int,
719
+ help="Maximum number of files to import (default 1, max 10)",
720
+ )
721
+ @click.option(
722
+ "--wait",
723
+ is_flag=True,
724
+ default=False,
725
+ help="Wait for the import job to finish",
726
+ )
727
+ @click.pass_context
728
+ def datasource_sample(ctx: Context, datasource_name: str, max_files: int, wait: bool) -> None:
729
+ """Import sample data from a datasource connected to an S3 or GCS bucket.
730
+
731
+ This command only works with datasources that have IMPORT_CONNECTION_NAME and
732
+ IMPORT_BUCKET_URI configured (i.e., datasources ingesting from S3 or GCS).
733
+ It imports a limited number of files from the bucket URI pattern, useful for
734
+ testing data pipelines in branches without importing the entire dataset.
735
+
736
+ By default, returns immediately with job info. Use --wait to block until complete.
737
+
738
+ Examples:
739
+ tb --branch=my_branch datasource sample my_s3_ds
740
+ tb --branch=my_branch datasource sample my_s3_ds --max-files 3 --wait
741
+ """
742
+ from tinybird.tb.modules.common import wait_job
743
+ from tinybird.tb.modules.job_common import echo_job_url
744
+
745
+ try:
746
+ client: TinyB = ctx.obj["client"]
747
+ config = ctx.obj.get("config", {})
748
+
749
+ click.echo(FeedbackManager.info(message=f"Starting sample import for {datasource_name}..."))
750
+
751
+ # Start the job
752
+ result = client.datasource_sample(datasource_name, max_files=max_files)
753
+
754
+ job_id = result.get("job_id") or result.get("id")
755
+ if not job_id:
756
+ raise CLIDatasourceException(
757
+ FeedbackManager.error_sample_import_datasource(
758
+ datasource=datasource_name, error="No job ID returned from server"
759
+ )
760
+ )
761
+ job_url = result.get("job_url", f"/v0/jobs/{job_id}")
762
+
763
+ # Show job URL
764
+ echo_job_url(client.token, client.host, config.get("name", ""), job_url)
765
+
766
+ if not wait:
767
+ # Return immediately with job info
768
+ click.echo(FeedbackManager.success(message=f"Job started: {job_id}"))
769
+ click.echo(FeedbackManager.gray(message=f"Check status: tb job get {job_id}"))
770
+ return
771
+
772
+ # Wait for job completion using existing wait_job utility
773
+ # wait_job raises CLIException on failure, so we only reach here on success
774
+ job_result = wait_job(client, job_id, job_url, "Importing sample")
775
+
776
+ stats = job_result.get("stats", {})
777
+ found_files = stats.get("found_files", max_files)
778
+ click.echo(
779
+ FeedbackManager.success_sample_import_datasource(
780
+ datasource=datasource_name,
781
+ file=f"{found_files} file(s)",
782
+ rows="see job details",
783
+ size="see job details",
784
+ )
785
+ )
786
+
787
+ except AuthNoTokenException:
788
+ raise
789
+ except CLIDatasourceException:
790
+ raise
791
+ except Exception as e:
792
+ raise CLIDatasourceException(
793
+ FeedbackManager.error_sample_import_datasource(datasource=datasource_name, error=str(e))
794
+ )
795
+
796
+
649
797
  @datasource.command(name="create")
650
798
  @click.option("--name", type=str, help="Name of the data source")
651
799
  @click.option("--blank", is_flag=True, default=False, help="Create a blank data source")
@@ -223,6 +223,7 @@ class FeedbackManager:
223
223
  "The --incremental parameter is only supported when the `--connector` parameter is passed"
224
224
  )
225
225
  error_syncing_datasource = error_message("Failed syncing Data Source {datasource}: {error}")
226
+ error_sample_import_datasource = error_message("Failed importing sample for Data Source {datasource}: {error}")
226
227
  error_sync_not_supported = error_message("The --sync parameter is only supported for {valid_datasources}")
227
228
  error_invalid_connector = error_message("Invalid connector parameter: Use one of {connectors}")
228
229
  error_connector_not_configured = error_message(
@@ -1037,7 +1038,12 @@ STEP 3: ADD KEY TO SERVICE ACCOUNT
1037
1038
  success_update_datasource = success_message("** Data Source '{datasource}' updated:\n {params}")
1038
1039
  success_promoting_datasource = success_message("** Data Source '{datasource}' connection settings updated")
1039
1040
  success_truncate_datasource = success_message("** Data Source '{datasource}' truncated")
1041
+ success_stop_datasource = success_message("** Data Source '{datasource}' Kafka ingestion stopped")
1042
+ success_start_datasource = success_message("** Data Source '{datasource}' Kafka ingestion started")
1040
1043
  success_sync_datasource = success_message("** Data Source '{datasource}' syncing in progress")
1044
+ success_sample_import_datasource = success_message(
1045
+ "** Sample imported into Data Source '{datasource}'\n File: {file}\n Rows: {rows}\n Size: {size}"
1046
+ )
1041
1047
  success_exchange_datasources = success_message("** Data Sources '{datasource_a}' and '{datasource_b}' exchanged")
1042
1048
 
1043
1049
  success_delete_rows_datasource = success_message(
@@ -263,7 +263,7 @@ def test_run_summary(results: List[TestSummaryResults], only_fail: bool = False,
263
263
  total_counts[test.status] = total_counts.get(test.status, 0) + 1
264
264
 
265
265
  # Skip the PASS tests if we only want the failed ones
266
- if only_fail and test.status in [PASS]:
266
+ if only_fail and test.status == PASS:
267
267
  continue
268
268
 
269
269
  summary.append(
@@ -263,7 +263,7 @@ def test_run_summary(results: List[TestSummaryResults], only_fail: bool = False,
263
263
  total_counts[test.status] = total_counts.get(test.status, 0) + 1
264
264
 
265
265
  # Skip the PASS tests if we only want the failed ones
266
- if only_fail and test.status in [PASS]:
266
+ if only_fail and test.status == PASS:
267
267
  continue
268
268
 
269
269
  summary.append(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 3.2.1.dev0
3
+ Version: 3.3.1.dev0
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -57,6 +57,13 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
57
57
  Changelog
58
58
  ----------
59
59
 
60
+ 3.3.0
61
+ *******
62
+
63
+ - `Added` ``tb datasource stop`` and ``tb datasource start`` commands to pause/resume Kafka ingestion in forward branches
64
+ - `Added` ``POST /v0/datasources/{name}/sample`` API endpoint to import sample data from S3/GCS connections in forward branches
65
+ - `Changed` ``--with-connections`` flag for ``tb build`` and ``tb deploy`` is now stable (previously experimental)
66
+
60
67
  3.0.2
61
68
  *******
62
69
 
File without changes