tinybird 0.0.1.dev7__py3-none-any.whl → 0.0.1.dev9__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/modules/build.py +21 -3
- tinybird/tb/modules/create.py +14 -2
- tinybird/tb/modules/datafile/build.py +40 -7
- tinybird/tb/modules/datafile/build_datasource.py +11 -1
- tinybird/tb/modules/datafile/common.py +1 -0
- tinybird/tb/modules/local.py +3 -0
- {tinybird-0.0.1.dev7.dist-info → tinybird-0.0.1.dev9.dist-info}/METADATA +1 -1
- {tinybird-0.0.1.dev7.dist-info → tinybird-0.0.1.dev9.dist-info}/RECORD +11 -11
- {tinybird-0.0.1.dev7.dist-info → tinybird-0.0.1.dev9.dist-info}/WHEEL +0 -0
- {tinybird-0.0.1.dev7.dist-info → tinybird-0.0.1.dev9.dist-info}/entry_points.txt +0 -0
- {tinybird-0.0.1.dev7.dist-info → tinybird-0.0.1.dev9.dist-info}/top_level.txt +0 -0
tinybird/tb/modules/build.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import os
|
|
3
3
|
import random
|
|
4
|
+
import subprocess
|
|
5
|
+
import threading
|
|
4
6
|
import time
|
|
5
7
|
from pathlib import Path
|
|
6
8
|
from typing import Any, Awaitable, Callable, List, Union
|
|
@@ -14,6 +16,7 @@ import tinybird.context as context
|
|
|
14
16
|
from tinybird.client import TinyB
|
|
15
17
|
from tinybird.config import FeatureFlags
|
|
16
18
|
from tinybird.feedback_manager import FeedbackManager, bcolors
|
|
19
|
+
from tinybird.syncasync import sync_to_async
|
|
17
20
|
from tinybird.tb.modules.cli import cli
|
|
18
21
|
from tinybird.tb.modules.common import (
|
|
19
22
|
coro,
|
|
@@ -58,7 +61,7 @@ def watch_files(
|
|
|
58
61
|
elapsed_time = time_end - time_start
|
|
59
62
|
click.echo(
|
|
60
63
|
FeedbackManager.success(message="\n✓ ")
|
|
61
|
-
+ FeedbackManager.gray(message=f"Rebuild completed in {elapsed_time:.1f}s")
|
|
64
|
+
+ FeedbackManager.gray(message=f"Rebuild completed in {elapsed_time:.1f}s\n")
|
|
62
65
|
)
|
|
63
66
|
|
|
64
67
|
event_handler = FileChangeHandler(filenames, lambda f: asyncio.run(process_wrapper(f)))
|
|
@@ -161,8 +164,23 @@ async def build(
|
|
|
161
164
|
await build_once(filenames)
|
|
162
165
|
|
|
163
166
|
if watch:
|
|
164
|
-
click.echo(FeedbackManager.highlight(message="◎ Watching for changes
|
|
165
|
-
watch_files(filenames, process)
|
|
167
|
+
click.echo(FeedbackManager.highlight(message="◎ Watching for changes...\n"))
|
|
168
|
+
watcher_thread = threading.Thread(target=watch_files, args=(filenames, process), daemon=True)
|
|
169
|
+
watcher_thread.start()
|
|
170
|
+
|
|
171
|
+
# Main CLI loop
|
|
172
|
+
while True:
|
|
173
|
+
user_input = click.prompt("", prompt_suffix="")
|
|
174
|
+
if user_input.lower() == "exit":
|
|
175
|
+
break
|
|
176
|
+
|
|
177
|
+
if "tb build" in user_input:
|
|
178
|
+
click.echo(FeedbackManager.error(message="Build command is already running"))
|
|
179
|
+
else:
|
|
180
|
+
# Process the user command
|
|
181
|
+
await sync_to_async(subprocess.run, thread_sensitive=True)(user_input, shell=True, text=True)
|
|
182
|
+
|
|
183
|
+
click.echo(FeedbackManager.highlight(message="\n◎ Watching for changes...\n"))
|
|
166
184
|
|
|
167
185
|
|
|
168
186
|
async def build_and_print_pipe(tb_client: TinyB, filename: str):
|
tinybird/tb/modules/create.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import os
|
|
2
3
|
from os import getcwd
|
|
3
4
|
from pathlib import Path
|
|
@@ -39,6 +40,7 @@ from tinybird.tb.modules.local import (
|
|
|
39
40
|
type=click.Path(exists=True, file_okay=False),
|
|
40
41
|
help="Folder where datafiles will be placed",
|
|
41
42
|
)
|
|
43
|
+
@click.option("--rows", type=int, default=100, help="Number of events to send")
|
|
42
44
|
@click.pass_context
|
|
43
45
|
@coro
|
|
44
46
|
async def create(
|
|
@@ -46,9 +48,9 @@ async def create(
|
|
|
46
48
|
data: Optional[str],
|
|
47
49
|
prompt: Optional[str],
|
|
48
50
|
folder: Optional[str],
|
|
51
|
+
rows: int,
|
|
49
52
|
) -> None:
|
|
50
53
|
"""Initialize a new project."""
|
|
51
|
-
click.echo(FeedbackManager.gray(message="Setting up Tinybird Local"))
|
|
52
54
|
folder = folder or getcwd()
|
|
53
55
|
try:
|
|
54
56
|
tb_client = get_tinybird_local_client()
|
|
@@ -72,7 +74,17 @@ async def create(
|
|
|
72
74
|
datasource_content = datasource_path.read_text()
|
|
73
75
|
has_json_path = "`json:" in datasource_content
|
|
74
76
|
if has_json_path:
|
|
75
|
-
await llm.generate_sql_sample_data(tb_client, datasource_name, datasource_content)
|
|
77
|
+
sql = await llm.generate_sql_sample_data(tb_client, datasource_name, datasource_content, rows)
|
|
78
|
+
result = await tb_client.query(f"{sql} FORMAT JSON")
|
|
79
|
+
data = result.get("data", [])
|
|
80
|
+
max_rows_per_request = 100
|
|
81
|
+
sent_rows = 0
|
|
82
|
+
for i in range(0, len(data), max_rows_per_request):
|
|
83
|
+
batch = data[i : i + max_rows_per_request]
|
|
84
|
+
ndjson_data = "\n".join([json.dumps(row) for row in batch])
|
|
85
|
+
await tb_client.datasource_events(datasource_name, ndjson_data)
|
|
86
|
+
sent_rows += len(batch)
|
|
87
|
+
click.echo(f"Sent {sent_rows} rows to datasource '{datasource_name}'")
|
|
76
88
|
click.echo(FeedbackManager.success(message="\n✓ Tinybird Local is ready!"))
|
|
77
89
|
except Exception as e:
|
|
78
90
|
click.echo(FeedbackManager.error(message=f"Error: {str(e)}"))
|
|
@@ -32,6 +32,7 @@ from tinybird.tb.modules.datafile.common import (
|
|
|
32
32
|
INTERNAL_TABLES,
|
|
33
33
|
ON_DEMAND,
|
|
34
34
|
PREVIEW_CONNECTOR_SERVICES,
|
|
35
|
+
TB_LOCAL_WORKSPACE_NAME,
|
|
35
36
|
CopyModes,
|
|
36
37
|
CopyParameters,
|
|
37
38
|
DataFileExtensions,
|
|
@@ -55,6 +56,9 @@ async def folder_build(
|
|
|
55
56
|
ignore_sql_errors: bool = False,
|
|
56
57
|
is_internal: bool = False,
|
|
57
58
|
only_pipes: bool = False,
|
|
59
|
+
is_vendor: bool = False,
|
|
60
|
+
current_ws: Optional[Dict[str, Any]] = None,
|
|
61
|
+
workspaces: Optional[List[Dict[str, Any]]] = None,
|
|
58
62
|
):
|
|
59
63
|
if only_pipes:
|
|
60
64
|
filenames = [f for f in filenames if f.endswith(".pipe")]
|
|
@@ -71,9 +75,8 @@ async def folder_build(
|
|
|
71
75
|
populate_subset = None
|
|
72
76
|
populate_condition = None
|
|
73
77
|
tests_to_run = 0
|
|
74
|
-
user_token = None
|
|
75
78
|
tests_failfast = True
|
|
76
|
-
override_datasource =
|
|
79
|
+
override_datasource = False
|
|
77
80
|
tests_check_requests_from_branch = False
|
|
78
81
|
skip_confirmation = True
|
|
79
82
|
wait = False
|
|
@@ -102,20 +105,44 @@ async def folder_build(
|
|
|
102
105
|
tests_check_requests_from_branch = False
|
|
103
106
|
git_release = False
|
|
104
107
|
workspace_lib_paths = []
|
|
105
|
-
workspaces: List[Dict[str, Any]] = (await tb_client.user_workspaces()).get("workspaces", [])
|
|
106
|
-
current_ws: Dict[str, Any] = next(
|
|
107
|
-
(workspace for workspace in workspaces if config and workspace.get("id", ".") == config.get("id", "..")), {}
|
|
108
|
-
)
|
|
109
108
|
|
|
110
109
|
workspace_lib_paths = list(workspace_lib_paths)
|
|
111
110
|
# include vendor libs without overriding user ones
|
|
112
111
|
existing_workspaces = set(x[1] for x in workspace_lib_paths)
|
|
113
112
|
vendor_path = Path("vendor")
|
|
114
|
-
|
|
113
|
+
user_token = config.get_user_token()
|
|
114
|
+
user_client = deepcopy(tb_client)
|
|
115
|
+
|
|
116
|
+
if user_token:
|
|
117
|
+
user_client.token = user_token
|
|
118
|
+
|
|
119
|
+
vendor_workspaces = []
|
|
120
|
+
user_workspaces = await user_client.user_workspaces()
|
|
121
|
+
if vendor_path.exists() and not is_vendor:
|
|
115
122
|
for x in vendor_path.iterdir():
|
|
116
123
|
if x.is_dir() and x.name not in existing_workspaces:
|
|
124
|
+
if user_token:
|
|
125
|
+
try:
|
|
126
|
+
ws_to_delete = next((ws for ws in user_workspaces["workspaces"] if ws["name"] == x.name), None)
|
|
127
|
+
if ws_to_delete:
|
|
128
|
+
await user_client.delete_workspace(ws_to_delete["id"], hard_delete_confirmation=x.name)
|
|
129
|
+
except Exception:
|
|
130
|
+
pass
|
|
131
|
+
vendor_ws = await user_client.create_workspace(x.name, template=None)
|
|
132
|
+
vendor_workspaces.append(vendor_ws)
|
|
117
133
|
workspace_lib_paths.append((x.name, x))
|
|
118
134
|
|
|
135
|
+
workspaces: List[Dict[str, Any]] = (await user_client.user_workspaces()).get("workspaces", [])
|
|
136
|
+
local_ws = next((ws for ws in workspaces if ws["name"] == TB_LOCAL_WORKSPACE_NAME), {})
|
|
137
|
+
current_ws: Dict[str, Any] = current_ws or local_ws
|
|
138
|
+
for vendor_ws in [ws for ws in workspaces if ws["name"] in [ws["name"] for ws in vendor_workspaces]]:
|
|
139
|
+
ws_client = deepcopy(tb_client)
|
|
140
|
+
ws_client.token = vendor_ws["token"]
|
|
141
|
+
shared_ws_path = Path(folder) / "vendor" / vendor_ws["name"]
|
|
142
|
+
|
|
143
|
+
if shared_ws_path.exists() and not is_vendor:
|
|
144
|
+
await folder_build(ws_client, folder=shared_ws_path.as_posix(), is_vendor=True, current_ws=vendor_ws)
|
|
145
|
+
|
|
119
146
|
datasources: List[Dict[str, Any]] = await tb_client.datasources()
|
|
120
147
|
pipes: List[Dict[str, Any]] = await tb_client.pipes(dependencies=True)
|
|
121
148
|
|
|
@@ -253,10 +280,12 @@ async def folder_build(
|
|
|
253
280
|
tests_validate_processed_bytes,
|
|
254
281
|
tests_check_requests_from_branch,
|
|
255
282
|
current_ws,
|
|
283
|
+
local_ws,
|
|
256
284
|
fork_downstream,
|
|
257
285
|
fork,
|
|
258
286
|
git_release,
|
|
259
287
|
build,
|
|
288
|
+
is_vendor,
|
|
260
289
|
)
|
|
261
290
|
if not run_tests:
|
|
262
291
|
click.echo(
|
|
@@ -683,10 +712,12 @@ async def exec_file(
|
|
|
683
712
|
tests_validate_processed_bytes: bool = False,
|
|
684
713
|
tests_check_requests_from_branch: bool = False,
|
|
685
714
|
current_ws: Optional[Dict[str, Any]] = None,
|
|
715
|
+
local_ws: Optional[Dict[str, Any]] = None,
|
|
686
716
|
fork_downstream: Optional[bool] = False,
|
|
687
717
|
fork: Optional[bool] = False,
|
|
688
718
|
git_release: Optional[bool] = False,
|
|
689
719
|
build: Optional[bool] = False,
|
|
720
|
+
is_vendor: Optional[bool] = False,
|
|
690
721
|
):
|
|
691
722
|
if debug:
|
|
692
723
|
click.echo(FeedbackManager.debug_running_file(file=pp.pformat(r)))
|
|
@@ -726,9 +757,11 @@ async def exec_file(
|
|
|
726
757
|
force,
|
|
727
758
|
skip_confirmation=skip_confirmation,
|
|
728
759
|
current_ws=current_ws,
|
|
760
|
+
local_ws=local_ws,
|
|
729
761
|
fork_downstream=fork_downstream,
|
|
730
762
|
fork=fork,
|
|
731
763
|
build=build,
|
|
764
|
+
is_vendor=is_vendor,
|
|
732
765
|
)
|
|
733
766
|
await update_tags_in_resource(r, "datasource", tb_client)
|
|
734
767
|
else:
|
|
@@ -17,9 +17,11 @@ async def new_ds(
|
|
|
17
17
|
force: bool = False,
|
|
18
18
|
skip_confirmation: bool = False,
|
|
19
19
|
current_ws=None,
|
|
20
|
+
local_ws=None,
|
|
20
21
|
fork_downstream: Optional[bool] = False,
|
|
21
22
|
fork: Optional[bool] = False,
|
|
22
23
|
build: Optional[bool] = False,
|
|
24
|
+
is_vendor: Optional[bool] = False,
|
|
23
25
|
):
|
|
24
26
|
ds_name = ds["params"]["name"]
|
|
25
27
|
|
|
@@ -93,7 +95,7 @@ async def new_ds(
|
|
|
93
95
|
if ds.get("tokens"):
|
|
94
96
|
await manage_tokens()
|
|
95
97
|
|
|
96
|
-
if ds.get("shared_with"):
|
|
98
|
+
if ds.get("shared_with") and not build:
|
|
97
99
|
if not user_token:
|
|
98
100
|
click.echo(FeedbackManager.info_skipping_shared_with_entry())
|
|
99
101
|
else:
|
|
@@ -105,6 +107,14 @@ async def new_ds(
|
|
|
105
107
|
workspaces_to_share=ds["shared_with"],
|
|
106
108
|
current_ws=current_ws,
|
|
107
109
|
)
|
|
110
|
+
if is_vendor and user_token and local_ws and current_ws:
|
|
111
|
+
user_client: TinyB = deepcopy(client)
|
|
112
|
+
user_client.token = user_token
|
|
113
|
+
await user_client.datasource_share(
|
|
114
|
+
datasource_id=datasource.get("id", ""),
|
|
115
|
+
current_workspace_id=current_ws.get("id", ""),
|
|
116
|
+
destination_workspace_id=local_ws.get("id", ""),
|
|
117
|
+
)
|
|
108
118
|
|
|
109
119
|
except Exception as e:
|
|
110
120
|
raise click.ClickException(FeedbackManager.error_creating_datasource(error=str(e)))
|
tinybird/tb/modules/local.py
CHANGED
|
@@ -120,8 +120,11 @@ def get_tinybird_local_client():
|
|
|
120
120
|
raise CLIException("Tinybird local environment is not running. Please start it with `tb local start`.")
|
|
121
121
|
|
|
122
122
|
token = tokens["workspace_admin_token"]
|
|
123
|
+
user_token = tokens["user_token"]
|
|
123
124
|
config.set_token(token)
|
|
124
125
|
config.set_host(TB_LOCAL_HOST)
|
|
126
|
+
config.set_user_token(user_token)
|
|
127
|
+
config.persist_to_file()
|
|
125
128
|
return config.get_client(host=TB_LOCAL_HOST, token=token)
|
|
126
129
|
|
|
127
130
|
|
|
@@ -18,19 +18,19 @@ tinybird/ch_utils/engine.py,sha256=OXkBhlzGjZotjD0vaT-rFIbSGV4tpiHxE8qO_ip0SyQ,4
|
|
|
18
18
|
tinybird/tb/cli.py,sha256=6Lu3wsCNepAxjJCWy4c6RhVPArBtm8TlUcSxX--TsBo,783
|
|
19
19
|
tinybird/tb/modules/auth.py,sha256=hynZ-Temot8YBsySUWKSFzZlYadtFPxG3o6lCSu1n6E,9018
|
|
20
20
|
tinybird/tb/modules/branch.py,sha256=R1tTUBGyI0p_dt2IAWbuyNOvemhjCIPwYxEmOxL3zOg,38468
|
|
21
|
-
tinybird/tb/modules/build.py,sha256=
|
|
21
|
+
tinybird/tb/modules/build.py,sha256=SAtWf40kH0HCkSiSm2bPD0YJbLmpwALt-UI9JqnO6SQ,8393
|
|
22
22
|
tinybird/tb/modules/cicd.py,sha256=mIMU1gNGpN3f5K3rBYN9rFoOT3RogDxIs_zB3LY-iO4,7463
|
|
23
23
|
tinybird/tb/modules/cli.py,sha256=Yw6ooemOAIUZR-IKk05BG_D7RgoljTgoHBYW7aq4XaM,56674
|
|
24
24
|
tinybird/tb/modules/common.py,sha256=vb69xKJXbRjoYOlCwerXEU3488Od_zfR2N2yP5VyNw8,79372
|
|
25
25
|
tinybird/tb/modules/config.py,sha256=ppWvACHrSLkb5hOoQLYNby2w8jR76-8Kx2NBCst7ntQ,11760
|
|
26
26
|
tinybird/tb/modules/connection.py,sha256=ZSqBGoRiJedjHKEyB_fr1ybucOHtaad8d7uqGa2Q92M,28668
|
|
27
|
-
tinybird/tb/modules/create.py,sha256=
|
|
27
|
+
tinybird/tb/modules/create.py,sha256=PXCdmyhkG9-XjWGNpyR24nuLLnLEBIs2v9ycxCk10aw,7456
|
|
28
28
|
tinybird/tb/modules/datasource.py,sha256=tjcf5o-HYIdTkb_c1ErGUFIE-W6G992vsvCuDGcxb9Q,35818
|
|
29
29
|
tinybird/tb/modules/exceptions.py,sha256=4A2sSjCEqKUMqpP3WI00zouCWW4uLaghXXLZBSw04mY,3363
|
|
30
30
|
tinybird/tb/modules/fmt.py,sha256=UszEQO15fdzQ49QEj7Unhu68IKwSuKPsOrKhk2p2TAg,3547
|
|
31
31
|
tinybird/tb/modules/job.py,sha256=eoBVyA24lYIPonU88Jn7FF9hBKz1kScy9_w_oWreuc4,2952
|
|
32
32
|
tinybird/tb/modules/llm.py,sha256=D6ShlqCorZpRLjE5srI7Ws4VUTH6kSotTi88CvUwoGw,2446
|
|
33
|
-
tinybird/tb/modules/local.py,sha256=
|
|
33
|
+
tinybird/tb/modules/local.py,sha256=R7L0Inn23OXVs7nssra8mto52fbP7rU2eUU4Bj6_AXU,5998
|
|
34
34
|
tinybird/tb/modules/mock.py,sha256=dYxm8_1zXGZnf4X8OYmG9hK1I-csHakD64Hag8mAn4Q,2069
|
|
35
35
|
tinybird/tb/modules/pipe.py,sha256=9wnfKbp2FkmLiJgVk3qbra76ktwsUTXghu6j9cCEahQ,31058
|
|
36
36
|
tinybird/tb/modules/prompts.py,sha256=u_-VSsqk8fXJTsLO3sCv9DR1Qx2V_M_Z_gBfiyvn5jA,7251
|
|
@@ -42,11 +42,11 @@ tinybird/tb/modules/test.py,sha256=psINFpSYT1eGgy32-_4q6CJ7LOcdwBpAfasMA0_tNOU,4
|
|
|
42
42
|
tinybird/tb/modules/token.py,sha256=r0oeG1RpOOzHtqbUaHBiOmhE55HfNIvReAAWyKl9fJg,12695
|
|
43
43
|
tinybird/tb/modules/workspace.py,sha256=FVlh-kbiZp5Gvp6dGFxi0UD8ail77rMamXLhqdVwrZ0,10916
|
|
44
44
|
tinybird/tb/modules/workspace_members.py,sha256=08W0onEYkKLEC5TkAI07cxN9XSquEm7HnL7OkHAVDjo,8715
|
|
45
|
-
tinybird/tb/modules/datafile/build.py,sha256=
|
|
45
|
+
tinybird/tb/modules/datafile/build.py,sha256=SWPkmMQYde11LOt0B1JuYoyU8SsSTLjjVp_tPSgMoTM,91754
|
|
46
46
|
tinybird/tb/modules/datafile/build_common.py,sha256=74547h5ja4C66DAwDMabj75FA_BUTJxTJv-24tSFmrs,4551
|
|
47
|
-
tinybird/tb/modules/datafile/build_datasource.py,sha256=
|
|
47
|
+
tinybird/tb/modules/datafile/build_datasource.py,sha256=fquzEGwk9NL_0K5YYG86Xtvgn4J5YHtRUoKJxbQGO0s,17344
|
|
48
48
|
tinybird/tb/modules/datafile/build_pipe.py,sha256=X4a-UM_GSOmR8ks2kBITgebXz-aE-iEdG5F1eEUzIyc,27555
|
|
49
|
-
tinybird/tb/modules/datafile/common.py,sha256=
|
|
49
|
+
tinybird/tb/modules/datafile/common.py,sha256=hoIm6mvXO49Jy2W2XPGE7NgOj-GmYw7zALXREQ0C3eQ,33969
|
|
50
50
|
tinybird/tb/modules/datafile/diff.py,sha256=ZaTPGjRFJWokhaad_rMSxfYT92PA96s4WhhvlZubgyA,6769
|
|
51
51
|
tinybird/tb/modules/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
|
|
52
52
|
tinybird/tb/modules/datafile/format_common.py,sha256=zNWDXvwSKC9_T5e9R92LLj9ekDflVWwsllhGQilZsnY,2184
|
|
@@ -64,8 +64,8 @@ tinybird/tb_cli_modules/config.py,sha256=6NTgIdwf0X132A1j6G_YrdPep87ymZ9b5pABabK
|
|
|
64
64
|
tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
|
|
65
65
|
tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
|
|
66
66
|
tinybird/tb_cli_modules/telemetry.py,sha256=iEGnMuCuNhvF6ln__j6X9MSTwL_0Hm-GgFHHHvhfknk,10466
|
|
67
|
-
tinybird-0.0.1.
|
|
68
|
-
tinybird-0.0.1.
|
|
69
|
-
tinybird-0.0.1.
|
|
70
|
-
tinybird-0.0.1.
|
|
71
|
-
tinybird-0.0.1.
|
|
67
|
+
tinybird-0.0.1.dev9.dist-info/METADATA,sha256=YbZtwUdfek1Uzww7BFCLXsumr1cHtYOH7ceOQnKLjlo,2404
|
|
68
|
+
tinybird-0.0.1.dev9.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
|
69
|
+
tinybird-0.0.1.dev9.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
|
|
70
|
+
tinybird-0.0.1.dev9.dist-info/top_level.txt,sha256=pgw6AzERHBcW3YTi2PW4arjxLkulk2msOz_SomfOEuc,45
|
|
71
|
+
tinybird-0.0.1.dev9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|