tinybird 0.0.1.dev15__py3-none-any.whl → 0.0.1.dev17__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.

@@ -1,25 +1,14 @@
1
- import hashlib
2
1
  import os
3
2
  import time
4
- from typing import Optional
5
3
 
6
4
  import click
7
- import requests
8
5
 
9
6
  import docker
10
7
  from tinybird.feedback_manager import FeedbackManager
11
8
  from tinybird.tb.modules.cli import cli
12
- from tinybird.tb.modules.common import (
13
- coro,
14
- )
15
- from tinybird.tb.modules.config import CLIConfig
9
+ from tinybird.tb.modules.common import coro
16
10
  from tinybird.tb.modules.exceptions import CLIException
17
-
18
- # TODO: Use the official Tinybird image once it's available 'tinybirdco/tinybird-local:latest'
19
- TB_IMAGE_NAME = "registry.gitlab.com/tinybird/analytics/tinybird-local-jammy-3.11:latest"
20
- TB_CONTAINER_NAME = "tinybird-local"
21
- TB_LOCAL_PORT = int(os.getenv("TB_LOCAL_PORT", 80))
22
- TB_LOCAL_HOST = f"http://localhost:{TB_LOCAL_PORT}"
11
+ from tinybird.tb.modules.local_common import TB_CONTAINER_NAME, TB_IMAGE_NAME, TB_LOCAL_PORT
23
12
 
24
13
 
