tinybird 0.0.1.dev112__py3-none-any.whl → 0.0.1.dev113__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
@@ -954,3 +954,35 @@ FORWARD_QUERY >
954
954
  </forward_query_example>
955
955
  </deployment_instruction>
956
956
  """
957
+
958
+
959
+ def readme_prompt(readme: str, host: str, token: str, resources_xml: str) -> str:
960
+ return f"""
961
+ You are an expert in SQL and Tinybird. Follow these instructions to generate a new README.md file for a tinybird project:
962
+ Current README.md file:
963
+ <current_resources_xml>
964
+ {resources_xml}
965
+ </current_resources_xml>
966
+ <readme>{readme}</readme>
967
+ <readme_instructions>
968
+ - If it is not present in the current readme, generate a new ## Tinybird section with the following content:
969
+ - ### Overview section:
970
+ - Explaining the purpose of the project.
971
+ - ### Data sources section:
972
+ - Explaining the purpose of each datasource.
973
+ - Add a snippet of how to ingest data into each datasource like the following (where the payload example matches the datasource schema respecting non-nullable types):
974
+ curl -X POST "{host}/v0/events?name=events" \
975
+ -H "Authorization: Bearer {token}" \
976
+ -d '{{"date":"2025-01-31","id":"123","user_id":"abc"}}'
977
+ - ### Endpoints section:
978
+ - Explaining the purpose of each endpoint.
979
+ - Add a snippet of how to use each endpoint like the following:
980
+ curl -X GET "{host}/v0/pipes/pipe_name.json?token={token}"
981
+ - DateTime parameters must be formatted as YYYY-MM-DD HH:MM:SS, or else will fail.
982
+ - Do not include any other extra info related to Tinybird just maintain the existing one in the <readme> tag.
983
+ - Make sure the API host is correct, {host}.
984
+ - It is mandatory to return a <resource> tag with type "readme" in the response.
985
+ - The response must follow the following format:
986
+ <readme>[readme content here]</readme>
987
+ </readme_instructions>
988
+ """
tinybird/tb/__cli__.py CHANGED
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://www.tinybird.co/docs/cli/introduction.html'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '0.0.1.dev112'
8
- __revision__ = 'eb9e376'
7
+ __version__ = '0.0.1.dev113'
8
+ __revision__ = '49946d6'
@@ -120,7 +120,9 @@ tinybird_ci_workflow:
120
120
  services:
121
121
  - name: tinybirdco/tinybird-local:beta
122
122
  alias: tinybird-local
123
+ """
123
124
 
