tinybird 3.5.3.dev0__tar.gz → 3.5.4__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.5.3.dev0 → tinybird-3.5.4}/PKG-INFO +11 -1
  2. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/common.py +2 -0
  3. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/service_datasources.py +92 -27
  4. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/sql_toolset.py +32 -2
  5. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/syncasync.py +27 -0
  6. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/__cli__.py +2 -2
  7. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/client.py +4 -1
  8. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/connection_kafka.py +2 -2
  9. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/PKG-INFO +11 -1
  10. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/top_level.txt +2 -0
  11. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/setup.cfg +0 -0
  12. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/__cli__.py +0 -0
  13. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/ch_utils/constants.py +0 -0
  14. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/ch_utils/engine.py +0 -0
  15. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/check_pypi.py +0 -0
  16. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/client.py +0 -0
  17. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/config.py +0 -0
  18. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/context.py +0 -0
  19. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/exceptions.py +0 -0
  20. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/parse_connection.py +0 -0
  21. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/parse_datasource.py +0 -0
  22. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datafile/parse_pipe.py +0 -0
  23. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/datatypes.py +0 -0
  24. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/feedback_manager.py +0 -0
  25. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/git_settings.py +0 -0
  26. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/prompts.py +0 -0
  27. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/sql.py +0 -0
  28. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/sql_template.py +0 -0
  29. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/sql_template_fmt.py +0 -0
  30. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/check_pypi.py +0 -0
  31. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/cli.py +0 -0
  32. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/config.py +0 -0
  33. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/__init__.py +0 -0
  34. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/agent.py +0 -0
  35. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/animations.py +0 -0
  36. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/banner.py +0 -0
  37. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/command_agent.py +0 -0
  38. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/compactor.py +0 -0
  39. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/explore_agent.py +0 -0
  40. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/file_agent.py +0 -0
  41. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/memory.py +0 -0
  42. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/mock_agent.py +0 -0
  43. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/models.py +0 -0
  44. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/prompts.py +0 -0
  45. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/testing_agent.py +0 -0
  46. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
  47. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
  48. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/append.py +0 -0
  49. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/build.py +0 -0
  50. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/datafile.py +0 -0
  51. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
  52. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
  53. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
  54. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/execute_query.py +0 -0
  55. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/file.py +0 -0
  56. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
  57. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
  58. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/mock.py +0 -0
  59. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/plan.py +0 -0
  60. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
  61. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
  62. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/secret.py +0 -0
  63. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/tools/test.py +0 -0
  64. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/agent/utils.py +0 -0
  65. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/branch.py +0 -0
  66. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/build.py +0 -0
  67. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/build_common.py +0 -0
  68. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/cicd.py +0 -0
  69. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/cli.py +0 -0
  70. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/common.py +0 -0
  71. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/config.py +0 -0
  72. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/connection.py +0 -0
  73. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/connection_s3.py +0 -0
  74. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/copy.py +0 -0
  75. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/create.py +0 -0
  76. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/build.py +0 -0
  77. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/build_common.py +0 -0
  78. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
  79. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
  80. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/diff.py +0 -0
  81. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/fixture.py +0 -0
  82. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/format_common.py +0 -0
  83. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/format_connection.py +0 -0
  84. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
  85. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
  86. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
  87. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/playground.py +0 -0
  88. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datafile/pull.py +0 -0
  89. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/datasource.py +0 -0
  90. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/deployment.py +0 -0
  91. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/deployment_common.py +0 -0
  92. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/deprecations.py +0 -0
  93. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/dev_server.py +0 -0
  94. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/endpoint.py +0 -0
  95. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/exceptions.py +0 -0
  96. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/feedback_manager.py +0 -0
  97. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/fmt.py +0 -0
  98. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/info.py +0 -0
  99. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/infra.py +0 -0
  100. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/job.py +0 -0
  101. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/job_common.py +0 -0
  102. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/llm.py +0 -0
  103. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/llm_utils.py +0 -0
  104. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/local.py +0 -0
  105. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/local_common.py +0 -0
  106. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/local_logs.py +0 -0
  107. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/login.py +0 -0
  108. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/login_common.py +0 -0
  109. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/logout.py +0 -0
  110. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/materialization.py +0 -0
  111. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/mock.py +0 -0
  112. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/mock_common.py +0 -0
  113. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/open.py +0 -0
  114. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/pipe.py +0 -0
  115. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/project.py +0 -0
  116. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/project_commands.py +0 -0
  117. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/regions.py +0 -0
  118. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/secret.py +0 -0
  119. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/secret_common.py +0 -0
  120. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/shell.py +0 -0
  121. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/sink.py +0 -0
  122. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/table.py +0 -0
  123. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/telemetry.py +0 -0
  124. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/test.py +0 -0
  125. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/test_common.py +0 -0
  126. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
  127. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
  128. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/token.py +0 -0
  129. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/watch.py +0 -0
  130. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/workspace.py +0 -0
  131. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb/modules/workspace_members.py +0 -0
  132. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli.py +0 -0
  133. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/auth.py +0 -0
  134. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/branch.py +0 -0
  135. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/cicd.py +0 -0
  136. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/cli.py +0 -0
  137. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/common.py +0 -0
  138. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/config.py +0 -0
  139. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/connection.py +0 -0
  140. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/datasource.py +0 -0
  141. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/exceptions.py +0 -0
  142. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/fmt.py +0 -0
  143. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/job.py +0 -0
  144. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/pipe.py +0 -0
  145. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/regions.py +0 -0
  146. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/tag.py +0 -0
  147. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/telemetry.py +0 -0
  148. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/test.py +0 -0
  149. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  150. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  151. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/workspace.py +0 -0
  152. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  153. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird/tornado_template.py +0 -0
  154. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/SOURCES.txt +0 -0
  155. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/dependency_links.txt +0 -0
  156. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/entry_points.txt +0 -0
  157. {tinybird-3.5.3.dev0 → tinybird-3.5.4}/tinybird.egg-info/requires.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 3.5.3.dev0
