tinybird 0.0.1.dev69__py3-none-any.whl → 0.0.1.dev70__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/cli/introduction.html'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '0.0.1.dev69'
8
- __revision__ = 'f90d907'
7
+ __version__ = '0.0.1.dev70'
8
+ __revision__ = 'f8064d4'
@@ -15,7 +15,7 @@ from tinybird.client import TinyB
15
15
  from tinybird.tb.modules.cli import cli
16
16
  from tinybird.tb.modules.common import push_data
17
17
  from tinybird.tb.modules.datafile.build import folder_build
18
- from tinybird.tb.modules.datafile.fixture import get_fixture_dir
18
+ from tinybird.tb.modules.datafile.fixture import get_fixture_dir, persist_fixture
19
19
  from tinybird.tb.modules.feedback_manager import FeedbackManager
20
20
  from tinybird.tb.modules.project import Project
21
21
  from tinybird.tb.modules.shell import Shell, print_table_formatted
@@ -210,6 +210,8 @@ def process(
210
210
  build_failed = False
211
211
  if file_changed and file_changed.endswith(".ndjson"):
212
212
  rebuild_fixture(project, tb_client, file_changed)
213
+ elif file_changed and file_changed.endswith(".sql"):
214
+ rebuild_fixture_sql(project, tb_client, file_changed)
213
215
  else:
214
216
  try:
215
217
  build_project(project, tb_client, file_changed)
@@ -247,3 +249,12 @@ def run_watch(
247
249
  )
248
250
  watcher_thread.start()
249
251
  shell.run()
252
+
253
+
254
+ def rebuild_fixture_sql(project: Project, tb_client: TinyB, sql_file: str) -> None:
255
+ sql_path = Path(sql_file)
256
+ datasource_name = sql_path.stem
257
+ sql = sql_path.read_text()
258
+ result = asyncio.run(tb_client.query(f"{sql} FORMAT JSON"))
259
+ data = result.get("data", [])
260
+ persist_fixture(datasource_name, data, project.folder)
@@ -127,6 +127,7 @@ async def cli(
127
127
  ctx.ensure_object(dict)["client"] = client
128
128
 
129
129
  ctx.ensure_object(dict)["project"] = project
130
+ ctx.ensure_object(dict)["env"] = get_target_env(cloud, build)
130
131
 
131
132
 
132
133
  @cli.command(hidden=True)
@@ -393,7 +394,7 @@ async def create_ctx_client(ctx: Context, config: Dict[str, Any], cloud: bool, b
393
394
 
394
395
  commands_always_cloud = ["pull"]
395
396
  commands_always_build = ["build", "test", "dev"]
396
- commands_always_local = ["create", "mock"]
397
+ commands_always_local = ["create"]
397
398
  if (
398
399
  (cloud or command in commands_always_cloud)
399
400
  and command not in commands_always_build
@@ -407,3 +408,11 @@ async def create_ctx_client(ctx: Context, config: Dict[str, Any], cloud: bool, b
407
408
  if not build and command not in commands_always_local and command not in commands_always_build:
408
409
  click.echo(FeedbackManager.gray(message="Running against Tinybird Local\n"))
409
410
  return await get_tinybird_local_client(config, build=build)
411
+
412
+
413
+ def get_target_env(cloud: bool, build: bool) -> str:
414
+ if cloud:
415
+ return "cloud"
416
+ if build:
417
+ return "build"
418
+ return "local"
@@ -8,6 +8,13 @@ def get_fixture_dir(folder: str) -> Path:
8
8
  return Path(folder) / "fixtures"
9
9
 
10
10
 
11
+ def persist_fixture_sql(fixture_name: str, sql: str, folder: str) -> Path:
12
+ fixture_dir = get_fixture_dir(folder)
13
+ fixture_file = fixture_dir / f"{fixture_name}.sql"
14
+ fixture_file.write_text(sql)
15
+ return fixture_file
16
+
17
+
11
18
  def persist_fixture(fixture_name: str, data: Union[List[Dict[str, Any]], str], folder: str, format="ndjson") -> Path:
12
19
  fixture_dir = get_fixture_dir(folder)
13
20
  fixture_file = fixture_dir / f"{fixture_name}.{format}"
@@ -5,6 +5,7 @@
5
5
 
6
6
  import asyncio
7
7
  import json
8
+ import os
8
9
  import re
9
10
  from typing import Optional
10
11
 
@@ -23,8 +24,10 @@ from tinybird.tb.modules.common import (
23
24
  push_data,
24
25
  )
25
26
  from tinybird.tb.modules.datafile.common import get_name_version
27
+ from tinybird.tb.modules.datafile.fixture import persist_fixture
26
28
  from tinybird.tb.modules.exceptions import CLIDatasourceException
27
29
  from tinybird.tb.modules.feedback_manager import FeedbackManager
30
+ from tinybird.tb.modules.project import Project
28
31
 
29
32
 
30
33
  @cli.group()
@@ -391,3 +394,63 @@ async def datasource_data(ctx: Context, datasource: str, limit: int):
391
394
  echo_safe_humanfriendly_tables_format_smart_table(
392
395
  data=[d.values() for d in res["data"]], column_names=res["data"][0].keys()
393
396
  )
397
+
398
+
399
+ @datasource.command(name="export")
400
+ @click.argument("datasource")
401
+ @click.option(
402
+ "--format",
403
+ "format_",
404
+ type=click.Choice(["csv", "ndjson"], case_sensitive=False),
405
+ default="ndjson",
406
+ help="Output format (csv or ndjson)",
407
+ )
408
+ @click.option("--rows", type=int, default=100, help="Number of rows to export (default: 100)")
409
+ @click.option("--where", type=str, default=None, help="Condition to filter data")
410
+ @click.option("--target", type=str, help="Target file path (default: datasource_name.{format})")
411
+ @click.pass_context
412
+ @coro
413
+ async def datasource_export(
414
+ ctx: Context,
415
+ datasource: str,
416
+ format_: str,
417
+ rows: int,
418
+ where: Optional[str],
419
+ target: Optional[str],
420
+ ):
421
+ """Export data from a datasource to a file in CSV or NDJSON format
422
+
423
+ Example usage:
424
+ - Export all rows as CSV: tb datasource export my_datasource
425
+ - Export 1000 rows as NDJSON: tb datasource export my_datasource --format ndjson --rows 1000
426
+ - Export to specific file: tb datasource export my_datasource --output ./data/export.csv
427
+ """
428
+ client: TinyB = ctx.ensure_object(dict)["client"]
429
+ project: Project = ctx.ensure_object(dict)["project"]
430
+
431
+ # Determine output filename if not provided
432
+ if not target:
433
+ target = f"{datasource}.{format_}"
434
+
435
+ # Build query with optional row limit
436
+ query = f"SELECT * FROM {datasource} WHERE {where or 1} LIMIT {rows}"
437
+
438
+ click.echo(FeedbackManager.highlight(message=f"\n» Exporting {datasource} to {target}"))
439
+
440
+ try:
441
+ if format_ == "csv":
442
+ query += " FORMAT CSVWithNames"
443
+ else:
444
+ query += " FORMAT JSONEachRow"
445
+
446
+ res = await client.query(query)
447
+
448
+ fixture_path = persist_fixture(datasource, res, project.folder)
449
+ file_size = os.path.getsize(fixture_path)
450
+
451
+ click.echo(
452
+ FeedbackManager.success(message=f"✓ Exported data to {target} ({humanfriendly.format_size(file_size)})")
453
+ )
454
+
455
+ except Exception as e:
456
+ raise CLIDatasourceException(FeedbackManager.error(message=str(e)))
@@ -266,13 +266,13 @@ def deployment_rollback(ctx: click.Context, wait: bool) -> None:
266
266
  @click.option(
267
267
  "--wait/--no-wait",
268
268
  is_flag=True,
269
- default=False,
269
+ default=True,
270
270
  help="Wait for deploy to finish. Disabled by default.",
271
271
  )
272
272
  @click.option(
273
273
  "--auto/--no-auto",
274
274
  is_flag=True,
275
- default=False,
275
+ default=True,
276
276
  help="Auto-promote the deployment. Only works if --wait is enabled. Disabled by default.",
277
277
  )
278
278
  @click.option(
@@ -311,6 +311,7 @@ def create_deployment(
311
311
  }
312
312
  project: Project = ctx.ensure_object(dict)["project"]
313
313
  client = ctx.ensure_object(dict)["client"]
314
+ config = ctx.ensure_object(dict)["config"]
314
315
  TINYBIRD_API_URL = f"{client.host}/v1/deploy"
315
316
  TINYBIRD_API_KEY = client.token
316
317
 
@@ -357,8 +358,21 @@ def create_deployment(
357
358
  deploy_result = result.get("result")
358
359
  if deploy_result == "success":
359
360
  print_changes(result, project)
360
- click.echo(FeedbackManager.success(message="Deployment submitted successfully"))
361
- deployment = result.get("deployment")
361
+ deployment = result.get("deployment", {})
362
+ # We show the url in the case of region is public
363
+ if client.host == "https://api.europe-west2.gcp.tinybird.co":
364
+ click.echo(
365
+ FeedbackManager.gray(message="Deployment URL: ")
366
+ + FeedbackManager.info(
367
+ message=f"https://cloud.tinybird.co/gcp/europe-west2/{config.get('name')}/deployments/{deployment.get('id')}"
368
+ )
369
+ )
370
+
371
+ if wait:
372
+ click.echo(FeedbackManager.info(message="\n✓ Deployment submitted successfully"))
373
+ else:
374
+ click.echo(FeedbackManager.success(message="\n✓ Deployment submitted successfully"))
375
+
362
376
  feedback = deployment.get("feedback", [])
363
377
  for f in feedback:
364
378
  click.echo(
@@ -1,6 +1,4 @@
1
1
  import glob
2
- import logging
3
- import os
4
2
  from pathlib import Path
5
3
 
6
4
  import click
@@ -8,9 +6,9 @@ import click
8
6
  from tinybird.client import TinyB
9
7
  from tinybird.prompts import mock_prompt
10
8
  from tinybird.tb.modules.cli import cli
11
- from tinybird.tb.modules.common import CLIException, check_user_token_with_client, coro
9
+ from tinybird.tb.modules.common import CLIException, check_user_token_with_client, coro, push_data
12
10
  from tinybird.tb.modules.config import CLIConfig
13
- from tinybird.tb.modules.datafile.fixture import persist_fixture
11
+ from tinybird.tb.modules.datafile.fixture import persist_fixture, persist_fixture_sql
14
12
  from tinybird.tb.modules.feedback_manager import FeedbackManager
15
13
  from tinybird.tb.modules.llm import LLM
16
14
  from tinybird.tb.modules.llm_utils import extract_xml
@@ -41,11 +39,11 @@ async def mock(ctx: click.Context, datasource: str, rows: int, prompt: str) -> N
41
39
  try:
42
40
  tb_client: TinyB = ctx.ensure_object(dict)["client"]
43
41
  project: Project = ctx.ensure_object(dict)["project"]
42
+ env = ctx.ensure_object(dict)["env"]
44
43
  datasource_path = Path(datasource)
45
44
  datasource_name = datasource
46
45
  folder = project.folder
47
46
  click.echo(FeedbackManager.highlight(message=f"\n» Creating fixture for {datasource_name}..."))
48
-
49
47
  if datasource_path.suffix == ".datasource":
50
48
  datasource_name = datasource_path.stem
51
49
  else:
@@ -56,14 +54,6 @@ async def mock(ctx: click.Context, datasource: str, rows: int, prompt: str) -> N
56
54
  if not datasource_path.exists():
57
55
  raise CLIException(f"Datasource '{datasource_path.stem}' not found")
58
56
 
59
- prompt_path = Path(folder) / "fixtures" / f"{datasource_name}.prompt"
60
- if not prompt or prompt == "Use the datasource schema to generate sample data":
61
- # load the prompt from the fixture.prompt file if it exists
62
- if prompt_path.exists():
63
- prompt = prompt_path.read_text()
64
- else:
65
- prompt_path.write_text(prompt)
66
-
67
57
  datasource_content = datasource_path.read_text()
68
58
  config = CLIConfig.get_project_config()
69
59
  user_client = config.get_client()
@@ -76,21 +66,39 @@ async def mock(ctx: click.Context, datasource: str, rows: int, prompt: str) -> N
76
66
  except Exception:
77
67
  click.echo(FeedbackManager.error(message="This action requires authentication. Run 'tb login' first."))
78
68
  return
69
+
79
70
  llm = LLM(user_token=user_token, host=user_client.host)
80
71
  prompt = f"<datasource_schema>{datasource_content}</datasource_schema>\n<user_input>{prompt}</user_input>"
81
72
  sql = ""
82
-
83
73
  response = llm.ask(system_prompt=mock_prompt(rows), prompt=prompt)
84
74
  sql = extract_xml(response, "sql")
85
75
  result = await tb_client.query(f"{sql} FORMAT JSON")
86
76
  data = result.get("data", [])[:rows]
87
- persist_fixture(datasource_name, data, folder)
88
- click.echo(FeedbackManager.info(message=f"✓ /fixtures/{datasource_name}.ndjson created"))
77
+ if env == "build":
78
+ persist_fixture_sql(datasource_name, sql, folder)
79
+
80
+ fixture_path = persist_fixture(datasource_name, data, folder)
89
81
 
90
- if os.environ.get("TB_DEBUG", "") != "":
91
- logging.debug(sql)
82
+ click.echo(FeedbackManager.info(message=f" /fixtures/{datasource_name}.ndjson created"))
83
+ if env == "cloud":
84
+ await append_fixture(tb_client, datasource_name, str(fixture_path))
92
85
 
93
86
  click.echo(FeedbackManager.success(message=f"✓ Sample data for {datasource_name} created with {rows} rows"))
94
87
 
95
88
  except Exception as e:
96
89
  click.echo(FeedbackManager.error_exception(error=f"Error: {e}"))
90
+
91
+
92
+ async def append_fixture(
93
+ tb_client: TinyB,
94
+ datasource_name: str,
95
+ url: str,
96
+ ):
97
+ await push_data(
98
+ tb_client,
99
+ datasource_name,
100
+ url,
101
+ mode="append",
102
+ concurrency=1,
103
+ silent=True,
104
+ )
@@ -29,7 +29,7 @@ class WatchProjectHandler(FileSystemEventHandler):
29
29
  if event.is_directory:
30
30
  return None
31
31
 
32
- valid_extensions = [".datasource", ".pipe", ".ndjson"]
32
+ valid_extensions = [".datasource", ".pipe", ".ndjson", ".sql"]
33
33
 
34
34
  if not any(event.src_path.endswith(ext) for ext in valid_extensions):
35
35
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev69
3
+ Version: 0.0.1.dev70
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli/introduction.html
6
6
  Author: Tinybird
@@ -15,18 +15,18 @@ tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
15
15
  tinybird/tornado_template.py,sha256=fUKIFrZLe0WyMFmV-mkjIdCSeFcZMBL3Uet4eHcids0,41960
16
16
  tinybird/ch_utils/constants.py,sha256=aYvg2C_WxYWsnqPdZB1ZFoIr8ZY-XjUXYyHKE9Ansj0,3890
17
17
  tinybird/ch_utils/engine.py,sha256=AUAww-KjGOZg9h0IBlKA3FeacJYB4rOtqcTGJhFM-g8,40392
18
- tinybird/tb/__cli__.py,sha256=oDKDPPvR2NMgaawv4tiYkQ17clB9vn1VDY4J4rqpHxI,251
18
+ tinybird/tb/__cli__.py,sha256=53NC2V-YpRXEwQyuGwM0-hJrMfoKVMQVHdHn44o-QYI,251
19
19
  tinybird/tb/cli.py,sha256=FD1pfbzu9YHJHEG6Vtn_EwPLTYhwqw-I6AxXeTaRHU8,926
20
20
  tinybird/tb/modules/auth.py,sha256=vBA-KsrjAp77kFunGSM-4o7AFdfO7ac4dnrHKrx0alI,9020
21
- tinybird/tb/modules/build.py,sha256=UN1d7EZ93VOlPCrtsay-KLgZnzxn2NCBDY3wvrUSP1Q,9198
21
+ tinybird/tb/modules/build.py,sha256=GIXpIAHxulB-PgJ2jeZnwIXPbL7anp3rPi5a6DxfWuQ,9674
22
22
  tinybird/tb/modules/cicd.py,sha256=xxXwy-QekJcG14kkJeGNl7LkHduhZXfvBZE8WrU6-t4,5351
23
- tinybird/tb/modules/cli.py,sha256=AvqH7x3wiLShaXWxIsMRidPCmJs03ZYwuFzQZz-nMyU,15919
23
+ tinybird/tb/modules/cli.py,sha256=MJ4N0BUW6yhlo3zGf_N_qqBQWPyCD-aMrkI7u7azHW4,16125
24
24
  tinybird/tb/modules/common.py,sha256=XZY0nWkK68vgh2Vml5JzyQuEWIyf2igq7IrAu0n94Lo,73203
25
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=I01JDENOyGKK0Umd2_1Om_nFGP8Uk9vxaOw7PygK02o,12302
28
- tinybird/tb/modules/datasource.py,sha256=9NxmicauGwLwfcKAe3Vyiu5JHmYDl6iYmBJweu4Hl2s,14735
29
- tinybird/tb/modules/deployment.py,sha256=Xtaty4vPoSFk189cuupei3h3ze1FpPvi_dA7koPvjoI,16222
28
+ tinybird/tb/modules/datasource.py,sha256=aOvjTVH9EdGNAw_lqhtZdJQhYnMOTGIqD3Pe4GtakFw,16905
29
+ tinybird/tb/modules/deployment.py,sha256=qGkFwPR1TGtcbqUcKkhsfzK--sNzXo6JV8Ny8HrlSfo,16873
30
30
  tinybird/tb/modules/endpoint.py,sha256=zQJgJXTzMB3hPO-3Xnppi0Pv8byZunBNhbbmMgKtijE,11915
31
31
  tinybird/tb/modules/exceptions.py,sha256=4A2sSjCEqKUMqpP3WI00zouCWW4uLaghXXLZBSw04mY,3363
32
32
  tinybird/tb/modules/feedback_manager.py,sha256=mrw5tdYycfvg6WLXlM0KIjfJardm_aNpnJkUg2vH0cA,68463
@@ -38,7 +38,7 @@ tinybird/tb/modules/local.py,sha256=_PIa-1M-72bv9rhLwqaNthJM1ZhvcjWXFChZAfEPXRs,
38
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=dESybok66Fn7XLzQQr-fBCDNf5xQL8wkRiD2QBr5lOg,5748
41
- tinybird/tb/modules/mock.py,sha256=DVZjPv9p8k5fntHcLHnIsWS7KBa1jF02BYA_Ey4XWf4,3824
41
+ tinybird/tb/modules/mock.py,sha256=7alBqLfQLb7JSZJth9JDXGUOvABWXr8Gx23edgyrW8w,3869
42
42
  tinybird/tb/modules/pipe.py,sha256=PbCM31q9lVB9xPWvPBhlpW53MGFGvzVv81trxC06kDY,2428
43
43
  tinybird/tb/modules/project.py,sha256=QdOG65Hcc6r_eQ938CfZeIXyp38RkiTYNPupgqy2gP0,2948
44
44
  tinybird/tb/modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
@@ -48,7 +48,7 @@ tinybird/tb/modules/tag.py,sha256=anPmMUBc-TbFovlpFi8GPkKA18y7Y0GczMsMms5TZsU,35
48
48
  tinybird/tb/modules/telemetry.py,sha256=iEGnMuCuNhvF6ln__j6X9MSTwL_0Hm-GgFHHHvhfknk,10466
49
49
  tinybird/tb/modules/test.py,sha256=tY7_FJRSL6EdztypWlvDJi5QpXDLS5dpO0i_dpGuzkI,11528
50
50
  tinybird/tb/modules/token.py,sha256=WEB2xqRgOierJ_S7TrZLEpLpQ9mkXcYLH2-xipjoGDc,12814
51
- tinybird/tb/modules/watch.py,sha256=90FUrSD6cYfOi7GsEHfq_oTI6kap7uc8CbG0t3j_Tus,4953
51
+ tinybird/tb/modules/watch.py,sha256=IIahyfmVNNu_EY2dVKZ_zjdSEFocwsmpvvgki4EmU-w,4961
52
52
  tinybird/tb/modules/workspace.py,sha256=7gOgt10j9emleqQ43BA6jU0CZjJxw7L5gDZhCxGafI4,6400
53
53
  tinybird/tb/modules/workspace_members.py,sha256=Vb5XEaKmkfONyfg2MS5EcpwolMvv7GLwFS5m2EuobT8,8726
54
54
  tinybird/tb/modules/datafile/build.py,sha256=seGFSvmgyRrAM1-icsKBkuog3WccfGUYFTPT-xoA5W8,50940
@@ -58,7 +58,7 @@ tinybird/tb/modules/datafile/build_pipe.py,sha256=Jgv3YKIvMfjPiSIdw1k2mpaoDdAWMi
58
58
  tinybird/tb/modules/datafile/common.py,sha256=1sKkQnyKOaFARQzORncpL6cRVpV9GDOD4oC36daX-Hk,79343
59
59
  tinybird/tb/modules/datafile/diff.py,sha256=-0J7PsBO64T7LOZSkZ4ZFHHCPvT7cKItnJkbz2PkndU,6754
60
60
  tinybird/tb/modules/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
61
- tinybird/tb/modules/datafile/fixture.py,sha256=XQpbppUQ4cow7dMzHs7OZBYBXA2PI5AOCmNdMDClbKo,833
61
+ tinybird/tb/modules/datafile/fixture.py,sha256=si-9LB-LdKQSWDtVW82xDrHtFfko5bgBG1cvjqqrcPU,1064
62
62
  tinybird/tb/modules/datafile/format_common.py,sha256=WaNV4tXrQU5gjV6MJP-5TGqg_Bre6ilNS8emvFl-X3c,1967
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
@@ -74,8 +74,8 @@ tinybird/tb_cli_modules/config.py,sha256=6u6B5QCdiQLbJkCkwtnKGs9H3nP-KXXhC75mF7B
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.dev69.dist-info/METADATA,sha256=Qy1Ob_W4u71B64I99GYQSlFunPcsP6kz7ie9WBl1I5I,2585
78
- tinybird-0.0.1.dev69.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
79
- tinybird-0.0.1.dev69.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
80
- tinybird-0.0.1.dev69.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
81
- tinybird-0.0.1.dev69.dist-info/RECORD,,
77
+ tinybird-0.0.1.dev70.dist-info/METADATA,sha256=5bMC_6zO0z9FVkj9F0oQ7tdexUZnSoPaEpaHG3EtqVs,2585
78
+ tinybird-0.0.1.dev70.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
79
+ tinybird-0.0.1.dev70.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
80
+ tinybird-0.0.1.dev70.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
81
+ tinybird-0.0.1.dev70.dist-info/RECORD,,