tinybird 0.0.1.dev22__py3-none-any.whl → 0.0.1.dev24__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.dev22'
8
- __revision__ = 'fad51ec'
7
+ __version__ = '0.0.1.dev24'
8
+ __revision__ = '3de7f2a'
@@ -120,7 +120,7 @@ def build(
120
120
  click.echo(FeedbackManager.success(message=f"\n✓ Build completed in {elapsed_time:.1f}s\n"))
121
121
  ok = True
122
122
  except Exception as e:
123
- click.echo(FeedbackManager.error(message=str(e)))
123
+ click.echo(FeedbackManager.error_exception(error=e))
124
124
  ok = False
125
125
  return ok
126
126
 
@@ -529,6 +529,29 @@ async def check_user_token(ctx: Context, token: str):
529
529
  )
530
530
 
531
531
 
532
+ async def check_user_token_with_client(client: TinyB, token: str):
533
+ try:
534
+ user_client: TinyB = deepcopy(client)
535
+ user_client.token = token
536
+
537
+ is_authenticated = await user_client.check_auth_login()
538
+ except Exception as e:
539
+ raise CLIWorkspaceException(FeedbackManager.error_exception(error=str(e)))
540
+
541
+ if not is_authenticated.get("is_valid", False):
542
+ raise CLIWorkspaceException(
543
+ FeedbackManager.error_exception(
544
+ error='Invalid token. Please, be sure you are using the "user token" instead of the "admin your@email" token.'
545
+ )
546
+ )
547
+ if is_authenticated.get("is_valid") and not is_authenticated.get("is_user", False):
548
+ raise CLIWorkspaceException(
549
+ FeedbackManager.error_exception(
550
+ error='Invalid user authentication. Please, be sure you are using the "user token" instead of the "admin your@email" token.'
551
+ )
552
+ )
553
+
554
+
532
555
  async def get_available_starterkits(ctx: Context) -> List[Dict[str, Any]]:
533
556
  ctx_dict = ctx.ensure_object(dict)
534
557
  available_starterkits = ctx_dict.get("available_starterkits", None)
@@ -321,12 +321,8 @@ class CLIConfig:
321
321
  The data is cached between calls, given the same `working_dir`.