125
+ GITLAB_CD_YML = """
124
126
  tinybird_cd_workflow:
125
127
  image: ubuntu:latest
126
128
  stage: deploy
@@ -217,6 +219,11 @@ class GitLabCICDGenerator(CICDGeneratorBase):
217
219
  file_name="tinybird-ci.yml",
218
220
  dir_path=".gitlab/tinybird",
219
221
  ),
222
+ CICDFile(
223
+ template=GITLAB_CD_YML,
224
+ file_name="tinybird-cd.yml",
225
+ dir_path=".gitlab/tinybird",
226
+ ),
220
227
  ]
221
228
 
222
229
 
@@ -6,7 +6,7 @@ from typing import Optional, Tuple
6
6
  import click
7
7
 
8
8
  from tinybird.client import TinyB
9
- from tinybird.prompts import create_prompt, mock_prompt, rules_prompt
9
+ from tinybird.prompts import create_prompt, mock_prompt, readme_prompt, rules_prompt
10
10
  from tinybird.tb.modules.cicd import init_cicd
11
11
  from tinybird.tb.modules.cli import cli
12
12
  from tinybird.tb.modules.common import _generate_datafile, coro, generate_datafile
@@ -88,12 +88,32 @@ async def create(
88
88
  click.echo(FeedbackManager.success(message="✓ Scaffolding completed!\n"))
89
89
  created_something = True
90
90
  result = ""
91
- if data or prompt:
91
+ if (data or prompt) and user_token:
92
92
  click.echo(FeedbackManager.highlight(message="\n» Creating resources..."))
93
93
  result, created_something = await create_resources(
94
94
  local_client, tb_client, user_token, data, prompt, folder
95
95
  )
96
96
  click.echo(FeedbackManager.success(message="✓ Done!\n"))
97
+ if prompt:
98
+ readme_path = Path(root_folder) / "README.md"
99
+ if readme_path.exists():
100
+ click.echo(FeedbackManager.highlight(message="\n» Updating README.md..."))
101
+ else:
102
+ click.echo(FeedbackManager.highlight(message="\n» Creating README.md..."))
103
+ readme_path.touch()
104
+ llm = LLM(user_token=str(user_token), host=tb_client.host)
105
+ readme_user_prompt = prompt or ""
106
+ all_resources_xml = get_resources_xml(project)
107
+ readme_response = llm.ask(
108
+ system_prompt=readme_prompt(
109
+ readme_path.read_text(), tb_client.host, tb_client.token, all_resources_xml
110
+ ),
111
+ prompt=readme_user_prompt,
112
+ )
113
+ readme_result = extract_xml(readme_response, "readme")
114
+ readme_path.write_text(readme_result)
115
+ click.echo(FeedbackManager.success(message="✓ Done!\n"))
116
+ created_something = True
97
117
 
98
118
  if not already_has_cicd(root_folder):
99
119
  click.echo(FeedbackManager.highlight(message="\n» Creating CI/CD files for GitHub and GitLab..."))
@@ -390,3 +410,30 @@ def get_context() -> str:
390
410
  def save_context(prompt: str, feedback: str):
391
411
  context_file = get_context_file()
392
412
  context_file.write_text(f"- {prompt}\n{feedback}")
413
+
414
+
415
+ def get_resources_xml(project: Project) -> str:
416
+ folder = project.folder
417
+ datasource_paths = [
418
+ Path(folder) / "datasources" / f for f in os.listdir(Path(folder) / "datasources") if f.endswith(".datasource")
419
+ ]
420
+ pipes_paths = [
421
+ Path(folder) / "endpoints" / f for f in os.listdir(Path(folder) / "endpoints") if f.endswith(".pipe")
422
+ ]
423
+ resources_xml = "\n".join(
424
+ [
425
+ f"<resource><type>{resource_type}</type><name>{resource_name}</name><content>{resource_content}</content></resource>"
426
+ for resource_type, resource_name, resource_content in [
427
+ ("datasource", ds.stem, ds.read_text()) for ds in datasource_paths
428
+ ]
429
+ + [
430
+ (
431
+ "pipe",
432
+ pipe.stem,
433
+ pipe.read_text(),
434
+ )
435
+ for pipe in pipes_paths
436
+ ]
437
+ ]
438
+ )
439
+ return resources_xml
@@ -5,7 +5,9 @@ from tinybird.tb.modules.common import format_data_to_ndjson
5
5
 
6
6
 
7
7
  def get_fixture_dir(folder: str) -> Path:
8
- return Path(folder) / "fixtures"
8
+ fixture_dir = Path(folder) / "fixtures"
9
+ fixture_dir.mkdir(exist_ok=True)
10
+ return fixture_dir
9
11
 
10
12
 
11
13
  def persist_fixture_sql(fixture_name: str, sql: str, folder: str) -> Path:
@@ -371,7 +371,7 @@ async def infra_init(
371
371
 
372
372
  # Create infra directory if it doesn't exist
373
373
  infra_dir = Path(f"infra/{cloud_provider}")
374
- infra_dir.mkdir(exist_ok=True)
374
+ infra_dir.mkdir(parents=True, exist_ok=True)
375
375
  yaml_path = infra_dir / "k8s.yaml"
376
376
  tf_path = infra_dir / "main.tf"
377
377
  config_path = infra_dir / "config.json"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev112
3
+ Version: 0.0.1.dev113
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli/introduction.html
6
6
  Author: Tinybird
@@ -6,7 +6,7 @@ tinybird/context.py,sha256=FfqYfrGX_I7PKGTQo93utaKPDNVYWelg4Hsp3evX5wM,1291
6
6
  tinybird/datatypes.py,sha256=XNypumfqNjsvLJ5iNXnbVHRvAJe0aQwI3lS6Cxox-e0,10979
7
7
  tinybird/feedback_manager.py,sha256=a_ZhFX2zcB7vRknIcmHKMdQbb0c7TqlTBQ_5hPuWh88,69267
8
8
  tinybird/git_settings.py,sha256=Sw_8rGmribEFJ4Z_6idrVytxpFYk7ez8ei0qHULzs3E,3934
9
- tinybird/prompts.py,sha256=0i4Bzg-60lV6NlrQ1Vu6NZ_2we3GqV3rExu77YfA0V4,33889
9
+ tinybird/prompts.py,sha256=6J-dE0gOSOaIwdEwJUhEQS1Ztllz_qZnpnrv-tDoJWA,35511
10
10
  tinybird/sql.py,sha256=C_B81wwv3BsqyXGhF5oTk9DcTUkrp7NwIFqSzd3Dmjc,47854
11
11
  tinybird/sql_template.py,sha256=mK0yeRFctbXTAu0VNMjIzoFBJoh9PoniAVgEatA5SG4,99832
12
12
  tinybird/sql_template_fmt.py,sha256=KUHdj5rYCYm_rKKdXYSJAE9vIyXUQLB0YSZnUXHeBlY,10196
@@ -15,24 +15,24 @@ tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
15
15
  tinybird/tornado_template.py,sha256=jjNVDMnkYFWXflmT8KU_Ssbo5vR8KQq3EJMk5vYgXRw,41959
16
16
  tinybird/ch_utils/constants.py,sha256=aYvg2C_WxYWsnqPdZB1ZFoIr8ZY-XjUXYyHKE9Ansj0,3890
17
17
  tinybird/ch_utils/engine.py,sha256=BZuPM7MFS7vaEKK5tOMR2bwSAgJudPrJt27uVEwZmTY,40512
18
- tinybird/tb/__cli__.py,sha256=XBYsgERHHC2rSmVZ_I1ovdmeZxmG3you6UQuNA4-qR4,252
18
+ tinybird/tb/__cli__.py,sha256=LaRkkDcDxWMZ18zj4QiJLTrW9enEg_2awfZ1Gc0sO-U,252
19
19
  tinybird/tb/cli.py,sha256=H_HaZhkimKgkryYXpBjHfY9Qtg-ZORiONU3psDNpzDk,1135
20
20
  tinybird/tb/modules/auth.py,sha256=L1IatO2arRSzys3t8px8xVt8uPWUL5EVD0sFzAV_uVU,9022
21
21
  tinybird/tb/modules/build.py,sha256=h5drdmDFX8NHts9dA2Zepao7KSgMAl3DZGyFufVZP78,11085
22
- tinybird/tb/modules/cicd.py,sha256=k2hCout_N1g_rRAMWo_cf9tAGiJ1Puu5eiTV2DPob20,6939
22
+ tinybird/tb/modules/cicd.py,sha256=A7zJZF9HkJ6NPokplgNjmefMrpUlRbFxBbjMZhq5OTI,7110
23
23
  tinybird/tb/modules/cli.py,sha256=sZEYoJVfqN6zaCSN5NQRrzQLXxeJ5nDO7EnFXit9qh8,16157
24
24
  tinybird/tb/modules/common.py,sha256=d2kkXrkoMBmh_CirBBgLw1E1_cxKUUB3ZE_Mx1x9tww,81717
25
25
  tinybird/tb/modules/config.py,sha256=FqdLpLaKpYubqw3xkB4EX06ufZYDgGRxONR_9i-y-KE,11416
26
26
  tinybird/tb/modules/connection.py,sha256=IL095_8ideKM1Ueen3BdsYvJKA05VAdpv7bSQjhXKJo,5354
27
27
  tinybird/tb/modules/copy.py,sha256=MAVqKip8_QhOYq99U_XuqSO6hCLJEh5sFtbhcXtI3SI,5802
28
- tinybird/tb/modules/create.py,sha256=3Yz257QM7c8OgWlVRacnNXFkZPsDQFNLzJSVr83Xe70,14335
28
+ tinybird/tb/modules/create.py,sha256=hIFZeaVKxNij80jKMWT9Pq9M-Uoo2hoUXfb1VdD5H_8,16401
29
29
  tinybird/tb/modules/datasource.py,sha256=dNCK9iCR2xPLfwqqwg2ixyE6NuoVEiJU2mBZBmOYrVY,16906
30
30
  tinybird/tb/modules/deployment.py,sha256=UIW3W0qKBRk2o4gE8WDjmq9-UkrNZjtkbyKvcQR203k,19515
31
31
  tinybird/tb/modules/endpoint.py,sha256=EhVoGAXsFz-83Fiwj1gI-I73iRRvL49d0W81un7hvPE,12080
32
32
  tinybird/tb/modules/exceptions.py,sha256=4A2sSjCEqKUMqpP3WI00zouCWW4uLaghXXLZBSw04mY,3363
33
33
  tinybird/tb/modules/feedback_manager.py,sha256=7e-O-LyTi_hTln47Y_FuSWerggZQLUGqfTJeYK6D9i4,69479
34
34
  tinybird/tb/modules/fmt.py,sha256=qpf9APqKTKL2uphNgdbj4OMVyLkAxZn6dn4eHF99L5g,3553
35
- tinybird/tb/modules/infra.py,sha256=GA5xnYLlVItPfJu_3_5NIdHQDuyfk2Z71wtcn9NncGA,33189
35
+ tinybird/tb/modules/infra.py,sha256=fnbsfx8paRE8RHPbjdSOiOEvtyQbJ95OrHZuCighgKA,33203
36
36
  tinybird/tb/modules/job.py,sha256=956Pj8BEEsiD2GZsV9RKKVM3I_CveOLgS82lykO5ukk,2963
37
37
  tinybird/tb/modules/llm.py,sha256=AC0VSphTOM2t-v1_3NLvNN_FIbgMo4dTyMqIv5nniPo,835
38
38
  tinybird/tb/modules/llm_utils.py,sha256=nS9r4FAElJw8yXtmdYrx-rtI2zXR8qXfi1QqUDCfxvg,3469
@@ -64,7 +64,7 @@ tinybird/tb/modules/datafile/build_pipe.py,sha256=w-Wd08gZYAEcak9FdBijVfIU2_Wn_P
64
64
  tinybird/tb/modules/datafile/common.py,sha256=4pvW92X9BXomaN3-WhQOjvnAHY96O4dTsp4USBdknzk,83192
65
65
  tinybird/tb/modules/datafile/diff.py,sha256=-0J7PsBO64T7LOZSkZ4ZFHHCPvT7cKItnJkbz2PkndU,6754
66
66
  tinybird/tb/modules/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
67
- tinybird/tb/modules/datafile/fixture.py,sha256=si-9LB-LdKQSWDtVW82xDrHtFfko5bgBG1cvjqqrcPU,1064
67
+ tinybird/tb/modules/datafile/fixture.py,sha256=V3WGfPLIR78el3oCNWNkySWs6LxIufyIM0mDrrT3aWc,1131
68
68
  tinybird/tb/modules/datafile/format_common.py,sha256=WaNV4tXrQU5gjV6MJP-5TGqg_Bre6ilNS8emvFl-X3c,1967
69
69
  tinybird/tb/modules/datafile/format_datasource.py,sha256=gpRsGnDEMxEo0pIlEHXKvyuwKIpqJJUCN9JRSiDYs_4,6156
70
70
  tinybird/tb/modules/datafile/format_pipe.py,sha256=58iSTrJ5lg-IsbpX8TQumQTuZ6UIotMsCIkNJd1M-pM,7418
@@ -81,8 +81,8 @@ tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4
81
81
  tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
82
82
  tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
83
83
  tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
84
- tinybird-0.0.1.dev112.dist-info/METADATA,sha256=qVwK9fWPocmfDDsDhlUcPh61jVOZhCV7vZAgMzLn-xs,1612
85
- tinybird-0.0.1.dev112.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
86
- tinybird-0.0.1.dev112.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
87
- tinybird-0.0.1.dev112.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
88
- tinybird-0.0.1.dev112.dist-info/RECORD,,
84
+ tinybird-0.0.1.dev113.dist-info/METADATA,sha256=pXBu3TNee7oQ8TTmimVtTCShVvNle6Q26inMsxXIU6o,1612
85
+ tinybird-0.0.1.dev113.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
86
+ tinybird-0.0.1.dev113.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
87
+ tinybird-0.0.1.dev113.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
88
+ tinybird-0.0.1.dev113.dist-info/RECORD,,