3
+ Version: 3.5.4
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,16 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
57
57
  Changelog
58
58
  ----------
59
59
 
60
+ 3.5.4
61
+ *******
62
+
63
+ - `Fixed` Pulling vendored data sources from a Classic workspace to migrate to Forward now includes all workspaces in SHARED_WITH.
64
+
65
+ 3.5.3
66
+ *******
67
+
68
+ - `Fixed` Support `SASL_PLAINTEXT` as a Kafka security protocol, fixing connections to brokers that use SASL authentication without TLS (e.g. WarpStream).
69
+
60
70
  3.5.2
61
71
  *******
62
72
 
@@ -559,6 +559,8 @@ class Datafile:
559
559
  raise DatafileValidationError(
560
560
  f"Some Kafka params have been provided, but the following required ones are missing: {missing}"
561
561
  )
562
+ if "kafka_group_id" in node and not str(node["kafka_group_id"]).strip():
563
+ raise DatafileValidationError("KAFKA_GROUP_ID cannot be empty")
562
564
  # Validate S3 params
563
565
  if any(param in node for param in BLOB_STORAGE_PARAMS):
564
566
  if missing := [param for param in REQUIRED_BLOB_STORAGE_PARAMS if param not in node]:
@@ -456,33 +456,6 @@ def get_tinybird_service_datasources() -> List[Dict[str, Any]]:
456
456
  {"name": "feature", "type": "String"},
457
457
  ],
458
458
  },
459
- {
460
- "name": "tinybird.llm_usage",
461
- "description": "LLM usage metrics from Tinybird AI features including token consumption, costs, and model usage for each request in the workspace.",
462
- "dateColumn": "start_time",
463
- "engine": {
464
- "engine": "MergeTree",
465
- "sorting_key": "workspace_id, start_time, user_email, request_id",
466
- "partition_key": "toYYYYMM(start_time)",
467
- },
468
- "columns": [
469
- {"name": "start_time", "type": "DateTime"},
470
- {"name": "end_time", "type": "DateTime"},
471
- {"name": "organization_id", "type": "String"},
472
- {"name": "organization_name", "type": "String"},
473
- {"name": "workspace_id", "type": "String"},
474
- {"name": "workspace_name", "type": "String"},
475
- {"name": "user_email", "type": "String"},
476
- {"name": "request_id", "type": "String"},
477
- {"name": "prompt_tokens", "type": "UInt32"},
478
- {"name": "completion_tokens", "type": "UInt32"},
479
- {"name": "total_tokens", "type": "UInt32"},
480
- {"name": "duration", "type": "Float32"},
481
- {"name": "cost", "type": "Float32"},
482
- {"name": "origin", "type": "String"},
483
- {"name": "feature", "type": "String"},
484
- ],
485
- },
486
459
  {
487
460
  "name": "tinybird.query_validator_log",
488
461
  "description": "Log of failed queries executions in the next available ClickHouse version and their results.",
@@ -537,6 +510,26 @@ def get_tinybird_service_datasources() -> List[Dict[str, Any]]:
537
510
  {"name": "rate_limited", "type": "UInt8"},
538
511
  ],