25
14
  def start_tinybird_local(
@@ -113,39 +102,6 @@ def remove_tinybird_local(docker_client):
113
102
  pass
114
103
 
115
104
 
116
- async def get_tinybird_local_client(path: Optional[str] = None):
117
- """Get a Tinybird client connected to the local environment."""
118
- config = CLIConfig.get_project_config()
119
- try:
120
- # ruff: noqa: ASYNC210
121
- tokens = requests.get(f"{TB_LOCAL_HOST}/tokens").json()
122
- except Exception:
123
- raise CLIException("Tinybird local is not running. Please run `tb local start` first.")
124
-
125
- user_token = tokens["user_token"]
126
- token = tokens["workspace_admin_token"]
127
- # Create a new workspace if path is provided. This is used to isolate the build in a different workspace.
128
- if path:
129
- folder_hash = hashlib.sha256(path.encode()).hexdigest()
130
- user_client = config.get_client(host=TB_LOCAL_HOST, token=user_token)
131
-
132
- ws_name = f"Tinybird_Local_Build_{folder_hash}"
133
-
134
- user_workspaces = await user_client.user_workspaces()
135
- ws = next((ws for ws in user_workspaces["workspaces"] if ws["name"] == ws_name), None)
136
- if not ws:
137
- await user_client.create_workspace(ws_name, template=None)
138
- user_workspaces = await user_client.user_workspaces()
139
- ws = next((ws for ws in user_workspaces["workspaces"] if ws["name"] == ws_name), None)
140
-
141
- token = ws["token"]
142
-
143
- config.set_token(token)
144
- config.set_host(TB_LOCAL_HOST)
145
- config.set_user_token(user_token)
146
- return config.get_client(host=TB_LOCAL_HOST, token=token)
147
-
148
-
149
105
  @cli.command()
150
106
  def upgrade():
151
107
  """Upgrade Tinybird CLI to the latest version"""
@@ -0,0 +1,54 @@
1
+ import hashlib
2
+ import os
3
+ from typing import Optional
4
+
5
+ import requests
6
+
7
+ from tinybird.client import TinyB
8
+ from tinybird.tb.modules.config import CLIConfig
9
+ from tinybird.tb.modules.exceptions import CLIException
10
+
11
+ # TODO: Use the official Tinybird image once it's available 'tinybirdco/tinybird-local:latest'
12
+ TB_IMAGE_NAME = "registry.gitlab.com/tinybird/analytics/tinybird-local-jammy-3.11:latest"
13
+ TB_CONTAINER_NAME = "tinybird-local"
14
+ TB_LOCAL_PORT = int(os.getenv("TB_LOCAL_PORT", 80))
15
+ TB_LOCAL_HOST = f"http://localhost:{TB_LOCAL_PORT}"
16
+
17
+
18
+ async def get_tinybird_local_client(path: Optional[str] = None) -> TinyB:
19
+ """Get a Tinybird client connected to the local environment."""
20
+ config = CLIConfig.get_project_config()
21
+ try:
22
+ # ruff: noqa: ASYNC210
23
+ tokens = requests.get(f"{TB_LOCAL_HOST}/tokens").json()
24
+ except Exception:
25
+ raise CLIException("Tinybird local is not running. Please run `tb local start` first.")
26
+
27
+ user_token = tokens["user_token"]
28
+ default_token = tokens["workspace_admin_token"]
29
+ # Create a new workspace if path is provided. This is used to isolate the build in a different workspace.
30
+ path = path or os.getcwd()
31
+ if path:
32
+ folder_hash = hashlib.sha256(path.encode()).hexdigest()
33
+ user_client = config.get_client(host=TB_LOCAL_HOST, token=user_token)
34
+
35
+ ws_name = f"Tinybird_Local_Build_{folder_hash}"
36
+
37
+ user_workspaces = await user_client.user_workspaces()
38
+ ws = next((ws for ws in user_workspaces["workspaces"] if ws["name"] == ws_name), None)
39
+ if not ws:
40
+ await user_client.create_workspace(ws_name, template=None)
41
+ user_workspaces = await user_client.user_workspaces()
42
+ ws = next((ws for ws in user_workspaces["workspaces"] if ws["name"] == ws_name), None)
43
+
44
+ ws_token = ws["token"]
45
+
46
+ config.set_token(ws_token)
47
+ config.set_token_for_host(TB_LOCAL_HOST, ws_token)
48
+ config.set_host(TB_LOCAL_HOST)
49
+ else:
50
+ config.set_token(default_token)
51
+ config.set_token_for_host(TB_LOCAL_HOST, default_token)
52
+
53
+ config.set_user_token(user_token)
54
+ return config.get_client(host=TB_LOCAL_HOST)
@@ -9,7 +9,7 @@ from tinybird.tb.modules.common import CLIException, coro
9
9
  from tinybird.tb.modules.config import CLIConfig
10
10
  from tinybird.tb.modules.datafile.fixture import build_fixture_name, persist_fixture
11
11
  from tinybird.tb.modules.llm import LLM
12
- from tinybird.tb.modules.local import get_tinybird_local_client
12
+ from tinybird.tb.modules.local_common import get_tinybird_local_client
13
13
 
14
14
 
15
15
  @cli.command()
@@ -17,7 +17,6 @@ import tinybird.context as context
17
17
  from tinybird.client import AuthNoTokenException, DoesNotExistException, TinyB
18
18
  from tinybird.config import DEFAULT_API_HOST, FeatureFlags
19
19
  from tinybird.feedback_manager import FeedbackManager
20
- from tinybird.tb.modules.branch import warn_if_in_live
21
20
  from tinybird.tb.modules.cli import cli
22
21
  from tinybird.tb.modules.common import (
23
22
  coro,
@@ -499,9 +498,6 @@ async def pipe_delete(ctx: click.Context, pipe_name_or_id: str, yes: bool):
499
498
  result = await process_file(file_path, client)
500
499
  pipe_name_or_id = result[0]["name"]
501
500
 
502
- semver: str = ctx.ensure_object(dict)["config"]["semver"]
503
- await warn_if_in_live(semver)
504
-
505
501
  if yes or click.confirm(FeedbackManager.warning_confirm_delete_pipe(pipe=pipe_name_or_id)):
506
502
  try:
507
503
  await client.pipe_delete(pipe_name_or_id)
@@ -3,8 +3,8 @@
3
3
  # - If it makes sense and only when strictly necessary, you can create utility functions in this file.
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
+ import difflib
6
7
  import glob
7
- import json
8
8
  import os
9
9
  from pathlib import Path
10
10
  from typing import Iterable, List, Optional, Tuple
@@ -18,7 +18,7 @@ from tinybird.tb.modules.common import coro
18
18
  from tinybird.tb.modules.config import CLIConfig
19
19
  from tinybird.tb.modules.exceptions import CLIException
20
20
  from tinybird.tb.modules.llm import LLM, TestExpectation
21
- from tinybird.tb.modules.local import get_tinybird_local_client
21
+ from tinybird.tb.modules.local_common import get_tinybird_local_client
22
22
 
23
23
 
24
24
  @cli.group()
@@ -70,22 +70,26 @@ async def test_create(ctx: click.Context, pipe: str, prompt: Optional[str], fold
70
70
  pipe_path = Path(folder) / pipe_path
71
71
  pipe_content = pipe_path.read_text()
72
72
 
73
- llm_config = CLIConfig.get_llm_config()
74
- llm = LLM(key=llm_config["api_key"])
75
-
76
73
  client = await get_tinybird_local_client(os.path.abspath(folder))
74
+ pipe_nodes = await client._req(f"/v0/pipes/{pipe_name}")
75
+ pipe_params = set([param["name"] for node in pipe_nodes["nodes"] for param in node["params"]])
76
+
77
+ llm_config = CLIConfig.get_llm_config()
78
+ llm = LLM(client=client, api_key=llm_config["api_key"])
77
79
 
78
- test_expectations = await llm.create_test_commands(pipe_content=pipe_content, context=prompt)
80
+ test_expectations = await llm.create_test_commands(
81
+ pipe_content=pipe_content, pipe_params=pipe_params, context=prompt
82
+ )
79
83
  valid_test_expectations = []
80
84
  for test in test_expectations.tests:
85
+ test_params = test.parameters if test.parameters.startswith("?") else f"?{test.parameters}"
81
86
  try:
82
- response = await client._req(f"/v0/pipes/{pipe_name}.ndjson?{test.parameters}")
87
+ response = await client._req(f"/v0/pipes/{pipe_name}.ndjson{test_params}")
83
88
  except Exception:
84
89
  continue
85
90
 
86
- test.expected_result = json.dumps(response)
91
+ test.expected_result = response
87
92
  valid_test_expectations.append(test.model_dump())
88
-
89
93
  if valid_test_expectations:
90
94
  generate_test_file(pipe_name, valid_test_expectations)
91
95
  click.echo(FeedbackManager.info(message=f"✓ /tests/{pipe_name}.yaml"))
@@ -117,11 +121,18 @@ async def test_run(ctx: click.Context, file: Tuple[str, ...], folder: Optional[s
117
121
  for test in test_file_content:
118
122
  try:
119
123
  response = await client._req(f"/v0/pipes/{test_file_path.stem}.ndjson?{test['parameters']}")
120
- if test["expected_result"] != json.dumps(response):
121
- raise Exception("Test failed")
124
+ if test["expected_result"] != response:
125
+ diff = difflib.ndiff(
126
+ test["expected_result"].splitlines(keepends=True), response.splitlines(keepends=True)
127
+ )
128
+ printable_diff = "".join(diff)
129
+ raise Exception(
130
+ f"\nExpected: \n{test['expected_result']}\nGot: \n{response}\nDiff: \n{printable_diff}"
131
+ )
122
132
  click.echo(FeedbackManager.success(message=f"✓ {test_file_path.name} - {test['name']}"))
123
- except Exception:
133
+ except Exception as e:
124
134
  click.echo(FeedbackManager.error(message=f"✗ {test_file_path.name} - {test['name']}"))
135
+ click.echo(FeedbackManager.error(message=f"Output and expected output are different: \n{e}"))
125
136
 
126
137
  for test_file in file_list:
127
138
  await run_test(test_file)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird
3
- Version: 0.0.1.dev15
3
+ Version: 0.0.1.dev17
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli/introduction.html
6
6
  Author: Tinybird
@@ -1,11 +1,12 @@
1
1
  tinybird/__cli__.py,sha256=pgYsVLcqL16wtSn6KtKweNZYoYJdEksTgSvQAW7hH64,250
2
- tinybird/client.py,sha256=nd97gD2-8Ap8yDonBcVwk9eXDAL43hmIYdo-Pse43RE,50738
2
+ tinybird/client.py,sha256=_voHMgKOwOhmncSaPH6DL94X6YPqKJJzcY-EKp8xLug,50810
3
3
  tinybird/config.py,sha256=Z-BX9FrjgsLw1YwcCdF0IztLB97Zpc70VVPplO_pDSY,6089
4
4
  tinybird/connectors.py,sha256=lkpVSUmSuViEZBa4QjTK7YmPHUop0a5UFoTrSmlVq6k,15244
5
5
  tinybird/context.py,sha256=kutUQ0kCwparowI74_YLXx6wtTzGLRouJ6oGHVBPzBo,1291
6
6
  tinybird/datatypes.py,sha256=IHyhZ86ib54Vnd1pbod9y2aS8DDvDKZm1HJGlThdbuQ,10460
7
- tinybird/feedback_manager.py,sha256=-nDkg13DoiNk40AztzSJdbldbKhfuTsCZcSOviK9sik,67790
7
+ tinybird/feedback_manager.py,sha256=U_VbVl3RBCPV-qc3g8vz124Mg9XeMmKk055eqiIaBqY,68338
8
8
  tinybird/git_settings.py,sha256=XUL9ZUj59-ZVQJDYmMEq4UpnuuOuQOHGlNcX3JgQHjQ,3954
9
+ tinybird/prompts.py,sha256=pCqN1JAHqdA-PgxBnzjIYpCXjpko89Xu4EHl6ol0iNs,6417
9
10
  tinybird/sql.py,sha256=gfRKjdqEygcE1WOTeQ1QV2Jal8Jzl4RSX8fftu1KSEs,45825
10
11
  tinybird/sql_template.py,sha256=IqYRfUxDYBCoOYjqqvn--_8QXLv9FSRnJ0bInx7q1Xs,93051
11
12
  tinybird/sql_template_fmt.py,sha256=1z-PuqSZXtzso8Z_mPqUc-NxIxUrNUcVIPezNieZk-M,10196
@@ -14,38 +15,38 @@ tinybird/syncasync.py,sha256=fAvq0qkRgqXqXMKwbY2iJNYqLT_r6mDsh1MRpGKrdRU,27763
14
15
  tinybird/tornado_template.py,sha256=o2HguxrL1Evnt8o3IvrsI8Zm6JtRQ3zhLJKf1XyR3SQ,41965
15
16
  tinybird/ch_utils/constants.py,sha256=aYvg2C_WxYWsnqPdZB1ZFoIr8ZY-XjUXYyHKE9Ansj0,3890
16
17
  tinybird/ch_utils/engine.py,sha256=OXkBhlzGjZotjD0vaT-rFIbSGV4tpiHxE8qO_ip0SyQ,40454
17
- tinybird/tb/cli.py,sha256=NipQJ0V-uqJDQSb4xkTw04ALzgqSfe1twmjkBkQJWT4,784
18
+ tinybird/tb/cli.py,sha256=onCxcKvTV4RuokC5V3t82OXWAIwgU6pMWs8rpWOUi_o,815
18
19
  tinybird/tb/modules/auth.py,sha256=hynZ-Temot8YBsySUWKSFzZlYadtFPxG3o6lCSu1n6E,9018
19
- tinybird/tb/modules/branch.py,sha256=R1tTUBGyI0p_dt2IAWbuyNOvemhjCIPwYxEmOxL3zOg,38468
20
- tinybird/tb/modules/build.py,sha256=_EvBtX5FO7fnpHP74qlrBJqm7Uk1Bx9NarJ8P-M8vvg,12901
20
+ tinybird/tb/modules/build.py,sha256=3YEcUBSsp8DREyox5x27BabcdYHFEokGnQ-f8-etDmo,8412
21
+ tinybird/tb/modules/build_shell.py,sha256=jN06ZT7BK3lHtMgBjaOn4sD6yooUy9v8uuZnE-jjmlU,5485
21
22
  tinybird/tb/modules/cicd.py,sha256=KCFfywFfvGRh24GZwqrhICiTK_arHelPs_X4EB-pXIw,7331
22
- tinybird/tb/modules/cli.py,sha256=pF7bxobeLJP-aN7RwJmLaYOKQZHlBnneZpYbiAbTmaM,55511
23
- tinybird/tb/modules/common.py,sha256=Vubc2AIR8BfEupnT5e1Y8OYGEyvNoIcjo8th-SaUflw,80111
24
- tinybird/tb/modules/config.py,sha256=ppWvACHrSLkb5hOoQLYNby2w8jR76-8Kx2NBCst7ntQ,11760
23
+ tinybird/tb/modules/cli.py,sha256=PRURYKphzjqVltMG647D8ADGS-YFR2rAkDNEwUTTDjk,53082
24
+ tinybird/tb/modules/common.py,sha256=ZvkuI1JYVVwBZOZ9VDiNLR_-HHRavTHqSe6uVPJ8MS4,76431
25
+ tinybird/tb/modules/config.py,sha256=ri4Gwyzqol6-NofTjHnWquuDzJOjHbkaAnboO8JNENY,11499
25
26
  tinybird/tb/modules/connection.py,sha256=ZSqBGoRiJedjHKEyB_fr1ybucOHtaad8d7uqGa2Q92M,28668
26
- tinybird/tb/modules/create.py,sha256=WL2GzJBgH3z1m6oU58uZXyUQRzVB2rH4ig4BIdOJkLw,6307
27
- tinybird/tb/modules/datasource.py,sha256=tjcf5o-HYIdTkb_c1ErGUFIE-W6G992vsvCuDGcxb9Q,35818
27
+ tinybird/tb/modules/create.py,sha256=fr418rucTn9etxcOfdBViV9dk_mIQJpB_L0XO8NF4e0,10059
28
+ tinybird/tb/modules/datasource.py,sha256=rX7RnrXl4xxPwGxkj1DgLr521wjNXEixAeAyxMrkJJk,35472
28
29
  tinybird/tb/modules/exceptions.py,sha256=4A2sSjCEqKUMqpP3WI00zouCWW4uLaghXXLZBSw04mY,3363
29
30
  tinybird/tb/modules/fmt.py,sha256=UszEQO15fdzQ49QEj7Unhu68IKwSuKPsOrKhk2p2TAg,3547
30
31
  tinybird/tb/modules/job.py,sha256=eoBVyA24lYIPonU88Jn7FF9hBKz1kScy9_w_oWreuc4,2952
31
- tinybird/tb/modules/llm.py,sha256=j8AZl-4BaCrtpM3_ozGt2Pr0BPfPFG5qYAaFgjJabGk,2008
32
- tinybird/tb/modules/local.py,sha256=ajOrQMttYLXNs-4uDW9njw7-eIAHENvlbrNbURhr6gI,6926
32
+ tinybird/tb/modules/llm.py,sha256=duwf3r1caLaKzuOJC_stI_Hx54ncr-5uWaWeZ3HN65o,3099
33
+ tinybird/tb/modules/local.py,sha256=hV2fvHPaVHVzKwVoVDFAIbJZslOX1_COx96DZrR-dW8,5151
34
+ tinybird/tb/modules/local_common.py,sha256=Z2JYIE5HIJVNuzdIv1_NFxSEs8DOsLoCzbmT1iy0-HU,2172
33
35
  tinybird/tb/modules/login.py,sha256=vIeysdttfGDBMkf_i3cqAVNR5s0X0D6exATcRsDdWiA,5849
34
- tinybird/tb/modules/mock.py,sha256=HorUdULzxCCCGsFlPvL4RJeMJvVNnKnhbxxSog2Cn1Y,2817
35
- tinybird/tb/modules/pipe.py,sha256=9wnfKbp2FkmLiJgVk3qbra76ktwsUTXghu6j9cCEahQ,31058
36
- tinybird/tb/modules/prompts.py,sha256=KIDoAC0FvBSSsTft_mhpY6vxliNRBYOCsqikr_Hx0HA,9655
36
+ tinybird/tb/modules/mock.py,sha256=5xhR_djr1-_JwJPI-Oy1exI3ndz7srmmvlei0DMQCAk,2824
37
+ tinybird/tb/modules/pipe.py,sha256=P_W5HW1-UEidWlw0pty-n_qYvCAyMlNorBmWzmCP7cU,30906
37
38
  tinybird/tb/modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
38
39
  tinybird/tb/modules/table.py,sha256=hG-PRDVuFp2uph41WpoLRV1yjp3RI2fi_iGGiI0rdxU,7695
39
40
  tinybird/tb/modules/tag.py,sha256=1qQWyk1p3Btv3LzM8VbJG-k7x2-pFuAlYCg3QL6QewI,3480
40
41
  tinybird/tb/modules/telemetry.py,sha256=iEGnMuCuNhvF6ln__j6X9MSTwL_0Hm-GgFHHHvhfknk,10466
41
- tinybird/tb/modules/test.py,sha256=UR7Fz8AHhIptZfxofidzNzTnfAgwhCSWaGyjKbD2TAQ,4605
42
+ tinybird/tb/modules/test.py,sha256=wWOg9FFyAiJkF7qjYapJUne5SVyXwmmhStfpCAZwZ80,5383
42
43
  tinybird/tb/modules/token.py,sha256=r0oeG1RpOOzHtqbUaHBiOmhE55HfNIvReAAWyKl9fJg,12695
43
44
  tinybird/tb/modules/workspace.py,sha256=FVlh-kbiZp5Gvp6dGFxi0UD8ail77rMamXLhqdVwrZ0,10916
44
45
  tinybird/tb/modules/workspace_members.py,sha256=08W0onEYkKLEC5TkAI07cxN9XSquEm7HnL7OkHAVDjo,8715
45
46
  tinybird/tb/modules/datafile/build.py,sha256=rFdK_GerPDgPfyPfZ4EZ0-cQqWfHd6htS0ls-Yy7khk,92491
46
47
  tinybird/tb/modules/datafile/build_common.py,sha256=74547h5ja4C66DAwDMabj75FA_BUTJxTJv-24tSFmrs,4551
47
48
  tinybird/tb/modules/datafile/build_datasource.py,sha256=fquzEGwk9NL_0K5YYG86Xtvgn4J5YHtRUoKJxbQGO0s,17344
48
- tinybird/tb/modules/datafile/build_pipe.py,sha256=sSSl1rQMkR4uUbFCxK_aDXZi3JwKV64YZlBdBWgGKjo,27657
49
+ tinybird/tb/modules/datafile/build_pipe.py,sha256=V5u21NEpSCWNVl46Cdn_I_bOojxpgSrg1MnScPDqx4U,27648
49
50
  tinybird/tb/modules/datafile/common.py,sha256=NkoCdj4p-Ak3n80DJB5a33Ucw2WTcSYa8iqw4KsRZGs,81082
50
51
  tinybird/tb/modules/datafile/diff.py,sha256=-iaP7GvAzZtZSa8jPgVpOFlTRutxgxRBLBcGL1_RFr4,6743
51
52
  tinybird/tb/modules/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
@@ -65,8 +66,8 @@ tinybird/tb_cli_modules/config.py,sha256=6NTgIdwf0X132A1j6G_YrdPep87ymZ9b5pABabK
65
66
  tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
66
67
  tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
67
68
  tinybird/tb_cli_modules/telemetry.py,sha256=iEGnMuCuNhvF6ln__j6X9MSTwL_0Hm-GgFHHHvhfknk,10466
68
- tinybird-0.0.1.dev15.dist-info/METADATA,sha256=D7NcYU4DyAQdBn5hevIYUm3gugIyzdVfXYT7L5DxTYQ,2405
69
- tinybird-0.0.1.dev15.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
70
- tinybird-0.0.1.dev15.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
71
- tinybird-0.0.1.dev15.dist-info/top_level.txt,sha256=pgw6AzERHBcW3YTi2PW4arjxLkulk2msOz_SomfOEuc,45
72
- tinybird-0.0.1.dev15.dist-info/RECORD,,
69
+ tinybird-0.0.1.dev17.dist-info/METADATA,sha256=eu-lIaxe76zXyzD78jMIjloB-BEVztY_wQeN3mJFoOI,2405
70
+ tinybird-0.0.1.dev17.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
71
+ tinybird-0.0.1.dev17.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
72
+ tinybird-0.0.1.dev17.dist-info/top_level.txt,sha256=pgw6AzERHBcW3YTi2PW4arjxLkulk2msOz_SomfOEuc,45
73
+ tinybird-0.0.1.dev17.dist-info/RECORD,,