tinybird 0.0.1.dev225__py3-none-any.whl → 0.0.1.dev227__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/prompts.py CHANGED
@@ -974,6 +974,93 @@ Follow these instructions when evolving a datasource schema:
974
974
  )
975
975
 
976
976
 
977
+ def claude_rules_prompt(source: Optional[str] = None) -> str:
978
+ base_command = source or "tb"
979
+ return """
980
+ # Tinybird CLI rules
981
+
982
+ ## Commands
983
+ You have commands at your disposal to develop a tinybird project:
984
+ - {base_command} build: to build the project locally and check it works.
985
+ - {base_command} deployment create --wait --auto: to create a deployment and promote it automatically
986
+ - {base_command} test run: to run existing tests
987
+ - {base_command} endpoint url <pipe_name>: to get the url of an endpoint, token included.
988
+ - {base_command} endpoint data <pipe_name>: to get the data of an endpoint. You can pass parameters to the endpoint like this: {base_command} endpoint data <pipe_name> --param1 value1 --param2 value2
989
+ - {base_command} token ls: to list all the tokens
990
+ There are other commands that you can use, but these are the most common ones. Run `{base_command} -h` to see all the commands if needed.
991
+ When you need to work with resources or data in cloud, add always the --cloud flag before the command. Example: {base_command} --cloud datasource ls
992
+
993
+ ## Development instructions
994
+ - When asking to create a tinybird data project, if the needed folders are not already created, use the following structure:
995
+ ├── connections
996
+ ├── copies
997
+ ├── sinks
998
+ ├── datasources
999
+ ├── endpoints
1000
+ ├── fixtures
1001
+ ├── materializations
1002
+ ├── pipes
1003
+ └── tests
1004
+ - The local development server will be available at http://localhost:7181. Even if some response uses another base url, use always http://localhost:7181.
1005
+ - After every change in your .datasource, .pipe or .ndjson files, run `{base_command} build` to build the project locally.
1006
+ - When you need to ingest data locally in a datasource, create a .ndjson file with the same name of the datasource and the data you want and run `{base_command} build` so the data is ingested.
1007
+ - The format of the generated api endpoint urls is: http://localhost:7181/v0/pipe/<pipe_name>.json?token=<token>
1008
+ - Before running the tests, remember to have the project built with `{base_command} build` with the latest changes.
1009
+ </development_instructions>
1010
+ When asking for ingesting data, adding data or appending data do the following depending on the environment you want to work with:
1011
+
1012
+ ## Ingestion instructions
1013
+ - When building locally, create a .ndjson file with the data you want to ingest and do `{base_command} build` to ingest the data in the build env.
1014
+ - We call `cloud` the production environment.
1015
+ - When appending data in cloud, use `{base_command} --cloud datasource append <datasource_name> <file_name>`
1016
+ - When you have a response that says “there are rows in quarantine”, do `{base_command} [--cloud] datasource data <datasource_name>_quarantine` to understand what is the problem.
1017
+
1018
+ ## .datasource file instructions
1019
+ Follow these instructions when creating or updating .datasource files:
1020
+ {datasource_instructions}
1021
+
1022
+ ## .pipe file instructions
1023
+ Follow these instructions when creating or updating .pipe files:
1024
+ {pipe_instructions}
1025
+ {sql_instructions}
1026
+ {datasource_example}
1027
+ {pipe_example}
1028
+ {copy_pipe_instructions}
1029
+ {materialized_pipe_instructions}
1030
+ {sink_pipe_instructions}
1031
+ {connection_instructions}
1032
+ {kafka_connection_example}
1033
+ {gcs_connection_example}
1034
+ {gcs_hmac_connection_example}
1035
+ {s3_connection_example}
1036
+
1037
+ ## .test file instructions
1038
+ Follow these instructions when creating or updating .yaml files for tests:
1039
+ {test_instructions}
1040
+
1041
+ ## Deployment instructions
1042
+ Follow these instructions when evolving a datasource schema:
1043
+ {deployment_instructions}
1044
+ """.format(
1045
+ base_command=base_command,
1046
+ datasource_instructions=datasource_instructions,
1047
+ pipe_instructions=pipe_instructions,
1048
+ sql_instructions=sql_instructions,
1049
+ datasource_example=datasource_example,
1050
+ pipe_example=pipe_example,
1051
+ copy_pipe_instructions=copy_pipe_instructions,
1052
+ materialized_pipe_instructions=materialized_pipe_instructions,
1053
+ sink_pipe_instructions=sink_pipe_instructions,
1054
+ test_instructions=test_instructions,
1055
+ deployment_instructions=deployment_instructions,
1056
+ connection_instructions=connection_instructions,
1057
+ kafka_connection_example=kafka_connection_example,
1058
+ gcs_connection_example=gcs_connection_example,
1059
+ gcs_hmac_connection_example=gcs_hmac_connection_example,
1060
+ s3_connection_example=s3_connection_example,
1061
+ )
1062
+
1063
+
977
1064
  test_instructions = """
978
1065
  - The test file name must match the name of the pipe it is testing.
979
1066
  - Every scenario name must be unique inside the test file.
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.dev225'
8
- __revision__ = 'ddc2523'
7
+ __version__ = '0.0.1.dev227'
8
+ __revision__ = 'fb681ea'
@@ -1,6 +1,7 @@
1
1
  import glob
2
2
  import os
3
3
  import re
4
+ import shutil
4
5
  from pathlib import Path
5
6
  from typing import Any, Dict, List, Optional
6
7
  from urllib.parse import urlparse
@@ -8,7 +9,7 @@ from urllib.parse import urlparse
8
9
  import click
9
10
  import requests
10
11
 
11
- from tinybird.prompts import create_prompt, readme_prompt, rules_prompt
12
+ from tinybird.prompts import claude_rules_prompt, create_prompt, readme_prompt, rules_prompt
12
13
  from tinybird.tb.client import TinyB
13
14
  from tinybird.tb.modules.cicd import init_cicd
14
15
  from tinybird.tb.modules.cli import cli
@@ -115,6 +116,7 @@ async def create(
115
116
  readme_path.read_text(), tb_client.host, "$TB_ADMIN_TOKEN", all_resources_xml
116
117
  ),
117
118
  prompt=readme_user_prompt,
119
+ feature="tb_create_readme",
118
120
  )
119
121
  readme_result = extract_xml(readme_response, "readme")
120
122
  readme_path.write_text(readme_result)
@@ -144,6 +146,13 @@ async def create(
144
146
  click.echo(FeedbackManager.success(message="✓ Done!\n"))
145
147
  created_something = True
146
148
 
149
+ if not already_has_claude_rules(root_folder):
150
+ click.echo(FeedbackManager.highlight(message="\n» Creating Claude Code rules..."))
151
+ create_claude_rules(root_folder, "tb")
152
+ click.echo(FeedbackManager.info(message="CLAUDE.md"))
153
+ click.echo(FeedbackManager.success(message="✓ Done!\n"))
154
+ created_something = True
155
+
147
156
  if should_generate_fixtures(result):
148
157
  click.echo(FeedbackManager.highlight(message="\n» Generating fixtures..."))
149
158
 
@@ -246,6 +255,11 @@ def already_has_cursor_rules(folder: str) -> bool:
246
255
  return any((Path(folder) / path).exists() for path in cursor_rules_paths)
247
256
 
248
257
 
258
+ def already_has_claude_rules(folder: str) -> bool:
259
+ claude_rules_path = "CLAUDE.md"
260
+ return (Path(folder) / claude_rules_path).exists()
261
+
262
+
249
263
  def already_has_env_file(folder: str) -> bool:
250
264
  env_file_pattern = ".env.*"
251
265
  return any((Path(folder) / path).exists() for path in glob.glob(env_file_pattern))
@@ -282,6 +296,7 @@ async def create_resources_from_prompt(
282
296
  user_token: str,
283
297
  prompt: str,
284
298
  project: Project,
299
+ feature: str = "tb_create_resources",
285
300
  ) -> List[Path]:
286
301
  result: List[Path] = []
287
302
  datasource_paths = [Path(ds_file) for ds_file in project.get_datasource_files()]
@@ -312,7 +327,7 @@ async def create_resources_from_prompt(
312
327
  ]
313
328
  )
314
329
  llm = LLM(user_token=user_token, host=tb_client.host)
315
- prompt_result = llm.ask(system_prompt=create_prompt(resources_xml), prompt=prompt)
330
+ prompt_result = llm.ask(system_prompt=create_prompt(resources_xml), prompt=prompt, feature=feature)
316
331
  prompt_result = extract_xml(prompt_result, "response")
317
332
  resources = parse_xml(prompt_result, "resource")
318
333
  datasources = []
@@ -466,9 +481,22 @@ def create_rules(folder: str, source: str, agent: str):
466
481
  elif agent == "windsurf":
467
482
  extension = ".windsurfrules"
468
483
  else:
469
- extension = ".txt"
484
+ extension = ".md"
485
+
470
486
  rules_file = Path(folder) / extension
471
- rules_file.write_text(rules_prompt(source))
487
+ rules_content = rules_prompt(source)
488
+ rules_file.write_text(rules_content)
489
+
490
+
491
+ def create_claude_rules(folder: str, source: str):
492
+ try:
493
+ is_claude_code_installed = shutil.which("claude") is not None
494
+ if is_claude_code_installed:
495
+ rules_content = claude_rules_prompt(source)
496
+ claude_file = Path(folder) / "CLAUDE.md"
497
+ claude_file.write_text(rules_content)
498
+ except Exception:
499
+ pass
472
500
 
473
501
 
474
502
  def get_context_file() -> Path:
@@ -781,7 +781,7 @@ async def datasource_create(
781
781
  raise Exception("This action requires authentication. Run 'tb login' first.")
782
782
  project_config = CLIConfig.get_project_config()
783
783
  tb_client: TinyB = project_config.get_client(token=config.get("token"), host=config.get("host"))
784
- await create_resources_from_prompt(tb_client, user_token, prompt, project)
784
+ await create_resources_from_prompt(tb_client, user_token, prompt, project, feature="tb_datasource_create")
785
785
  click.echo(FeedbackManager.success(message="✓ .datasource created!"))
786
786
  return
787
787
 
@@ -1023,6 +1023,7 @@ async def analyze_quarantine(datasource_name: str, project: Project, client: Tin
1023
1023
  response_llm = llm.ask(
1024
1024
  system_prompt=quarantine_prompt(datasource_definition),
1025
1025
  prompt=f"The quarantine errors are:\n{json.dumps(quarantine_data)}",
1026
+ feature="tb_datasource_append_analyze_quarantine",
1026
1027
  )
1027
1028
  response = extract_xml(response_llm, "quarantine_errors")
1028
1029
  error_message += "\n" + response
@@ -636,6 +636,7 @@ STEP 2: CREATE GCP SERVICE ACCOUNT
636
636
  - For GCS Sink (writing to GCS), select all three roles:
637
637
  • "Storage Object Creator" - Allows users to create objects
638
638
  • "Storage Object Viewer" - Grants access to view objects and their metadata
639
+ • "Storage Bucket Viewer" - Grants access to view buckets and their metadata
639
640
  (You can add IAM condition to provide access to selected buckets. More info in IAM Conditions: https://cloud.google.com/iam/docs/conditions-overview)
640
641
  5. Click "Done"
641
642
  """