539
512
  },
513
+ {
514
+ "name": "tinybird.realtime_ingestion_mv",
515
+ "description": "Per-second adjusted MB/s throughput per workspace for realtime ingestion (HFI and Kafka).",
516
+ "dateColumn": "second_slot",
517
+ "engine": {
518
+ "engine": "AggregatingMergeTree",
519
+ "sorting_key": "workspace_id, datasource_id, type, second_slot",
520
+ "partition_key": "toYYYYMM(second_slot)",
521
+ },
522
+ "columns": [
523
+ {"name": "second_slot", "type": "DateTime"},
524
+ {"name": "type", "type": "LowCardinality(String)"},
525
+ {"name": "organization_id", "type": "String"},
526
+ {"name": "workspace_id", "type": "String"},
527
+ {"name": "datasource_id", "type": "String"},
528
+ {"name": "total_mbps", "type": "SimpleAggregateFunction(sum, Float64)"},
529
+ {"name": "mbs_ingestion_block", "type": "SimpleAggregateFunction(min, Float64)"},
530
+ {"name": "flush_time", "type": "SimpleAggregateFunction(min, Float64)"},
531
+ ],
532
+ },
540
533
  ]
541
534
 
542
535
 
@@ -1033,6 +1026,78 @@ def get_organization_service_datasources() -> List[Dict[str, Any]]:
1033
1026
  {"name": "feature", "type": "String"},
1034
1027
  ],
1035
1028
  },
1029
+ {
1030
+ "name": "organization.backups",
1031
+ "description": "Contains backup information for dedicated clusters in the organization.",
1032
+ "dateColumn": "end_time",
1033
+ "engine": {
1034
+ "engine": "ReplacingMergeTree",
1035
+ "sorting_key": "organization_id, cluster, end_time",
1036
+ "partition_key": "toYYYYMM(end_time)",
1037
+ },
1038
+ "columns": [
1039
+ {"name": "organization_id", "type": "String"},
1040
+ {"name": "cluster", "type": "LowCardinality(String)"},
1041
+ {"name": "backup_id", "type": "String"},
1042
+ {"name": "query_id", "type": "String"},
1043
+ {"name": "start_time", "type": "DateTime"},
1044
+ {"name": "end_time", "type": "DateTime"},
1045
+ {"name": "status", "type": "LowCardinality(String)"},
1046
+ {"name": "total_size", "type": "UInt64"},
1047
+ {"name": "compressed_size", "type": "UInt64"},
1048
+ {"name": "uncompressed_size", "type": "UInt64"},
1049
+ {"name": "is_full_backup", "type": "Bool"},
1050
+ ],
1051
+ },
1052
+ {
1053
+ "name": "organization.private_link",
1054
+ "description": "Private Link costs pre-joined with organization info for observability. Filtered for AmazonVPC/VpcEndpoint and AWSELB products.",
1055
+ "dateColumn": "timestamp",
1056
+ "engine": {
1057
+ "engine": "MergeTree",
1058
+ "sorting_key": "organization_id, timestamp",
1059
+ "partition_key": "toYYYYMM(timestamp)",
1060
+ },
1061
+ "columns": [
1062
+ {"name": "timestamp", "type": "DateTime"},
1063
+ {"name": "region", "type": "String"},
1064
+ {"name": "organization_id", "type": "String"},
1065
+ {"name": "organization_name", "type": "String"},
1066
+ {"name": "usage_start_date", "type": "Nullable(DateTime)"},
1067
+ {"name": "usage_end_date", "type": "Nullable(DateTime)"},
1068
+ {"name": "product_code", "type": "Nullable(String)"},
1069
+ {"name": "usage_type", "type": "Nullable(String)"},
1070
+ {"name": "operation", "type": "Nullable(String)"},
1071
+ {"name": "usage_amount", "type": "Nullable(Float32)"},
1072
+ {"name": "cost", "type": "Nullable(Float32)"},
1073
+ {"name": "blended_cost", "type": "Nullable(Float32)"},
1074
+ {"name": "currency", "type": "Nullable(String)"},
1075
+ {"name": "product_name", "type": "Nullable(String)"},
1076
+ {"name": "service_name", "type": "Nullable(String)"},
1077
+ {"name": "product_family", "type": "Nullable(String)"},
1078
+ {"name": "type", "type": "Nullable(String)"},
1079
+ ],
1080
+ },
1081
+ {
1082
+ "name": "organization.realtime_ingestion_mv",
1083
+ "description": "Per-second adjusted MB/s throughput per organization for realtime ingestion (HFI and Kafka).",
1084
+ "dateColumn": "second_slot",
1085
+ "engine": {
1086
+ "engine": "AggregatingMergeTree",
1087
+ "sorting_key": "organization_id, workspace_id, datasource_id, type, second_slot",
1088
+ "partition_key": "toYYYYMM(second_slot)",
1089
+ },
1090
+ "columns": [
1091
+ {"name": "second_slot", "type": "DateTime"},
1092
+ {"name": "type", "type": "LowCardinality(String)"},
1093
+ {"name": "organization_id", "type": "String"},
1094
+ {"name": "workspace_id", "type": "String"},
1095
+ {"name": "datasource_id", "type": "String"},
1096
+ {"name": "total_mbps", "type": "SimpleAggregateFunction(sum, Float64)"},
1097
+ {"name": "mbs_ingestion_block", "type": "SimpleAggregateFunction(min, Float64)"},
1098
+ {"name": "flush_time", "type": "SimpleAggregateFunction(min, Float64)"},
1099
+ ],
1100
+ },
1036
1101
  ]
