tinybird 0.0.1.dev185__tar.gz → 0.0.1.dev187__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 (110) hide show
  1. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/PKG-INFO +1 -1
  2. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/__cli__.py +2 -2
  3. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/cicd.py +1 -1
  4. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/create.py +33 -10
  5. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/parse_pipe.py +3 -1
  6. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/feedback_manager.py +4 -4
  7. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/workspace.py +14 -3
  8. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird.egg-info/PKG-INFO +1 -1
  9. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/setup.cfg +0 -0
  10. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/__cli__.py +0 -0
  11. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/ch_utils/constants.py +0 -0
  12. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/ch_utils/engine.py +0 -0
  13. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/check_pypi.py +0 -0
  14. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/client.py +0 -0
  15. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/config.py +0 -0
  16. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/connectors.py +0 -0
  17. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/context.py +0 -0
  18. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/datafile.py +0 -0
  19. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/datatypes.py +0 -0
  20. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/feedback_manager.py +0 -0
  21. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/git_settings.py +0 -0
  22. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/prompts.py +0 -0
  23. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/sql.py +0 -0
  24. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/sql_template.py +0 -0
  25. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/sql_template_fmt.py +0 -0
  26. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/sql_toolset.py +0 -0
  27. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/syncasync.py +0 -0
  28. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/check_pypi.py +0 -0
  29. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/cli.py +0 -0
  30. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/client.py +0 -0
  31. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/config.py +0 -0
  32. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/build.py +0 -0
  33. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/cli.py +0 -0
  34. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/common.py +0 -0
  35. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/config.py +0 -0
  36. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/connection.py +0 -0
  37. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/copy.py +0 -0
  38. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/build.py +0 -0
  39. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/build_common.py +0 -0
  40. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
  41. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
  42. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/common.py +0 -0
  43. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/diff.py +0 -0
  44. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/exceptions.py +0 -0
  45. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/fixture.py +0 -0
  46. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/format_common.py +0 -0
  47. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
  48. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
  49. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/parse_datasource.py +0 -0
  50. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
  51. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/playground.py +0 -0
  52. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datafile/pull.py +0 -0
  53. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/datasource.py +0 -0
  54. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/deployment.py +0 -0
  55. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/deprecations.py +0 -0
  56. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/dev_server.py +0 -0
  57. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/endpoint.py +0 -0
  58. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/exceptions.py +0 -0
  59. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/info.py +0 -0
  60. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/infra.py +0 -0
  61. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/job.py +0 -0
  62. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/llm.py +0 -0
  63. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/llm_utils.py +0 -0
  64. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/local.py +0 -0
  65. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/local_common.py +0 -0
  66. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/login.py +0 -0
  67. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/logout.py +0 -0
  68. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/materialization.py +0 -0
  69. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/mock.py +0 -0
  70. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/open.py +0 -0
  71. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/pipe.py +0 -0
  72. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/project.py +0 -0
  73. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/regions.py +0 -0
  74. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/secret.py +0 -0
  75. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/shell.py +0 -0
  76. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/table.py +0 -0
  77. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/telemetry.py +0 -0
  78. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/test.py +0 -0
  79. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
  80. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
  81. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/token.py +0 -0
  82. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/watch.py +0 -0
  83. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb/modules/workspace_members.py +0 -0
  84. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli.py +0 -0
  85. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/auth.py +0 -0
  86. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/branch.py +0 -0
  87. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/cicd.py +0 -0
  88. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/cli.py +0 -0
  89. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/common.py +0 -0
  90. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/config.py +0 -0
  91. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/connection.py +0 -0
  92. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/datasource.py +0 -0
  93. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/exceptions.py +0 -0
  94. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/fmt.py +0 -0
  95. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/job.py +0 -0
  96. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/pipe.py +0 -0
  97. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/regions.py +0 -0
  98. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/tag.py +0 -0
  99. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/telemetry.py +0 -0
  100. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/test.py +0 -0
  101. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  102. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  103. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/workspace.py +0 -0
  104. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  105. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird/tornado_template.py +0 -0
  106. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird.egg-info/SOURCES.txt +0 -0
  107. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird.egg-info/dependency_links.txt +0 -0
  108. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird.egg-info/entry_points.txt +0 -0
  109. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/tinybird.egg-info/requires.txt +0 -0
  110. {tinybird-0.0.1.dev185 → tinybird-0.0.1.dev187}/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.dev185