@@ -1,5 +1,9 @@
1
+ import urllib.parse
2
+ from typing import Optional
3
+
1
4
  import requests
2
5
 
6
+ from tinybird.tb.modules.cli import CLIConfig
3
7
  from tinybird.tb.modules.feedback_manager import FeedbackManager
4
8
 
5
9
 
@@ -16,7 +20,7 @@ class LLM:
16
20
  self.host = host
17
21
  self.user_token = user_token
18
22
 
19
- def ask(self, system_prompt: str, prompt: str) -> str:
23
+ def ask(self, system_prompt: str, prompt: str, feature: Optional[str] = None) -> str:
20
24
  """
21
25
  Calls the model with the given prompt and returns the response.
22
26
 
@@ -29,14 +33,23 @@ class LLM:
29
33
  """
30
34
 
31
35
  data = {"system": system_prompt, "prompt": prompt}
32
-
36
+ params = {"origin": "cli"}
37
+ if feature:
38
+ params["feature"] = feature
39
+ cli_config = CLIConfig.get_project_config()
40
+ workspace_id = cli_config.get("id")
41
+ params_str = urllib.parse.urlencode(params)
42
+ if workspace_id:
43
+ llm_url = f"{self.host}/v0/llm/{workspace_id}?{params_str}"
44
+ else:
45
+ llm_url = f"{self.host}/v0/llm?{params_str}"
33
46
  response = requests.post(
34
- f"{self.host}/v0/llm",
47
+ llm_url,
35
48
  headers={"Authorization": f"Bearer {self.user_token}"},
36
49
  data=data,
37
50
  )