322
322
  """
323
323
  working_dir = working_dir or os.getcwd()
324
- result = CLIConfig._projects.get(working_dir)
325
- if not result:
326
- path: str = os.path.join(working_dir, ".tinyb")
327
- result = CLIConfig(path, parent=CLIConfig.get_global_config())
328
- CLIConfig._projects[working_dir] = result
329
- return result
324
+ path: str = os.path.join(working_dir, ".tinyb")
325
+ return CLIConfig(path, parent=CLIConfig.get_global_config())
330
326
 
331
327
  @staticmethod
332
328
  def get_llm_config(working_dir: Optional[str] = None) -> Dict[str, Any]:
@@ -9,12 +9,13 @@ import requests
9
9
  from tinybird.client import TinyB
10
10
  from tinybird.tb.modules.cicd import init_cicd
11
11
  from tinybird.tb.modules.cli import cli
12
- from tinybird.tb.modules.common import _generate_datafile, check_user_token, coro, generate_datafile
12
+ from tinybird.tb.modules.common import _generate_datafile, check_user_token_with_client, coro, generate_datafile
13
13
  from tinybird.tb.modules.config import CLIConfig
14
14
  from tinybird.tb.modules.datafile.fixture import build_fixture_name, persist_fixture
15
15
  from tinybird.tb.modules.exceptions import CLIException
16
16
  from tinybird.tb.modules.feedback_manager import FeedbackManager
17
17
  from tinybird.tb.modules.llm import LLM
18
+ from tinybird.tb.modules.local_common import get_tinybird_local_client
18
19
 
19
20
 
20
21
  @cli.command()
@@ -37,15 +38,13 @@ from tinybird.tb.modules.llm import LLM
37
38
  )
38
39
  @click.option(
39
40
  "--folder",
40
- default=None,
41
+ default=".",
41
42
  type=click.Path(exists=True, file_okay=False),
42
43
  help="Folder where datafiles will be placed",
43
44
  )
44
45
  @click.option("--rows", type=int, default=10, help="Number of events to send")
45
- @click.pass_context
46
46
  @coro
47
47
  async def create(
48
- ctx: click.Context,
49
48
  demo: bool,
50
49
  data: Optional[str],
51
50
  prompt: Optional[str],
@@ -56,21 +55,24 @@ async def create(
56
55
  folder = folder or getcwd()
57
56
  try:
58
57
  config = CLIConfig.get_project_config(folder)
58
+ tb_client = config.get_client()
59
59
  user_token: Optional[str] = None
60
-
61
60
  if prompt:
62
61
  try:
63
62
  user_token = config.get_user_token()
64
63
  if not user_token:
65
64
  raise CLIException("No user token found")
66
- await check_user_token(ctx, token=user_token)
67
- except Exception:
68
- click.echo(FeedbackManager.error(message="This action requires authentication. Run 'tb login' first."))
65
+ await check_user_token_with_client(tb_client, token=user_token)
66
+ except Exception as e:
67
+ click.echo(
68
+ FeedbackManager.error(
69
+ message=f"This action requires authentication. Run 'tb login' first. Error: {e}"
70
+ )
71
+ )
69
72
  return
70
-
71
- tb_client = config.get_client()
73
+ local_client = await get_tinybird_local_client(folder)
72
74
  click.echo(FeedbackManager.gray(message="Creating new project structure..."))
73
- await project_create(tb_client, user_token, data, prompt, folder)
75
+ await project_create(local_client, tb_client, user_token, data, prompt, folder)
74
76
  click.echo(FeedbackManager.success(message="✓ Scaffolding completed!\n"))
75
77
 
76
78
  click.echo(FeedbackManager.gray(message="\nCreating CI/CD files for GitHub and GitLab..."))
@@ -156,7 +158,7 @@ async def create(
156
158
  has_json_path = "`json:" in datasource_content
157
159
  if has_json_path:
158
160
  sql = await llm.generate_sql_sample_data(schema=datasource_content, rows=rows, prompt=prompt)
159
- result = await tb_client.query(f"{sql} FORMAT JSON")
161
+ result = await local_client.query(f"{sql} FORMAT JSON")
160
162
  data = result.get("data", [])
161
163
  fixture_name = build_fixture_name(
162
164
  datasource_path.absolute().as_posix(), datasource_name, datasource_content
@@ -171,6 +173,7 @@ async def create(
171
173
 
172
174
 
173
175
  async def project_create(
176
+ local_client: TinyB,
174
177
  client: TinyB,
175
178
  user_token: Optional[str],
176
179
  data: Optional[str],
@@ -191,7 +194,7 @@ async def project_create(
191
194
  path = Path(folder) / data
192
195
  format = path.suffix.lstrip(".")
193
196
  try:
194
- await _generate_datafile(str(path), client, format=format, force=force)
197
+ await _generate_datafile(str(path), local_client, format=format, force=force)
195
198
  except Exception as e:
196
199
  click.echo(FeedbackManager.error(message=f"Error: {str(e)}"))
197
200
  name = data.split(".")[0]
@@ -15,7 +15,6 @@ from tinybird.client import TinyB
15
15
  from tinybird.sql import parse_table_structure, schema_to_sql_columns
16
16
  from tinybird.sql_template import get_used_tables_in_template, render_sql_template
17
17
  from tinybird.tb.modules.common import get_ca_pem_content
18
- from tinybird.tb.modules.config import CLIConfig
19
18
  from tinybird.tb.modules.datafile.build_common import update_tags_in_resource
20
19
  from tinybird.tb.modules.datafile.build_datasource import is_datasource, new_ds
21
20
  from tinybird.tb.modules.datafile.build_pipe import (
@@ -45,6 +44,7 @@ from tinybird.tb.modules.datafile.exceptions import AlreadyExistsException, Incl
45
44
  from tinybird.tb.modules.datafile.parse_datasource import parse_datasource
46
45
  from tinybird.tb.modules.datafile.parse_pipe import parse_pipe
47
46
  from tinybird.tb.modules.feedback_manager import FeedbackManager
47
+ from tinybird.tb.modules.local_common import get_tinybird_local_config
48
48
 
49
49
 
50
50
  async def folder_build(
@@ -58,7 +58,7 @@ async def folder_build(
58
58
  local_ws: Optional[Dict[str, Any]] = None,
59
59
  watch: bool = False,
60
60
  ):
61
- config = CLIConfig.get_project_config()
61
+ config = await get_tinybird_local_config(folder)
62
62
  build = True
63
63
  dry_run = False
64
64
  force = True
@@ -624,8 +624,17 @@ def is_endpoint_with_no_dependencies(
624
624
 
625
625
 
626
626
  def is_endpoint(resource: Optional[Dict[str, Any]]) -> bool:
627
- if resource and len(resource.get("tokens", [])) != 0 and resource.get("resource") == "pipes":
627
+ if not resource:
628
+ return False
629
+ if resource.get("resource") != "pipes":
630
+ return False
631
+
632
+ if len(resource.get("tokens", [])) != 0:
628
633
  return True
634
+
635
+ if any(node.get("params", {}).get("type", None) == "endpoint" for node in resource.get("nodes", [])):
636
+ return True
637
+
629
638
  return False
630
639
 
631
640
 
@@ -1664,11 +1664,10 @@ def find_file_by_name(
1664
1664
  if os.path.isfile(os.path.join(folder, pipe)):
1665
1665
  return pipe, None
1666
1666
 
1667
- if os.path.isfile(f / "endpoints" / pipe):
1668
- return pipe, None
1669
-
1670
- if os.path.isfile(f / "pipes" / pipe):
1671
- return pipe, None
1667
+ pipe_paths = ["endpoints", "materializations", "sinks", "copies", "playgrounds", "pipes"]
1668
+ for pipe_path in pipe_paths:
1669
+ if os.path.isfile(f / pipe_path / pipe):
1670
+ return pipe, None
1672
1671
 
1673
1672
  token = name + ".token"
1674
1673
  if os.path.isfile(f / "tokens" / token):
@@ -53,6 +53,10 @@ class LLM:
53
53
 
54
54
  async def create_project(self, prompt: str) -> DataProject:
55
55
  try:
56
+ prompt = (
57
+ prompt
58
+ + "\n#More extra context\n- If you add some array data type remember that the json path should be like this: `json:$.array_field[:]`"
59
+ )
56
60
  response = await self.user_client._req(
57
61
  "/v0/llm/create",
58
62
  method="POST",
@@ -16,7 +16,12 @@ TB_LOCAL_HOST = f"http://localhost:{TB_LOCAL_PORT}"
16
16
 
17
17
  async def get_tinybird_local_client(path: Optional[str] = None) -> TinyB:
18
18
  """Get a Tinybird client connected to the local environment."""
19
- config = CLIConfig.get_project_config()
19
+ config = await get_tinybird_local_config(path)
20
+ return config.get_client(host=TB_LOCAL_HOST)
21
+
22
+
23
+ async def get_tinybird_local_config(path: Optional[str] = None) -> CLIConfig:
24
+ config = CLIConfig.get_project_config(path)
20
25
  try:
21
26
  # ruff: noqa: ASYNC210
22
27
  tokens = requests.get(f"{TB_LOCAL_HOST}/tokens").json()
@@ -52,4 +57,4 @@ async def get_tinybird_local_client(path: Optional[str] = None) -> TinyB:
52
57
  config.set_token_for_host(TB_LOCAL_HOST, default_token)
53
58
 
54
59
  config.set_user_token(user_token)
55
- return config.get_client(host=TB_LOCAL_HOST)
60
+ return config
@@ -5,7 +5,7 @@ from pathlib import Path
5
5
  import click
6
6
 
7
7
  from tinybird.tb.modules.cli import cli
8
- from tinybird.tb.modules.common import CLIException, check_user_token, coro
8
+ from tinybird.tb.modules.common import CLIException, check_user_token_with_client, 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.feedback_manager import FeedbackManager
@@ -55,11 +55,11 @@ async def mock(ctx: click.Context, datasource: str, rows: int, prompt: str, fold
55
55
  try:
56
56
  if not user_token:
57
57
  raise CLIException("No user token found")
58
- await check_user_token(ctx, token=user_token)
58
+ await check_user_token_with_client(user_client, token=user_token)
59
59
  except Exception:
60
60
  click.echo(FeedbackManager.error(message="This action requires authentication. Run 'tb login' first."))
61
61
  return
62
-
62
+ user_client.token = user_token
63
63
  llm = LLM(user_token=user_token, client=user_client)
64
64
  tb_client = await get_tinybird_local_client(os.path.abspath(folder))
65
65
  sql = await llm.generate_sql_sample_data(datasource_content, rows=rows, prompt=prompt)
@@ -223,6 +223,16 @@ async def test_run(name: Tuple[str, ...], folder: str) -> None:
223
223
  except Exception as e:
224
224
  click.echo(FeedbackManager.error(message=f"✗ {test_file_path.name} - {test['name']}"))
225
225
  click.echo(FeedbackManager.error(message=f"Output and expected output are different: \n{e}"))
226
+ return False
227
+ return True
226
228
 
229
+ tests_failed = False
227
230
  for test_file in file_list:
228
- await run_test(test_file)
231
+ if not await run_test(test_file):
232
+ tests_failed = True
233
+
234
+ if tests_failed:
235
+ click.echo(FeedbackManager.error(message="✗ Some tests failed"))
236
+ exit(1)
237
+ else:
238
+ click.echo(FeedbackManager.success(message="✓ All tests passed"))
@@ -1,9 +1,10 @@
1
1
  import asyncio
2
+ import os
2
3
  import time
3
- from typing import Any, Callable, List
4
+ from typing import Any, Callable, List, Optional, Union
4
5
 
5
6
  import click
6
- from watchdog.events import FileSystemEventHandler
7
+ from watchdog.events import DirMovedEvent, FileMovedEvent, FileSystemEventHandler
7
8
  from watchdog.observers import Observer
8
9
 
9
10
  from tinybird.tb.modules.feedback_manager import FeedbackManager
@@ -12,21 +13,60 @@ from tinybird.tb.modules.shell import Shell
12
13
 
13
14
  class FileChangeHandler(FileSystemEventHandler):
14
15
  def __init__(self, filenames: List[str], process: Callable[[List[str]], None], build_ok: bool):
15
- self.filenames = filenames
16
+ self.unprocessed_filenames = [os.path.abspath(f) for f in filenames]
16
17
  self.process = process
17
18
  self.build_ok = build_ok
18
19
 
20
+ @property
21
+ def filenames(self) -> List[str]:
22
+ return [f for f in self.unprocessed_filenames if os.path.exists(f)]
23
+
24
+ def should_process(self, event: Any) -> Optional[str]:
25
+ if event.is_directory:
26
+ return False
27
+
28
+ def should_process_path(path: str) -> bool:
29
+ if not os.path.exists(path):
30
+ return False
31
+ is_vendor = "vendor/" in path
32
+ if is_vendor:
33
+ return False
34
+ return any(path.endswith(ext) for ext in [".datasource", ".pipe", ".ndjson"])
35
+
36
+ if should_process_path(event.src_path):
37
+ return event.src_path
38
+
39
+ if should_process_path(event.dest_path):
40
+ return event.dest_path
41
+
42
+ return None
43
+
19
44
  def on_modified(self, event: Any) -> None:
20
- is_not_vendor = "vendor/" not in event.src_path
21
- if (
22
- is_not_vendor
23
- and not event.is_directory
24
- and any(event.src_path.endswith(ext) for ext in [".datasource", ".pipe", ".ndjson"])
25
- ):
26
- filename = event.src_path.split("/")[-1]
45
+ if path := self.should_process(event):
46
+ filename = path.split("/")[-1]
27
47
  click.echo(FeedbackManager.highlight(message=f"\n\n⟲ Changes detected in {filename}\n"))
28
48
  try:
29
- to_process = [event.src_path] if self.build_ok else self.filenames
49
+ to_process = [path] if self.build_ok else self.filenames
50
+ self.process(to_process)
51
+ self.build_ok = True
52
+ except Exception as e:
53
+ click.echo(FeedbackManager.error_exception(error=e))
54
+
55
+ def on_moved(self, event: Union[DirMovedEvent, FileMovedEvent]) -> None:
56
+ if path := self.should_process(event):
57
+ is_new_file = False
58
+ if path not in self.unprocessed_filenames:
59
+ is_new_file = True
60
+ self.unprocessed_filenames.append(path)
61
+
62
+ filename = path.split("/")[-1]
63
+ if is_new_file:
64
+ click.echo(FeedbackManager.highlight(message=f"\n\n⟲ New file detected: {filename}\n"))
65
+ else:
66
+ click.echo(FeedbackManager.highlight(message=f"\n\n⟲ Changes detected in {filename}\n"))
67
+ try:
68
+ should_rebuild_all = is_new_file or not self.build_ok
69
+ to_process = self.filenames if should_rebuild_all else [path]
30
70
  self.process(to_process)
31
71
  self.build_ok = True
32
72
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird
3
- Version: 0.0.1.dev22
3
+ Version: 0.0.1.dev24
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli/introduction.html
6
6
  Author: Tinybird
@@ -15,42 +15,42 @@ tinybird/syncasync.py,sha256=fAvq0qkRgqXqXMKwbY2iJNYqLT_r6mDsh1MRpGKrdRU,27763
15
15
  tinybird/tornado_template.py,sha256=o2HguxrL1Evnt8o3IvrsI8Zm6JtRQ3zhLJKf1XyR3SQ,41965
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=X2PDOP_pElDefrfQdab_-Df296RDkCK0nKLzdihDVJk,251
18
+ tinybird/tb/__cli__.py,sha256=1fysm8mkLcvnBe_6GnnZ0KRMztaWMMR2cLtUdB6ZtiE,251
19
19
  tinybird/tb/cli.py,sha256=onCxcKvTV4RuokC5V3t82OXWAIwgU6pMWs8rpWOUi_o,815
20
20
  tinybird/tb/modules/auth.py,sha256=EzRWFmwRkXNhUmRaruEVFLdkbUg8xMSix0cAWl5D4Jg,9029
21
- tinybird/tb/modules/build.py,sha256=qJsmJCphanQitSnv86dqeoThM7mOg9Yg9JJLQjQ56ws,7074
21
+ tinybird/tb/modules/build.py,sha256=XQHivOYRoMYJJ2VeiGsGueuUtCwFF4OR54rZikvGshY,7077
22
22
  tinybird/tb/modules/cicd.py,sha256=SjCyvvy0WUnsjFs2biwwXvcf0Ddpmghhd8-SnMyfsRM,5355
23
23
  tinybird/tb/modules/cli.py,sha256=rHfc93DFFSQfWrAX-JBFrcZF43ttk7lYtYTBTn9TdMU,20004
24
- tinybird/tb/modules/common.py,sha256=shaF6GIl2L9e3Rm8aFsIIollSNSBsb2ozBklpnsmRTc,70560
25
- tinybird/tb/modules/config.py,sha256=ri4Gwyzqol6-NofTjHnWquuDzJOjHbkaAnboO8JNENY,11499
24
+ tinybird/tb/modules/common.py,sha256=h6s77ICywJqOXEaTrUEhIyIZTtt3Vy-WUbVqzOsrUv0,71514
25
+ tinybird/tb/modules/config.py,sha256=N8hW7R1JnsdusSlqxHbpq1eCRd5SxasIAQLIgPobqac,11336
26
26
  tinybird/tb/modules/connection.py,sha256=FhDM-OAnLN2epbO2YonpjJQhHqBjyuanBsZmKlDXrqg,28679
27
- tinybird/tb/modules/create.py,sha256=kHmHoPIXh7V1opRzKKDm0q4UbZ6rz9tJwWMsUroA3I8,10371
27
+ tinybird/tb/modules/create.py,sha256=ykiacZ0e-ZdHhj27a_Fc1lemyO8b8wQjwlkSJ1gGC70,10637
28
28
  tinybird/tb/modules/datasource.py,sha256=3ySFOTXVnuqwQQNJBYhD8Sq41S2BJO2ymZRsFmEvHqY,32899
29
29
  tinybird/tb/modules/exceptions.py,sha256=4A2sSjCEqKUMqpP3WI00zouCWW4uLaghXXLZBSw04mY,3363
30
30
  tinybird/tb/modules/feedback_manager.py,sha256=a76KSrIdtNT5cs56jMYUfpqoXMwEPq_SErRGlX0i4hc,68384
31
31
  tinybird/tb/modules/fmt.py,sha256=poh6_cwVGSf-sBu6LKWuO2TANL_J8Sgm25sPpwxa3Aw,3558
32
32
  tinybird/tb/modules/job.py,sha256=956Pj8BEEsiD2GZsV9RKKVM3I_CveOLgS82lykO5ukk,2963
33
- tinybird/tb/modules/llm.py,sha256=9oJzI213eFv68Ttcfl3XNgEetaxfr6m56s2-IyBhNZ8,2713
33
+ tinybird/tb/modules/llm.py,sha256=Rx3QHl9D8kp8MnUM2CFQtxWfaLPiIczVJX1iSRyjyBw,2923
34
34
  tinybird/tb/modules/local.py,sha256=n8L1tH0LlCwGEM7K_1jHeCRdqjtW9BbpCIibI4IgeaM,5253
35
- tinybird/tb/modules/local_common.py,sha256=oemeKBCdEkNHXuGv1p6I9vhjkSXvqDsV5kT-rPN3mvk,2145
35
+ tinybird/tb/modules/local_common.py,sha256=fRHJrEix19lAOE4EpzRhWBJH8FUk7hCCvynP0Icf7Ww,2298
36
36
  tinybird/tb/modules/login.py,sha256=KYGpM35fsjIVkp04Xm1kHvlEOXysRSvLfBUNTxNx26A,6044
37
- tinybird/tb/modules/mock.py,sha256=BbDe60Qdlxg5-WewxFYRPETNBExj1qqBn5Ngz5T8G2Q,3231
37
+ tinybird/tb/modules/mock.py,sha256=XBD3PGRY_eKXZxw3_OXK6LizM_V_Ov38vppxhCfk7o4,3301
38
38
  tinybird/tb/modules/pipe.py,sha256=eYmMBiSj1Ur_hXUs74YZ9mCSAyiICDmkuKuTemlxPUY,27018
39
39
  tinybird/tb/modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
40
40
  tinybird/tb/modules/shell.py,sha256=OfFQ4lx3v_XSTr5cm_mTDG6CLc3zFdikM2pOamifG84,13469
41
41
  tinybird/tb/modules/table.py,sha256=4XrtjM-N0zfNtxVkbvLDQQazno1EPXnxTyo7llivfXk,11035
42
42
  tinybird/tb/modules/tag.py,sha256=anPmMUBc-TbFovlpFi8GPkKA18y7Y0GczMsMms5TZsU,3502
43
43
  tinybird/tb/modules/telemetry.py,sha256=iEGnMuCuNhvF6ln__j6X9MSTwL_0Hm-GgFHHHvhfknk,10466
44
- tinybird/tb/modules/test.py,sha256=loB9lNbtHuHcF9TwBJJLEkSyQakxnyUTHmCFYVsMnDA,8833
44
+ tinybird/tb/modules/test.py,sha256=RSqN4LRlvR89SKolo5hatdiw7nUojIaY67YzomAXGQ0,9146
45
45
  tinybird/tb/modules/token.py,sha256=AePr-QMv_vtWwZDWQ92Zp0kPrCjze61i4npiPhoLMZg,12717
46
- tinybird/tb/modules/watch.py,sha256=xCIUvqTgeb2s63CYw26czgUGV3zzJpdmuyHGH2TLp1E,2349
46
+ tinybird/tb/modules/watch.py,sha256=fHRMm3iqHdK-wQNSwWxroJjD7fbWuEbz8NLOqBdtN1Y,3931
47
47
  tinybird/tb/modules/workspace.py,sha256=6icAgnTvfL3d1kx4L1Z1cGXCD_2Yx0fNRjbZHNxRbYc,10927
48
48
  tinybird/tb/modules/workspace_members.py,sha256=Ai6iCOzXX1zQ8q9iXIFSFHsBJlT-8Q28DaG5Ie-UweY,8726
49
- tinybird/tb/modules/datafile/build.py,sha256=i8UTYzB1_vWOJrmule_655FLEBj6sZzyiffQg-HsPJ4,56459
49
+ tinybird/tb/modules/datafile/build.py,sha256=-hw5iP7uMVi_lLQ51ihO-UooJKZ_fRzwKEbGuXRpEZk,56490
50
50
  tinybird/tb/modules/datafile/build_common.py,sha256=IXl-Z51zUi1dypV7meNenX0iu2UmowNeqgG6WHyMHlk,4562
51
51
  tinybird/tb/modules/datafile/build_datasource.py,sha256=4aP8_DYCRGghXntZSeWDNJxjps1QRVa7WHoYCzQwQts,17355
52
- tinybird/tb/modules/datafile/build_pipe.py,sha256=iu6_1eNEI5f2wm7AfDhLyMCwsqBtrAwkP_1yL4XTHOs,27659
53
- tinybird/tb/modules/datafile/common.py,sha256=yt1C_4ZtWokAyUtR2qYZ6tBCtH7EJFMbehpJ6FeHHZE,75652
52
+ tinybird/tb/modules/datafile/build_pipe.py,sha256=n6jjfBaDl014-jxM5gI9XjUb0XCmgEVoAoAuy_Br8nw,27842
53
+ tinybird/tb/modules/datafile/common.py,sha256=qHxMGEaTcbxhPylq5FHWjonNt_JH5gZbdyCRiZ2FZjI,75715
54
54
  tinybird/tb/modules/datafile/diff.py,sha256=-0J7PsBO64T7LOZSkZ4ZFHHCPvT7cKItnJkbz2PkndU,6754
55
55
  tinybird/tb/modules/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
56
56
  tinybird/tb/modules/datafile/fixture.py,sha256=Oc4eA1Pgwl3prEgEmsH2Ip8XXQ7dG6lyqOjMCUN852M,1779
@@ -69,8 +69,8 @@ tinybird/tb_cli_modules/config.py,sha256=6NTgIdwf0X132A1j6G_YrdPep87ymZ9b5pABabK
69
69
  tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
70
70
  tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
71
71
  tinybird/tb_cli_modules/telemetry.py,sha256=iEGnMuCuNhvF6ln__j6X9MSTwL_0Hm-GgFHHHvhfknk,10466
72
- tinybird-0.0.1.dev22.dist-info/METADATA,sha256=tjKF0zgTPtEhfgPlmDM3dJcqpe5R8j55aoeXgjZfxNM,2446
73
- tinybird-0.0.1.dev22.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
74
- tinybird-0.0.1.dev22.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
75
- tinybird-0.0.1.dev22.dist-info/top_level.txt,sha256=pgw6AzERHBcW3YTi2PW4arjxLkulk2msOz_SomfOEuc,45
76
- tinybird-0.0.1.dev22.dist-info/RECORD,,
72
+ tinybird-0.0.1.dev24.dist-info/METADATA,sha256=jhgjC0xVQkjru503B-AssrXKlGmBuWrBBxs1oABVzaY,2446
73
+ tinybird-0.0.1.dev24.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
74
+ tinybird-0.0.1.dev24.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
75
+ tinybird-0.0.1.dev24.dist-info/top_level.txt,sha256=pgw6AzERHBcW3YTi2PW4arjxLkulk2msOz_SomfOEuc,45
76
+ tinybird-0.0.1.dev24.dist-info/RECORD,,