1037
1102
 
1038
1103
 
@@ -35,7 +35,7 @@ class InvalidFunction(ValueError):
35
35
  super().__init__(self.msg)
36
36
 
37
37
 
38
- class InvalidResource(ValueError):
38
+ class MissingResource(ValueError):
39
39
  def __init__(self, database: str, table: str, default_database: str = ""):
40
40
  if default_database and database == default_database:
41
41
  database = ""
@@ -88,6 +88,36 @@ class ColumnInfo:
88
88
  is_primary_key: bool = False
89
89
 
90
90
 
91
+ @dataclass
92
+ class MaterializedViewTarget:
93
+ database: Optional[str]
94
+ table: str
95
+
96
+
97
+ def parse_materialized_view_target(create_table_query: str) -> Optional[MaterializedViewTarget]:
98
+ """
99
+ Extract target table info from a CREATE MATERIALIZED VIEW statement.
100
+
101
+ Parses statements like:
102
+ CREATE MATERIALIZED VIEW db.view TO target_db.target_table AS SELECT...
103
+ CREATE MATERIALIZED VIEW db.view TO `target_db`.`target_table` AS SELECT...
104
+ CREATE MATERIALIZED VIEW db.view TO `target_db`.`target_table` (col1 Type1, col2 Nullable(DateTime64(3))) AS SELECT...
105
+
106
+ Returns:
107
+ MaterializedViewTarget with database (optional) and table,
108
+ or None if the query is not a CREATE MATERIALIZED VIEW statement.
109
+ """
110
+ try:
111
+ result = chquery.parse_create_materialized_view_target_table(create_table_query)
112
+ except ValueError:
113
+ return None
114
+
115
+ return MaterializedViewTarget(
116
+ database=result["database"],
117
+ table=result["table"],
118
+ )
119
+
120
+
91
121
  def get_columns_from_create_query(sql_schema: str) -> list[ColumnInfo]:
92
122
  columns = chquery.get_columns_from_create_query(sql_schema)
93
123
  return [ColumnInfo(**col) for col in columns]
@@ -605,7 +635,7 @@ def replace_tables(
605
635
  "valid_tables": valid_tables,
606
636
  },
607
637
  )
608
- raise InvalidResource(database, table_name, default_database=default_database)
638
+ raise MissingResource(database, table_name, default_database=default_database)
609
639
 