38
51
 
39
52
  if not response.ok:
40
- raise LLMException(FeedbackManager.error_request_failed(status_code=response.status_code))
53
+ raise LLMException(FeedbackManager.error(message=response.text))
41
54
 
42
55
  return response.json().get("result", "")
@@ -132,7 +132,7 @@ async def create_mock_data(
132
132
  sql_path = None
133
133
  while True:
134
134
  try:
135
- response = llm.ask(system_prompt=mock_prompt(rows, error), prompt=prompt)
135
+ response = llm.ask(system_prompt=mock_prompt(rows, error), prompt=prompt, feature="tb_mock")
136
136
  sql = extract_xml(response, "sql")
137
137
  sql_path = persist_fixture_sql(datasource_name, sql, folder)
138
138
  sql_format = "JSON" if format_ == "ndjson" else "CSV"
@@ -149,7 +149,9 @@ async def create_mock_data(
149
149
  error = str(e)
150
150
  attempts += 1
151
151
  if attempts > 5:
152
- raise Exception(f"Failed to generate a valid solution. Check {str(sql_path)} and try again.")
152
+ raise Exception(
153
+ f"Failed to generate a valid solution. Check {str(sql_path or '.sql path')} and try again."
154
+ )
153
155
  else:
154
156
  continue
155
157
  return data
@@ -102,7 +102,7 @@ def test_create(ctx: click.Context, name_or_filename: str, prompt: str) -> None:
102
102
  raise Exception("No user token found")
103
103
 
104
104
  llm = LLM(user_token=user_token, host=config.get_client().host)
105
- response_llm = llm.ask(system_prompt=system_prompt, prompt=prompt)
105
+ response_llm = llm.ask(system_prompt=system_prompt, prompt=prompt, feature="tb_test_create")
106
106
  response_xml = extract_xml(response_llm, "response")
107
107
  tests_content = parse_xml(response_xml, "test")
108
108
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev225
3
+ Version: 0.0.1.dev227
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -3,7 +3,7 @@ tinybird/context.py,sha256=FfqYfrGX_I7PKGTQo93utaKPDNVYWelg4Hsp3evX5wM,1291
3
3
  tinybird/datatypes.py,sha256=r4WCvspmrXTJHiPjjyOTiZyZl31FO3Ynkwq4LQsYm6E,11059
4
4
  tinybird/feedback_manager.py,sha256=1INQFfRfuMCb9lfB8KNf4r6qC2khW568hoHjtk-wshI,69305
5
5
  tinybird/git_settings.py,sha256=Sw_8rGmribEFJ4Z_6idrVytxpFYk7ez8ei0qHULzs3E,3934
6
- tinybird/prompts.py,sha256=VELVeJzSyGJULFML9eXytMG_3Ett0xKwNVRLBNP6TIs,40954
6
+ tinybird/prompts.py,sha256=BRCHfFKsVU9XBckQHIkluG5TCtgKo-MYMs3fFuR7zmQ,45322
7
7
  tinybird/sql.py,sha256=BufnOgclQokDyihtuXesOwHBsebN6wRXIxO5wKRkOwE,48299
8
8
  tinybird/sql_template.py,sha256=WjsTBjpQLVBHGZbY2dZuhZUurFR-rbJ_KRRy5vx4Y5E,99967
9
9
  tinybird/sql_template_fmt.py,sha256=KUHdj5rYCYm_rKKdXYSJAE9vIyXUQLB0YSZnUXHeBlY,10196
@@ -17,7 +17,7 @@ tinybird/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1w
17
17
  tinybird/datafile/parse_connection.py,sha256=tRyn2Rpr1TeWet5BXmMoQgaotbGdYep1qiTak_OqC5E,1825
18
18
  tinybird/datafile/parse_datasource.py,sha256=ssW8QeFSgglVFi3sDZj_HgkJiTJ2069v2JgqnH3CkDE,1825
19
19
  tinybird/datafile/parse_pipe.py,sha256=xf4m0Tw44QWJzHzAm7Z7FwUoUUtr7noMYjU1NiWnX0k,3880
20
- tinybird/tb/__cli__.py,sha256=yoNIdYpjihCJBWlrVYhBKJ8YPmuz0F1l8T1UsPRwrqQ,247
20
+ tinybird/tb/__cli__.py,sha256=bdwbydz09zd69DBetuXj8DqeYT9D9ltPTGrpVsC4rT8,247
21
21
  tinybird/tb/check_pypi.py,sha256=i3l2L8IajeB7sreikR7oPlYJki9MtS3c_M4crnmbByc,760
22
22
  tinybird/tb/cli.py,sha256=0xYk2Ip4vb3nNFbxfTdG3VoIgdRvUKVbUVU_mviErPA,1107
23
23
  tinybird/tb/client.py,sha256=FKj61vY9STPW03kfVcxYuY1_csI-kP-mc1ERQfqJtg8,56505
@@ -29,25 +29,25 @@ tinybird/tb/modules/common.py,sha256=F6oaoFZ3aBxEMjiDKYhthsEIUqSFPkcdlMJ7h7A49Ac
29
29
  tinybird/tb/modules/config.py,sha256=VnzYVUo4q1RBEEMMce4_OCrKp4erhgkRPHElydVlKj0,11488
30
30
  tinybird/tb/modules/connection.py,sha256=dAOv8z3ym9Tt62j7AI8R9PgFwgiCIFdgIMpUiMdtxaQ,18906
31
31
  tinybird/tb/modules/copy.py,sha256=zHN1d5NA-MFsgbk2kKJq2P9qA8dNOnIsIa60QpVnSwc,4458
32
- tinybird/tb/modules/create.py,sha256=dRpzwv1GWqu1BqZtl1-AkFbap52adA-GwY-xf0qxIcw,22262
33
- tinybird/tb/modules/datasource.py,sha256=4a50A_qwB-3FUEUeB3ps6tUCJvn02rMUUwW-vHaMjTw,40846
32
+ tinybird/tb/modules/create.py,sha256=Ht8Ze-iVqgpVUIVWyGcXnkuh9D5D4Bg_dXK_-XH200U,23317
33
+ tinybird/tb/modules/datasource.py,sha256=UiQXDkSEmQIPj4NcUD_I4bAJe9IGVmlVW07yGgSu6kY,40941
34
34
  tinybird/tb/modules/deployment.py,sha256=ByXIgEvwxB49pJEKKj0EJIfORWyflCYr04k8961nBkA,28391
35
35
  tinybird/tb/modules/deprecations.py,sha256=rrszC1f_JJeJ8mUxGoCxckQTJFBCR8wREf4XXXN-PRc,4507
36
36
  tinybird/tb/modules/dev_server.py,sha256=57FCKuWpErwYUYgHspYDkLWEm9F4pbvVOtMrFXX1fVU,10129
37
37
  tinybird/tb/modules/endpoint.py,sha256=rC1CZiEZDMb5chByf4xZhv5PsfkoLeIVDScHQ-QcBsE,12072
38
38
  tinybird/tb/modules/exceptions.py,sha256=5jK91w1LPmtqIUfDpHe_Op5OxGz8-p1BPgtLREMIni0,5217
39
- tinybird/tb/modules/feedback_manager.py,sha256=AR7spZdOO_ya_5C8cGN3zb3vzAeu--HvAfj6pFGuw5k,77882
39
+ tinybird/tb/modules/feedback_manager.py,sha256=SMaoDjz-JGfh6hUxRiaGf2JOYZa_afDL8QFITA_M1mQ,77963
40
40
  tinybird/tb/modules/info.py,sha256=NqSsoyzFqbtUEGH_tSowNOI_jSsNuixibln6-plsfOY,6810
41
41
  tinybird/tb/modules/infra.py,sha256=fve30Gj3mG9zbquGxS2e4ipcOYOxviWQCpNFfEzJN_Q,33195
42
42
  tinybird/tb/modules/job.py,sha256=AsUCRNzy7HG5oJ4fyk9NpIm5NtNJgBZSy8MtJdXBe5A,3167
43
- tinybird/tb/modules/llm.py,sha256=KfsCYmKeW1VQz0iDZhGKCRkQv_Y3kTHh6JuxvofOguE,1076
43
+ tinybird/tb/modules/llm.py,sha256=QbHRcMLgFmLKEh4zVb2ctR_5tIGUGdFJrAiRCDtMxDw,1572
44
44
  tinybird/tb/modules/llm_utils.py,sha256=nS9r4FAElJw8yXtmdYrx-rtI2zXR8qXfi1QqUDCfxvg,3469
45
45
  tinybird/tb/modules/local.py,sha256=TWT7pGXQ3cOy0M_piyw7WhrzoxZE18PmfOLzHD5CoEc,6096
46
46
  tinybird/tb/modules/local_common.py,sha256=8CSEVygFi0fIISatYxCStcHizugXCA9WNTLO_zDKmXw,17195
47
47
  tinybird/tb/modules/login.py,sha256=VxxCzyjG5dpFm1lmlNPVcM-0-jqURAFp4HEkMMBdiGo,12617
48
48
  tinybird/tb/modules/logout.py,sha256=sniI4JNxpTrVeRCp0oGJuQ3yRerG4hH5uz6oBmjv724,1009
49
49
  tinybird/tb/modules/materialization.py,sha256=neugOziGfh50GSOgfZJX8giVPKgauoE313LUw6kXowo,5467
50
- tinybird/tb/modules/mock.py,sha256=IyHweMUM6bUH8IhyiX2tTMpdVpTFUeAJ41lZ5P42-HQ,5303
50
+ tinybird/tb/modules/mock.py,sha256=pp7NN79chzStHua4FKVMejI6NLYvzXjP6P7nzf6nSxM,5375
51
51
  tinybird/tb/modules/open.py,sha256=OuctINN77oexpSjth9uoIZPCelKO4Li-yyVxeSnk1io,1371
52
52
  tinybird/tb/modules/pipe.py,sha256=ExDOk3ze76JacNEVrN4DbIopNvSurDCSR7QR9ii2xGQ,2421
53
53
  tinybird/tb/modules/project.py,sha256=pOcvtgsR0ibPi0sNu-6GuAI4WS2DORRALezisjN3xY8,5662
@@ -57,7 +57,7 @@ tinybird/tb/modules/shell.py,sha256=Zd_4Ak_5tKVX-cw6B4ag36xZeEGHeh-jZpAsIXkoMoE,
57
57
  tinybird/tb/modules/sink.py,sha256=bIjLjog4XH42yfp944cMnaE4il7Kl7Wn7F-nLKfH2Bc,3913
58
58
  tinybird/tb/modules/table.py,sha256=4XrtjM-N0zfNtxVkbvLDQQazno1EPXnxTyo7llivfXk,11035
59
59
  tinybird/tb/modules/telemetry.py,sha256=T9gtsQffWqG_4hRBaUJPzOfMkPwz7mH-R6Bn1XRYViA,11482
60
- tinybird/tb/modules/test.py,sha256=XakpYi0Q2gGKItpPdtRVLKzQldkvCPqzPhwwbUxyrmc,13292
60
+ tinybird/tb/modules/test.py,sha256=ZRWzrYcoaUB16pAEAxtCaE0rgc1srMx7VuOTqvrpsjk,13318
61
61
  tinybird/tb/modules/token.py,sha256=pSlDed5RzcadJlvIKQh22Y49gt1Rfw-0rCTko6x4y3g,12879
62
62
  tinybird/tb/modules/watch.py,sha256=HhruZoUrehlxL_nFIK3BlpHp2uyzKAM9cmNXBCa4Zgs,8965
63
63
  tinybird/tb/modules/workspace.py,sha256=ngn5yGG9K9sFaUzm0W42j_vQnm3pQS2Jh38GNgbMtP0,11607
@@ -82,8 +82,8 @@ tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4
82
82
  tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
83
83
  tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
84
84
  tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
85
- tinybird-0.0.1.dev225.dist-info/METADATA,sha256=tYgd7QaNE9_KOU6StAufP4rIYWwLAcZ7hHWI1vL8pro,1682
86
- tinybird-0.0.1.dev225.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
87
- tinybird-0.0.1.dev225.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
88
- tinybird-0.0.1.dev225.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
89
- tinybird-0.0.1.dev225.dist-info/RECORD,,
85
+ tinybird-0.0.1.dev227.dist-info/METADATA,sha256=ATySV79DRVsR1RBCe2jBBvtCvhieE6I4n25hd5K0XqU,1682
86
+ tinybird-0.0.1.dev227.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
87
+ tinybird-0.0.1.dev227.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
88
+ tinybird-0.0.1.dev227.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
89
+ tinybird-0.0.1.dev227.dist-info/RECORD,,