tinybird 0.0.1.dev185__py3-none-any.whl → 0.0.1.dev187__py3-none-any.whl

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.

tinybird/tb/__cli__.py CHANGED
@@ -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
@@ -12,26 +12,26 @@ tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
12
12
  tinybird/tornado_template.py,sha256=jjNVDMnkYFWXflmT8KU_Ssbo5vR8KQq3EJMk5vYgXRw,41959
13
13
  tinybird/ch_utils/constants.py,sha256=aYvg2C_WxYWsnqPdZB1ZFoIr8ZY-XjUXYyHKE9Ansj0,3890
14
14
  tinybird/ch_utils/engine.py,sha256=X4tE9OrfaUy6kO9cqVEzyI9cDcmOF3IAssRRzsTsfEQ,40781
15
- tinybird/tb/__cli__.py,sha256=frxkVk6NxktDwMyUqzmr41eBNhcoihthUbTM38gL06E,247
15
+ tinybird/tb/__cli__.py,sha256=Eyh8kC3usUkNjLKZO9IlqfWPuBADLrW3yMwNUXqROS4,247
16
16
  tinybird/tb/check_pypi.py,sha256=rW4QmDRbtgKdUUwJCnBkVjmTjZSZGN-XgZhx7vMkC0w,1009
17
17
  tinybird/tb/cli.py,sha256=u3eGOhX0MHkuT6tiwaZ0_3twqLmqKXDAOxF7yV_Nn9Q,1075
18
18
  tinybird/tb/client.py,sha256=59GH0IoYSV_KUG0eEbDDYHSWH4OlkVnSRFXE3mYAM0s,56571
19
19
  tinybird/tb/config.py,sha256=jT9xndpeCY_g0HdB5qE2EquC0TFRRnkPnQFWZWd04jo,3998
20
20
  tinybird/tb/modules/build.py,sha256=rRL5XKBdadMc9uVDEUt0GXm0h09Y6XXw199rdmRI1qo,19127
21
- tinybird/tb/modules/cicd.py,sha256=MnShTTJzKBYeajswF2jg7p7ZzupaeCgSriAN05MeEdg,7330
21
+ tinybird/tb/modules/cicd.py,sha256=Njb6eZOHHbUkoJJx6KoixO9PsfA_T-3Ybkya9-50Ca8,7328
22
22
  tinybird/tb/modules/cli.py,sha256=dXZs-MuqYPvxStVj7aLg36LwXtEB8NzTobDmHV9nzZI,15508
23
23
  tinybird/tb/modules/common.py,sha256=DYCjpj0iBaCDZ8BJ0MNG_6m6NyFMCrpQShIajHKLIfM,83373
24
24
  tinybird/tb/modules/config.py,sha256=ziqW_t_mRVvWOd85VoB4vKyvgMkEfpXDf9H4v38p2xc,11422
25
25
  tinybird/tb/modules/connection.py,sha256=7oOR7x4PhBcm1ETFFCH2YJ_3oeGXjAbmx1cnZX9_L70,9014
26
26
  tinybird/tb/modules/copy.py,sha256=2Mm4FWKehOG7CoOhiF1m9UZJgJn0W1_cMolqju8ONYg,5805
27
- tinybird/tb/modules/create.py,sha256=3ccvOCcuJfhhaaoX60-6dSmnF8SfnOLTfVqLJs48jOA,18672
27
+ tinybird/tb/modules/create.py,sha256=sfIOcN3tujt7O1r9RNWqhhI-gQTDnO6zEgMwZHH2D8s,20201
28
28
  tinybird/tb/modules/datasource.py,sha256=0_6Cn07p5GoNBBGdu88pSeLvTWojln1-k23FsS8jTDs,17801
29
29
  tinybird/tb/modules/deployment.py,sha256=t6DDLJ1YdY3SJiTPbEG7CRblSLkbuqwzauQ9y65FWtY,27147
30
30
  tinybird/tb/modules/deprecations.py,sha256=rrszC1f_JJeJ8mUxGoCxckQTJFBCR8wREf4XXXN-PRc,4507
31
31
  tinybird/tb/modules/dev_server.py,sha256=57FCKuWpErwYUYgHspYDkLWEm9F4pbvVOtMrFXX1fVU,10129
32
32
  tinybird/tb/modules/endpoint.py,sha256=XySDt3pk66vxOZ0egUfz4bY8bEk3BjOXkv-L0OIJ3sc,12083
33
33
  tinybird/tb/modules/exceptions.py,sha256=5jK91w1LPmtqIUfDpHe_Op5OxGz8-p1BPgtLREMIni0,5217
34
- tinybird/tb/modules/feedback_manager.py,sha256=c0ZOpG7IHFq3doodezctX64cTcTquIOhO38w9uPuU8Q,76798
34
+ tinybird/tb/modules/feedback_manager.py,sha256=sWJYBIZDPYLFWMKPv7FoVLbQxE7xx85bn5SbK9yYXoE,76782
35
35
  tinybird/tb/modules/info.py,sha256=iKeFbFkos7vYaBU7Vr5SI-fa1x7AbuUHB748jsGsaA4,5944