3
+ Version: 0.0.1.dev187
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.dev185'
8
- __revision__ = 'b79d3c1'
7
+ __version__ = '0.0.1.dev187'
8
+ __revision__ = 'c0fce61'
@@ -177,7 +177,7 @@ class CICDGeneratorBase:
177
177
  continue
178
178
  with open(f"{path}/{cicd_file.full_path}", "wb") as f:
179
179
  f.write(content)
180
- click.echo(FeedbackManager.info_cicd_file_generated(file_path=cicd_file.full_path))
180
+ click.echo(FeedbackManager.info(message=cicd_file.full_path.replace("./.", ".")))
181
181
  if cicd_file.warning_message is not None:
182
182
  return FeedbackManager.warning_for_cicd_file(
183
183
  file_name=cicd_file.file_name, warning_message=cicd_file.warning_message.format(**params)
@@ -77,6 +77,11 @@ async def create(
77
77
 
78
78
  if not validate_project_structure(project):
79
79
  click.echo(FeedbackManager.highlight(message="\n» Creating new project structure..."))
80
+ click.echo(
81
+ FeedbackManager.info(
82
+ message="Learn more about data files https://www.tinybird.co/docs/forward/datafiles"
83
+ )
84
+ )
80
85
  create_project_structure(folder)
81
86
  click.echo(FeedbackManager.success(message="✓ Scaffolding completed!\n"))
82
87
  created_something = True
@@ -98,9 +103,9 @@ async def create(
98
103
  result.extend(prompt_result)
99
104
  readme_path = Path(root_folder) / "README.md"
100
105
  if readme_path.exists():
101
- click.echo(FeedbackManager.highlight(message="\n» Updating README.md..."))
106
+ click.echo(FeedbackManager.highlight(message="\n» Updating project description..."))
102
107
  else:
103
- click.echo(FeedbackManager.highlight(message="\n» Creating README.md..."))
108
+ click.echo(FeedbackManager.highlight(message="\n» Creating project description..."))
104
109
  readme_path.touch()
105
110
  llm = LLM(user_token=str(user_token), host=tb_client.host)
106
111
  readme_user_prompt = prompt or ""
@@ -113,10 +118,11 @@ async def create(
113
118
  )
114
119
  readme_result = extract_xml(readme_response, "readme")
115
120
  readme_path.write_text(readme_result)
121
+ click.echo(FeedbackManager.info(message="README.md"))
116
122
  created_something = True
117
123
 
118
124
  if data or prompt:
119
- click.echo(FeedbackManager.success(message="✓ Done!\n"))
125
+ click.echo(FeedbackManager.success(message="✓ Resources created!\n"))
120
126
 
121
127
  if not already_has_cicd(root_folder):
122
128
  click.echo(FeedbackManager.highlight(message="\n» Creating CI/CD files for GitHub and GitLab..."))
@@ -126,8 +132,9 @@ async def create(
126
132
  created_something = True
127
133
 
128
134
  if not already_has_cursor_rules(root_folder):
129
- click.echo(FeedbackManager.highlight(message="\n» Creating .cursorrules..."))
135
+ click.echo(FeedbackManager.highlight(message="\n» Creating rules..."))
130
136
  create_rules(root_folder, "tb", agent)
137
+ click.echo(FeedbackManager.info(message=".cursorrules"))
131
138
  click.echo(FeedbackManager.success(message="✓ Done!\n"))
132
139
  created_something = True
133
140
 
@@ -148,8 +155,9 @@ async def create(
148
155
 
149
156
  ds_name = ds_path.stem
150
157
  datasource_path = Path(folder) / "datasources" / f"{ds_name}.datasource"
151
- click.echo(FeedbackManager.info(message=f"/fixtures/{ds_name}.{data_format}"))
158
+ click.echo(FeedbackManager.info(message=f"/fixtures/{ds_name}.{data_format}"))
152
159
  persist_fixture(ds_name, data_content, folder, format=data_format)
160
+ click.echo(FeedbackManager.success(message="✓ Done!"))
153
161
  created_something = True
154
162
 
155
163
  elif prompt and prompt_result:
@@ -173,7 +181,8 @@ async def create(
173
181
  )
174
182
  if mock_data:
175
183
  persist_fixture(datasource_name, mock_data, folder, format="ndjson")
176
- click.echo(FeedbackManager.info(message=f"/fixtures/{datasource_name}"))
184
+ click.echo(FeedbackManager.info(message=f"/fixtures/{datasource_name}.ndjson"))
185
+ click.echo(FeedbackManager.success(message="✓ Done!"))
177
186
  created_something = True
178
187
 
179
188
  if not created_something and not len(result) > 0:
@@ -223,13 +232,27 @@ def already_has_cursor_rules(folder: str) -> bool:
223
232
 
224
233
  def create_project_structure(folder: str):
225
234
  folder_path = Path(folder)
226
- for x in PROJECT_PATHS:
235
+ PROJECT_PATHS_DESCRIPTIONS = {
236
+ "datasources →": "Where your data lives. Define the schema and settings for your tables.",
237
+ "endpoints →": "Expose real-time HTTP APIs of your transformed data.",
238
+ "materializations →": "Stream continuous updates of the result of a pipe into a new data source.",
239
+ "copies →": "Capture the result of a pipe at a moment in time and write it into a target data source.",
240
+ "pipes →": "Transform your data and reuse the logic in endpoints, materializations and copies.",
241
+ "fixtures →": "Files with sample data for your project.",
242
+ "tests →": "Test your pipe files with data validation tests.",
243
+ "connections →": "Connect to and ingest data from popular sources: Kafka, S3 or GCS.",
244
+ }
245
+
246
+ for x in PROJECT_PATHS_DESCRIPTIONS.keys():
227
247
  try:
228
- f = folder_path / x
248
+ path = x.split("→")[0].strip()
249
+ f = folder_path / path
229
250
  f.mkdir()
251
+ click.echo(
252
+ FeedbackManager.info(message=f"/{x} ") + FeedbackManager.gray(message=PROJECT_PATHS_DESCRIPTIONS[x])
253
+ )
230
254
  except FileExistsError:
231
255
  pass
232
- click.echo(FeedbackManager.info_path_created(path=x))
233
256
 
234
257
 
235
258
  async def create_resources_from_prompt(
@@ -326,7 +349,7 @@ def init_git(folder: str):
326
349
  else:
327
350
  gitignore_file.write_text(".tinyb\n.terraform\n")
328
351
 
329
- click.echo(FeedbackManager.info_file_created(file=".gitignore"))
352
+ click.echo(FeedbackManager.info(message=".gitignore"))
330
353
  except Exception as e:
331
354
  raise Exception(f"Error initializing Git: {e}")
332
355
 
@@ -54,7 +54,9 @@ def parse_pipe(
54
54
  if sql.strip()[0] == "%":
55
55
  # Note(eclbg): not sure what test_mode is for. I think it does something like using placeholder values
56
56
  # for the variables in the template.
57
- sql, _, variable_warnings = render_sql_template(sql[1:], test_mode=True, name=node["name"])
57
+ sql, _, variable_warnings = render_sql_template(
58
+ sql[1:], test_mode=True, name=node["name"], secrets=list(secrets.keys()) if secrets else None
59
+ )
58
60
  doc.warnings = variable_warnings
59
61
  # it'll fail with a ModuleNotFoundError when the toolset is not available but it returns the parsed doc
60
62
  from tinybird.sql_toolset import format_sql as toolset_format_sql
@@ -872,9 +872,9 @@ STEP 3: ADD KEY TO SERVICE ACCOUNT
872
872
  info_removing_pipe = info_message("** Removing pipe {pipe}")
873
873
  info_removing_pipe_not_found = info_message("** {pipe} not found")
874
874
  info_dry_removing_pipe = info_message("** [DRY RUN] Removing pipe {pipe}")
875
- info_path_created = info_message("/{path}")
876
- info_file_created = info_message("/{file}")
877
- info_path_already_exists = info_message("/{path} already exists, skipping")
875
+ info_path_created = info_message("/{path}")
876
+ info_file_created = info_message("/{file}")
877
+ info_path_already_exists = info_message("/{path} already exists, skipping")
878
878
  info_dottinyb_already_ignored = info_message("** - '.tinyb' already in .gitignore, skipping")
879
879
  info_dotdifftemp_already_ignored = info_message("** - '.diff_tmp' not found or already in .gitignore, skipping")
880
880
  info_dottinyenv_already_exists = info_message("** - '.tinyenv' already exists, skipping")
@@ -945,7 +945,7 @@ STEP 3: ADD KEY TO SERVICE ACCOUNT
945
945
  info_diff_resources_for_git_init = info_message(
946
946
  "** Checking diffs between remote Workspace and local. Hint: use 'tb diff' to check if your Data Project and Workspace synced"
947
947
  )
948
- info_cicd_file_generated = info_message("{file_path}")
948
+ info_cicd_file_generated = info_message("{file_path}")
949
949
  info_available_git_providers = info_message("** List of available providers:")
950
950
  info_git_release_init_without_diffs = info_message("** No diffs detected for '{workspace}'")
951
951
  info_deployment_detecting_changes_header = info_message("\n** Detecting changes from last commit ...")
@@ -138,7 +138,6 @@ async def workspace_current(ctx: Context):
138
138
 
139
139
  @workspace.command(name="create", short_help="Create a new Workspace for your Tinybird user")
140
140
  @click.argument("workspace_name", required=False)
141
- @click.option("--user_token", is_flag=False, default=None, help="When passed, tb won't prompt asking for the token")
142
141
  @click.option(
143
142
  "--fork",
144
143
  is_flag=True,
@@ -157,13 +156,25 @@ async def workspace_current(ctx: Context):
157
156
  async def create_workspace(
158
157
  ctx: Context,
159
158
  workspace_name: str,
160
- user_token: Optional[str],
161
159
  fork: bool,
162
160
  organization_id: Optional[str],
163
161
  ) -> None:
164
162
  config = CLIConfig.get_project_config()
163
+ is_cloud = ctx.ensure_object(dict)["env"] == "cloud"
164
+ if not is_cloud:
165
+ raise CLIWorkspaceException(
166
+ FeedbackManager.error(
167
+ message="`tb workspace create` is not available in local mode. Use --cloud to create a workspace in Tinybird Cloud and it will be used in Tinybird Local."
168
+ )
169
+ )
170
+
171
+ config = CLIConfig.get_project_config()
172
+ user_token = config.get_user_token()
165
173
 
166
- user_token = await get_user_token(config, user_token)
174
+ if not user_token:
175
+ raise CLIWorkspaceException(
176
+ FeedbackManager.error(message="This action requires authentication. Run 'tb login' first.")
177
+ )
167
178
 
168
179
  organization_name = None
169
180
  organizations = await get_organizations_by_user(config, user_token)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev185
3
+ Version: 0.0.1.dev187
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird