tinybird 0.0.1.dev61__py3-none-any.whl → 0.0.1.dev63__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/config.py CHANGED
@@ -49,12 +49,6 @@ LEGACY_HOSTS = {
49
49
  "https://ui.us-west-2.aws.tinybird.co": "https://app.tinybird.co/aws/us-west-2",
50
50
  "https://ui.eu-central-1.aws.tinybird.co": "https://app.tinybird.co/aws/eu-central-1",
51
51
  "https://ui.ap-east.aws.tinybird.co": "https://app.tinybird.co/aws/ap-east",
52
- "https://inditex-tech.tinybird.co": "https://app.inditex.tinybird.co/gcp/inditex-tech",
53
- "https://inditex-c-stg.tinybird.co": "https://app.inditex.tinybird.co/gcp/inditex-c-stg",
54
- "https://inditex-c-pro.tinybird.co": "https://app.inditex.tinybird.co/gcp/inditex-c-pro",
55
- "https://inditex-z-stg.tinybird.co": "https://app.inditex.tinybird.co/gcp/inditex-z-stg",
56
- "https://inditex-rt-pro.tinybird.co": "https://app.inditex.tinybird.co/gcp/inditex-rt-pro",
57
- "https://inditex-pro.tinybird.co": "https://app.inditex.tinybird.co/gcp/inditex-pro",
58
52
  "https://ui.split.tinybird.co": "https://app.tinybird.co/aws/split-us-east",
59
53
  "https://ui.split.us-west-2.aws.tinybird.co": "https://app.tinybird.co/aws/split-us-west-2",
60
54
  "https://api.split.tinybird.co": "https://app.tinybird.co/aws/split-us-east",
@@ -116,3 +110,7 @@ class FeatureFlags:
116
110
  @classmethod
117
111
  def is_localhost(cls) -> bool:
118
112
  return "SET_LOCALHOST" in environ
113
+
114
+ @classmethod
115
+ def enable_snowflake_connector_command(cls) -> bool:
116
+ return "ENABLE_SNOWFLAKE_CONNECTOR_COMMAND" in environ
@@ -420,6 +420,9 @@ class FeedbackManager:
420
420
  error_updating_tag = error_message("Error updating tag: {error}")
421
421
  error_tag_generic = error_message("There was an issue updating tags. {error}")
422
422
  error_tag_not_found = error_message("Tag {tag_name} not found.")
423
+ error_snowflake_connector_not_enabled = error_message(
424
+ "🚨🚨🚨 [DEPRECATED] Snowflake connector is deprecated. Can't create the connector. **"
425
+ )
423
426
 
424
427
  info_incl_relative_path = info_message("** Relative path {path} does not exist, skipping.")
425
428
  info_ignoring_incl_file = info_message(
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.dev61'
8
- __revision__ = '0fed0e1'
7
+ __version__ = '0.0.1.dev63'
8
+ __revision__ = '4d0f19d'
@@ -321,10 +321,6 @@ class CLIConfig:
321
321
  """
322
322
  working_dir = working_dir or os.getcwd()
323
323
  path: str = os.path.join(working_dir, ".tinyb")
324
-
325
- if not os.path.exists(path):
326
- path = os.path.join(os.path.dirname(working_dir), ".tinyb")
327
-
328
324
  return CLIConfig(path, parent=CLIConfig.get_global_config())
329
325
 
330
326
  @staticmethod
@@ -47,6 +47,8 @@ def parse_pipe(
47
47
  finally:
48
48
  raise e
49
49
  for node in doc.nodes:
50
+ if "type" in node:
51
+ node["type"] = node["type"].lower()
50
52
  sql = node.get("sql", "")
51
53
  if sql.strip()[0] == "%":
52
54
  # Note(eclbg): not sure what test_mode is for. I think it does something like using placeholder values
@@ -10,6 +10,7 @@ from urllib.parse import urlencode
10
10
 
11
11
  import click
12
12
  import humanfriendly
13
+ import pyperclip
13
14
  import requests
14
15
  from click import Context
15
16
 
@@ -54,7 +55,7 @@ async def endpoint_ls(ctx: Context, match: str, format_: str):
54
55
  tk = get_name_version(t["name"])
55
56
  if pattern and not pattern.search(tk["name"]):
56
57
  continue
57
- token = get_endpoint_token(tokens, tk["name"])
58
+ token = get_endpoint_token(tokens, tk["name"]) or client.token
58
59
  endpoint_url = build_endpoint_url(client, tk["name"], token)
59
60
  table_human_readable.append((tk["name"], t["updated_at"][:-7], len(t["nodes"]), endpoint_url))
60
61
  table_machine_readable.append(
@@ -151,29 +152,23 @@ async def endpoint_data(ctx: Context, pipe: str, query: str, format_: str):
151
152
 
152
153
  @endpoint.command(name="url")
153
154
  @click.argument("pipe")
155
+ @click.option(
156
+ "--language",
157
+ default="http",
158
+ help="Language used for sending the request. Options: http, python, curl, javascript, rust, go",
159
+ )
154
160
  @click.pass_context
155
161
  @coro
156
- async def endpoint_url(ctx: Context, pipe: str):
162
+ async def endpoint_url(ctx: Context, pipe: str, language: str):
157
163
  """Print the URL of an endpoint"""
164
+ if language != "http":
165
+ click.echo(FeedbackManager.highlight(message=f"\n» Generating snippet for {language} language"))
158
166
  client: TinyB = ctx.ensure_object(dict)["client"]
159
167
  tokens = await client.tokens()
160
- token = get_endpoint_token(tokens, pipe)
161
- click.echo(build_endpoint_url(client, pipe, token))
162
-
163
-
164
- def build_endpoint_url(tb_client: TinyB, pipe_name: str, token: Optional[str]) -> Optional[str]:
165
- try:
166
- token = token or tb_client.token
167
- example_params = {
168
- "format": "json",
169
- "pipe": pipe_name,
170
- "q": "",
171
- "token": token,
172
- }
173
- response = requests.get(f"{tb_client.host}/examples/query.http?{urlencode(example_params)}")
174
- return response.text.replace("http://localhost:8001", tb_client.host)
175
- except Exception:
176
- return None
168
+ token = get_endpoint_token(tokens, pipe) or client.token
169
+ click.echo(build_endpoint_snippet(client, pipe, token, language))
170
+ if language != "http":
171
+ click.echo(FeedbackManager.success(message="\n✓ Code snippet copied to clipboard!\n"))
177
172
 
178
173
 
179
174
  def get_endpoint_token(tokens: List[Dict[str, Any]], pipe_name: str) -> Optional[str]:
@@ -272,3 +267,104 @@ async def endpoint_stats(ctx: click.Context, pipes: Tuple[str, ...], format_: st
272
267
  click.echo(json.dumps({"pipes": table_machine_readable}, indent=2))
273
268
  else:
274
269
  echo_safe_humanfriendly_tables_format_smart_table(table_human_readable, column_names=columns)
270
+
271
+
272
+ def build_endpoint_snippet(tb_client: TinyB, pipe_name: str, token: Optional[str], language: str) -> Optional[str]:
273
+ endpoint_url = build_endpoint_url(tb_client, pipe_name, token)
274
+ if language == "http":
275
+ return endpoint_url
276
+
277
+ snippet = None
278
+ if language == "python":
279
+ snippet = build_python_snippet(endpoint_url, token)
280
+ elif language == "curl":
281
+ snippet = build_curl_snippet(endpoint_url)
282
+ elif language == "javascript":
283
+ snippet = build_javascript_snippet(endpoint_url, token)
284
+ elif language == "rust":
285
+ snippet = build_rust_snippet(endpoint_url, token)
286
+ elif language == "go":
287
+ snippet = build_go_snippet(endpoint_url, token)
288
+
289
+ if not snippet:
290
+ raise CLIPipeException(FeedbackManager.error(message=f"Language {language} not supported"))
291
+
292
+ pyperclip.copy(snippet.strip())
293
+ return snippet
294
+
295
+
296
+ def build_endpoint_url(tb_client: TinyB, pipe_name: str, token: str) -> str:
297
+ example_params = {
298
+ "format": "json",
299
+ "pipe": pipe_name,
300
+ "q": "",
301
+ "token": token,
302
+ }
303
+ response = requests.get(f"{tb_client.host}/examples/query.http?{urlencode(example_params)}")
304
+ return response.text.replace("http://localhost:8001", tb_client.host)
305
+
306
+
307
+ def build_python_snippet(endpoint_url: str, token: str) -> str:
308
+ endpoint_url = endpoint_url.replace(f"token={token}", "token={{token}}")
309
+ return f"""
310
+ import requests
311
+
312
+ token = "{token}"
313
+ url = "{endpoint_url}"
314
+ response = requests.get(url)
315
+ print(response.json())
316
+ """
317
+
318
+
319
+ def build_curl_snippet(endpoint_url: str) -> str:
320
+ return f"""
321
+ curl -X GET "{endpoint_url}"
322
+ """
323
+
324
+
325
+ def build_javascript_snippet(endpoint_url: str, token: str) -> str:
326
+ endpoint_url = endpoint_url.replace(f"token={token}", "token=${token}")
327
+ return f"""
328
+ const token = "{token}";
329
+ fetch(`{endpoint_url}`)
330
+ .then(response => response.json())
331
+ .then(data => console.log(data));
332
+ """
333
+
334
+
335
+ def build_rust_snippet(endpoint_url: str) -> str:
336
+ return f"""
337
+ use reqwest::Client;
338
+
339
+ let client = Client::new();
340
+ let response = client.get("{endpoint_url}").send().await?;
341
+ """
342
+
343
+
344
+ def build_go_snippet(endpoint_url: str) -> str:
345
+ return f"""
346
+ package main
347
+
348
+ import (
349
+ "fmt"
350
+ "io"
351
+ "log"
352
+ "net/http"
353
+ )
354
+
355
+ func main() {{
356
+ url := "{endpoint_url}"
357
+ resp, err := http.Get(url)
358
+ if err != nil {{
359
+ log.Fatal(err)
360
+ }}
361
+ defer resp.Body.Close()
362
+
363
+ body, err := io.ReadAll(resp.Body)
364
+ if err != nil {{
365
+ log.Fatal(err)
366
+ }}
367
+
368
+ fmt.Println(string(body))
369
+ }}
370
+ """
@@ -5,8 +5,9 @@ from typing import Any, Dict
5
5
 
6
6
  import requests
7
7
 
8
- from tinybird.client import AuthException, AuthNoTokenException, TinyB
8
+ from tinybird.client import AuthNoTokenException, TinyB
9
9
  from tinybird.tb.modules.config import CLIConfig
10
+ from tinybird.tb.modules.exceptions import CLIException
10
11
 
11
12
  TB_IMAGE_NAME = "tinybirdco/tinybird-local:beta"
12
13
  TB_CONTAINER_NAME = "tinybird-local"
@@ -32,7 +33,7 @@ async def get_tinybird_local_config(config_obj: Dict[str, Any], build: bool = Fa
32
33
  # ruff: noqa: ASYNC210
33
34
  tokens = requests.get(f"{TB_LOCAL_HOST}/tokens").json()
34
35
  except Exception:
35
- raise AuthException("Error: Tinybird local is not running. Please run `tb local start` first.")
36
+ raise CLIException("Tinybird local is not running. Please run `tb local start` first.")
36
37
 
37
38
  user_token = tokens["user_token"]
38
39
  admin_token = tokens["admin_token"]
@@ -593,8 +593,6 @@ def format_host(host: str, subdomain: Optional[str] = None) -> str:
593
593
  'https://api.us-east.tinybird.co'
594
594
  >>> format_host('https://ui.us-east.tinybird.co', subdomain='api')
595
595
  'https://api.us-east.tinybird.co'
596
- >>> format_host('https://inditex-rt-pro.tinybird.co', subdomain='ui')
597
- 'https://inditex-rt-pro.tinybird.co'
598
596
  >>> format_host('https://cluiente-tricky.tinybird.co', subdomain='api')
599
597
  'https://cluiente-tricky.tinybird.co'
600
598
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird
3
- Version: 0.0.1.dev61
3
+ Version: 0.0.1.dev63
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli/introduction.html
6
6
  Author: Tinybird
@@ -1,10 +1,10 @@
1
1
  tinybird/__cli__.py,sha256=esPl5QDTzuQgHe5FuxWLm-fURFigGGwjnYLh9GuWUw4,232
2
2
  tinybird/client.py,sha256=W5Xttnz0bzwqqVGNJJs-4Ca2AbtCMh3URuQYPJ5APsE,52013
3
- tinybird/config.py,sha256=ENRNyEMXHj_P882o31iFz0hTveziLabVRrxiWE5RRBE,6233
3
+ tinybird/config.py,sha256=cd_RH7ZjqGjpWwu0efPkhS8VxD9K6Jix4QY2W3w1Pvs,5811
4
4
  tinybird/connectors.py,sha256=7Gjms7b5MAaBFGi3xytsJurCylprONpFcYrzp4Fw2Rc,15241
5
5
  tinybird/context.py,sha256=A3GBApac9xO6hrAMJ1s9dMrI_ou9aKF84CdEjtPddMk,1417
6
6
  tinybird/datatypes.py,sha256=XNypumfqNjsvLJ5iNXnbVHRvAJe0aQwI3lS6Cxox-e0,10979
7
- tinybird/feedback_manager.py,sha256=g1r9NcFfKXdk_13soaiTZLvdoUGleVfawl6Yfj3zmRw,67823
7
+ tinybird/feedback_manager.py,sha256=ADuy1yC3fCFM_ii_Haphg8Gdzapa5pX9dlRTVbuUqxs,67990
8
8
  tinybird/git_settings.py,sha256=Sw_8rGmribEFJ4Z_6idrVytxpFYk7ez8ei0qHULzs3E,3934
9
9
  tinybird/prompts.py,sha256=3Yx0atKYf0uE1YKN04HU0h-kJGEHKt0OItPhDgOYGKI,30585
10
10
  tinybird/sql.py,sha256=LBi74GxhNAYTb6m2-KNGpAkguSKh7rcvBbERbE7nalA,46195
@@ -15,19 +15,19 @@ tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
15
15
  tinybird/tornado_template.py,sha256=FL85SMPq2dH4JqKovmSbaolGdEzwOO91NqOzqXo2Qr0,41863
16
16
  tinybird/ch_utils/constants.py,sha256=aYvg2C_WxYWsnqPdZB1ZFoIr8ZY-XjUXYyHKE9Ansj0,3890
17
17
  tinybird/ch_utils/engine.py,sha256=OXkBhlzGjZotjD0vaT-rFIbSGV4tpiHxE8qO_ip0SyQ,40454
18
- tinybird/tb/__cli__.py,sha256=J74jDM5nA1KeHEC9VTPkVN7HFbtSPRviL37Zz3u1ywM,251
18
+ tinybird/tb/__cli__.py,sha256=QktikNnLUbi0rxQxIzziq0Aaqu14iBSAtYvvVy79A8M,251
19
19
  tinybird/tb/cli.py,sha256=FD1pfbzu9YHJHEG6Vtn_EwPLTYhwqw-I6AxXeTaRHU8,926
20
20
  tinybird/tb/modules/auth.py,sha256=EzRWFmwRkXNhUmRaruEVFLdkbUg8xMSix0cAWl5D4Jg,9029
21
21
  tinybird/tb/modules/build.py,sha256=zo7qexonQ5vDNHZ1u7AK_jdo62hMfG5vWnoQBe_2oyw,9042
22
22
  tinybird/tb/modules/cicd.py,sha256=xxXwy-QekJcG14kkJeGNl7LkHduhZXfvBZE8WrU6-t4,5351
23
23
  tinybird/tb/modules/cli.py,sha256=oE1hMCQUxfp1m2r9k6y5LlNgvJCNJhwxfilJbUHp7dY,15914
24
24
  tinybird/tb/modules/common.py,sha256=TWcGJUgzJCQvzI1oMKbNdx-KTRmMGvB25BawHpsaV8Q,70610
25
- tinybird/tb/modules/config.py,sha256=W5Gi5_miSlxCwZFMcqGMAYH47viOrCz11RakBm7DkqI,11090
25
+ tinybird/tb/modules/config.py,sha256=mie3oMVTf5YOUFEiLs88P16U4LkJafJjSpjwyAkFHog,10979
26
26
  tinybird/tb/modules/copy.py,sha256=Aq6wh_wjRiyLQtEOKF9pKLPgJhSvbGTFWIw_LJB0t0U,5801
27
27
  tinybird/tb/modules/create.py,sha256=Q7ZY4oUmEtAYpUbBLjjyiUZ6IKlkU81qJJrmdgjduOk,13914
28
28
  tinybird/tb/modules/datasource.py,sha256=TQ4wSag3CCw34d54FEXPJFGLQNYyNqv2nQbU6QT9uAE,14725
29
29
  tinybird/tb/modules/deployment.py,sha256=E3YdQgFmX7rPlgPUw9yAB0jyl7m1MQcqiQF7uHs8wK4,14272
30
- tinybird/tb/modules/endpoint.py,sha256=9arqN1JQCMb0Nd3-EJ7lukOYkGHHCpQmiiZpp5FqPhc,9432
30
+ tinybird/tb/modules/endpoint.py,sha256=M2ZerljZHLJHvDfH30r4Yma3-JGExg2PlRunb2l4r-A,11931
31
31
  tinybird/tb/modules/exceptions.py,sha256=4A2sSjCEqKUMqpP3WI00zouCWW4uLaghXXLZBSw04mY,3363
32
32
  tinybird/tb/modules/feedback_manager.py,sha256=mrw5tdYycfvg6WLXlM0KIjfJardm_aNpnJkUg2vH0cA,68463
33
33
  tinybird/tb/modules/fmt.py,sha256=poh6_cwVGSf-sBu6LKWuO2TANL_J8Sgm25sPpwxa3Aw,3558
@@ -35,7 +35,7 @@ tinybird/tb/modules/job.py,sha256=956Pj8BEEsiD2GZsV9RKKVM3I_CveOLgS82lykO5ukk,29
35
35
  tinybird/tb/modules/llm.py,sha256=AC0VSphTOM2t-v1_3NLvNN_FIbgMo4dTyMqIv5nniPo,835
36
36
  tinybird/tb/modules/llm_utils.py,sha256=nS9r4FAElJw8yXtmdYrx-rtI2zXR8qXfi1QqUDCfxvg,3469
37
37
  tinybird/tb/modules/local.py,sha256=_PIa-1M-72bv9rhLwqaNthJM1ZhvcjWXFChZAfEPXRs,5658
38
- tinybird/tb/modules/local_common.py,sha256=c6TuS-mAWhYW3x1sW0ZMvOevnNXWU5-26D5q0qBhYSU,2835
38
+ tinybird/tb/modules/local_common.py,sha256=W1fEnB1vBQ4YC5U1PdA0w0g3cTV78bQ5R-lRxdDj5-Y,2868
39
39
  tinybird/tb/modules/login.py,sha256=EGxwVRmMX1Y7ZeCRyA8fqaCWpYYk7NvnZ3x_1g0NlYA,6063
40
40
  tinybird/tb/modules/materialization.py,sha256=HQKRTH6lkcYiDQJihbFqF_in58ezXG4ggZ_7Ywp_nUM,5738
41
41
  tinybird/tb/modules/mock.py,sha256=7v7ccTrjSRcwgVLs_NfOpAxqdY2L16cUJ3mgm4lf11w,5085
@@ -63,19 +63,19 @@ tinybird/tb/modules/datafile/format_common.py,sha256=WaNV4tXrQU5gjV6MJP-5TGqg_Br
63
63
  tinybird/tb/modules/datafile/format_datasource.py,sha256=gpRsGnDEMxEo0pIlEHXKvyuwKIpqJJUCN9JRSiDYs_4,6156
64
64
  tinybird/tb/modules/datafile/format_pipe.py,sha256=58iSTrJ5lg-IsbpX8TQumQTuZ6UIotMsCIkNJd1M-pM,7418
65
65
  tinybird/tb/modules/datafile/parse_datasource.py,sha256=kk35PzesoJOd0LKjYp4kOyCwq4Qo4TiZnoI9qcXjB4k,1519
66
- tinybird/tb/modules/datafile/parse_pipe.py,sha256=N2qZOeq3hyFrSJWQbMN1rKmD71i2xDjT90oCBMJ789M,3337
66
+ tinybird/tb/modules/datafile/parse_pipe.py,sha256=snoy8Ac_Sat7LIXLAKzxjJSl2-TKg9FaZTooxrx6muE,3420
67
67
  tinybird/tb/modules/datafile/pipe_checker.py,sha256=SAXxGyHXB_p7ngQ7M0sUIUmx8yKooCdPXWHk4RzTanE,24665
68
68
  tinybird/tb/modules/datafile/pull.py,sha256=vcjMUbjnZ9XQMGmL33J3ElpbXBTat8Yzp-haeDggZd4,5967
69
69
  tinybird/tb/modules/tinyunit/tinyunit.py,sha256=LZGrsvIAUy5O2bZtGbi9O80QGIfXe_Du8c0PDNxeQcc,11727
70
70
  tinybird/tb/modules/tinyunit/tinyunit_lib.py,sha256=hGh1ZaXC1af7rKnX7222urkj0QJMhMWclqMy59dOqwE,1922
71
71
  tinybird/tb_cli_modules/cicd.py,sha256=0lMkb6CVOFZl5HOwgY8mK4T4mgI7O8335UngLXtCc-c,13851
72
- tinybird/tb_cli_modules/common.py,sha256=SnC_PLCJHwaFaNg7LsUtc1s5jgiD_vkglbva0D3w8RA,78833
72
+ tinybird/tb_cli_modules/common.py,sha256=bnzDXWXHCgdOf8EK3sEmJcIAVm7EmpGgkc4jsqr4tXI,78718
73
73
  tinybird/tb_cli_modules/config.py,sha256=6u6B5QCdiQLbJkCkwtnKGs9H3nP-KXXhC75mF7B-1DQ,11464
74
74
  tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
75
75
  tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
76
76
  tinybird/tb_cli_modules/telemetry.py,sha256=iEGnMuCuNhvF6ln__j6X9MSTwL_0Hm-GgFHHHvhfknk,10466
77
- tinybird-0.0.1.dev61.dist-info/METADATA,sha256=2DnZbQC6aEzXMKMLff8KgszlSLd9r9HhEI3MsNcLczM,2482
78
- tinybird-0.0.1.dev61.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
79
- tinybird-0.0.1.dev61.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
80
- tinybird-0.0.1.dev61.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
81
- tinybird-0.0.1.dev61.dist-info/RECORD,,
77
+ tinybird-0.0.1.dev63.dist-info/METADATA,sha256=geQOxg7QCmumWpO-8_OTWSWhE4XICYuUorRLujiLBQQ,2482
78
+ tinybird-0.0.1.dev63.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
79
+ tinybird-0.0.1.dev63.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
80
+ tinybird-0.0.1.dev63.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
81
+ tinybird-0.0.1.dev63.dist-info/RECORD,,