36
36
  tinybird/tb/modules/infra.py,sha256=fve30Gj3mG9zbquGxS2e4ipcOYOxviWQCpNFfEzJN_Q,33195
37
37
  tinybird/tb/modules/job.py,sha256=AsUCRNzy7HG5oJ4fyk9NpIm5NtNJgBZSy8MtJdXBe5A,3167
@@ -54,7 +54,7 @@ tinybird/tb/modules/telemetry.py,sha256=X0p5AVkM8BNsK_Rhdcg4p2eIf6OHimHO_VLldBqH
54
54
  tinybird/tb/modules/test.py,sha256=QxyDkHGL9Ae46h7BA00z1Efb2_5dBYGqW8cgKIJer5s,13081
55
55
  tinybird/tb/modules/token.py,sha256=2fmKwu10_M0pqs6YmJVeILR9ZQB0ejRAET86agASbKM,13488
56
56
  tinybird/tb/modules/watch.py,sha256=H1FieLTVGRqmZ0hR0vELbQJ9l0CThrFCgGCta-MPuAY,8883
57
- tinybird/tb/modules/workspace.py,sha256=-XUvL2PB5GcviJ8m30h-ZDc5kwJcm1wy1dreYa2l4Ck,10658
57
+ tinybird/tb/modules/workspace.py,sha256=WDi3Vu9t60b4Ht5vbPsakUErFmsECtFRcfXb1l300xc,11057
58
58
  tinybird/tb/modules/workspace_members.py,sha256=RYLpyPM1ECCasHRg3uvpckzXplX0_KgNFsSPZn_i6qk,8744
59
59
  tinybird/tb/modules/datafile/build.py,sha256=d_h3pRFDPFrDKGhpFx2iejY25GuB2k8yfNouj6s8caw,50973
60
60
  tinybird/tb/modules/datafile/build_common.py,sha256=LU24kAQmxDJIyoIapDaYG-SU3P4FrMG9UBf8m9PgVSI,4565
@@ -68,7 +68,7 @@ tinybird/tb/modules/datafile/format_common.py,sha256=1V1ZQuphp8EH2hT-IfZQEgz_0b9
68
68
  tinybird/tb/modules/datafile/format_datasource.py,sha256=iWbeXruxC7OBmjNgurWt6ymcJlYzxfKwkGnhpcoSKEo,6190
69
69
  tinybird/tb/modules/datafile/format_pipe.py,sha256=DUGdmlzI146YDqTwW-7kSIOXocz4AH-md_LFGUm9hrc,7436
70
70
  tinybird/tb/modules/datafile/parse_datasource.py,sha256=jposrAHVebgDTzlr2rzSooj05NX7jJQc8P3xvHdUiek,1847
71
- tinybird/tb/modules/datafile/parse_pipe.py,sha256=WuQlYW51tflbcp2iFapJ7bxa9IkegD6Z20f4nXL78Xw,3529
71
+ tinybird/tb/modules/datafile/parse_pipe.py,sha256=MScEFqte8A__Uc7GAUCNddpdQ-e9cETLZGwQUhAZPxY,3618
72
72
  tinybird/tb/modules/datafile/pipe_checker.py,sha256=xv7vyjN5dPc2hcw9RnLBq2VkR4nte-8bhYDT10qceQY,24620
73
73
  tinybird/tb/modules/datafile/playground.py,sha256=94tOydeg5iQ3TQAdEWQWxLhx5Emz6xh0bEwLSao44-Y,56568
74
74
  tinybird/tb/modules/datafile/pull.py,sha256=CP6-TVZ9ErrEOAFajn9HSEdq-GgYnOPHEIUAuReQGaM,4508
@@ -80,8 +80,8 @@ tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4
80
80
  tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
81
81
  tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
82
82
  tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
83
- tinybird-0.0.1.dev185.dist-info/METADATA,sha256=BYrQoaKZjaVJWTz6p19nmNwYT-SJgF0O-g07BCTduH4,1608
84
- tinybird-0.0.1.dev185.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
85
- tinybird-0.0.1.dev185.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
86
- tinybird-0.0.1.dev185.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
87
- tinybird-0.0.1.dev185.dist-info/RECORD,,
83
+ tinybird-0.0.1.dev187.dist-info/METADATA,sha256=AOqXzg1cY5YL4r0AGt1Ux8WNrhAN3bwfXbo4GbP3Feg,1608
84
+ tinybird-0.0.1.dev187.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
85
+ tinybird-0.0.1.dev187.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
86
+ tinybird-0.0.1.dev187.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
87
+ tinybird-0.0.1.dev187.dist-info/RECORD,,