610
640
  if current_replacements:
611
641
  # We need to transform the dictionary into something cacheable, so a sorted tuple of tuples it is
@@ -26,6 +26,7 @@
26
26
  # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
27
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
 
29
+ import asyncio
29
30
  import asyncio.coroutines
30
31
  import functools
31
32
  import inspect
@@ -680,3 +681,29 @@ def sync_to_async(
680
681
  thread_sensitive=thread_sensitive,
681
682
  executor=executor,
682
683
  )
684
+
685
+
686
+ def run_function_in_event_loop(func_def: Callable[..., Any], *args: Any, **kwargs: Any) -> Any:
687
+ """Run an async function, handling the case where an event loop may already be running."""
688
+ try:
689
+ asyncio.get_running_loop()
690
+ # If we're already in an event loop, we need to run the coroutine in a thread
691
+ # to avoid blocking the current event loop
692
+ import concurrent.futures
693
+
694
+ def run_in_new_loop() -> Any:
695
+ # Create a new event loop for this thread
696
+ new_loop = asyncio.new_event_loop()
697
+ asyncio.set_event_loop(new_loop)
698
+ try:
699
+ return new_loop.run_until_complete(func_def(*args, **kwargs))
700
+ finally:
701
+ new_loop.close()
702
+
703
+ # Run in a separate thread to avoid blocking the current event loop
704
+ with concurrent.futures.ThreadPoolExecutor() as executor:
705
+ future = executor.submit(run_in_new_loop)
706
+ return future.result()
707
+ except RuntimeError:
708
+ # No event loop running, use asyncio.run()
709
+ return asyncio.run(func_def(*args, **kwargs))
@@ -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.5.3.dev0'
8
- __revision__ = 'e85d34a'
7
+ __version__ = '3.5.4'
8
+ __revision__ = 'f879a5d'
@@ -373,7 +373,10 @@ class TinyB:
373
373
 
374
374
  def datasource_file(self, datasource: str):
375
375
  try:
376
- return self._req(f"/v0/datasources/{datasource}.datasource")
376
+ include_all_shared_with = "true" if "." in datasource else "false"
377
+ return self._req(
378
+ f"/v0/datasources/{datasource}.datasource?include_all_shared_with={include_all_shared_with}"
379
+ )
377
380
  except DoesNotExistException:
378
381
  raise Exception(f"Data Source {datasource} not found.")
379
382
 
@@ -115,9 +115,9 @@ def connection_create_kafka(
115
115
  except Exception as e:
116
116
  raise CLIConnectionException(FeedbackManager.error(message=str(e)))
117
117
 
118
- security_protocol_options = ["SASL_SSL", "PLAINTEXT"]
118
+ security_protocol_options = ["SASL_SSL", "SASL_PLAINTEXT", "PLAINTEXT"]
119
119
  security_protocol = security_protocol or click.prompt(
120
- FeedbackManager.highlight(message="? Security Protocol (SASL_SSL, PLAINTEXT) [SASL_SSL]"),
120
+ FeedbackManager.highlight(message="? Security Protocol (SASL_SSL, SASL_PLAINTEXT, PLAINTEXT) [SASL_SSL]"),
121
121
  type=click.Choice(security_protocol_options),
122
122
  show_default=False,
123
123
  show_choices=False,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 3.5.3.dev0
3
+ Version: 3.5.4
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,16 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
57
57
  Changelog
58
58
  ----------
59
59
 
60
+ 3.5.4
61
+ *******
62
+
63
+ - `Fixed` Pulling vendored data sources from a Classic workspace to migrate to Forward now includes all workspaces in SHARED_WITH.
64
+
65
+ 3.5.3
66
+ *******
67
+
68
+ - `Fixed` Support `SASL_PLAINTEXT` as a Kafka security protocol, fixing connections to brokers that use SASL authentication without TLS (e.g. WarpStream).
69
+
60
70
  3.5.2
61
71
  *******
62
72
 
@@ -1,5 +1,7 @@
1
+ scripts
1
2
  tests
2
3
  tests_e2e
3
4
  tests_e2e_ingestion
4
5
  tests_tb
5
6
  tinybird
7
+ tinybird_shared
File without changes
File without changes