tinybird 0.0.1.dev68__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/ch_utils/engine.py +2 -4
- tinybird/context.py +0 -1
- tinybird/sql_template.py +1 -3
- tinybird/sql_toolset.py +3 -3
- tinybird/tb/__cli__.py +2 -2
- tinybird/tb/modules/auth.py +1 -1
- tinybird/tb/modules/build.py +12 -1
- tinybird/tb/modules/cli.py +15 -6
- tinybird/tb/modules/common.py +9 -9
- tinybird/tb/modules/datafile/build_common.py +1 -1
- tinybird/tb/modules/datafile/build_datasource.py +1 -1
- tinybird/tb/modules/datafile/common.py +18 -1
- tinybird/tb/modules/datafile/fixture.py +7 -0
- tinybird/tb/modules/datafile/pipe_checker.py +1 -1
- tinybird/tb/modules/datasource.py +65 -2
- tinybird/tb/modules/deployment.py +31 -5
- tinybird/tb/modules/endpoint.py +1 -1
- tinybird/tb/modules/fmt.py +1 -1
- tinybird/tb/modules/materialization.py +5 -5
- tinybird/tb/modules/mock.py +26 -19
- tinybird/tb/modules/pipe.py +1 -1
- tinybird/tb/modules/project.py +3 -3
- tinybird/tb/modules/shell.py +13 -21
- tinybird/tb/modules/test.py +1 -1
- tinybird/tb/modules/token.py +4 -4
- tinybird/tb/modules/watch.py +1 -1
- tinybird/tb/modules/workspace.py +6 -6
- tinybird/tb/modules/workspace_members.py +6 -6
- tinybird/tb_cli_modules/common.py +2 -2
- tinybird/tornado_template.py +2 -1
- tinybird-0.0.1.dev70.dist-info/METADATA +73 -0
- {tinybird-0.0.1.dev68.dist-info → tinybird-0.0.1.dev70.dist-info}/RECORD +35 -35
- {tinybird-0.0.1.dev68.dist-info → tinybird-0.0.1.dev70.dist-info}/WHEEL +1 -1
- tinybird-0.0.1.dev68.dist-info/METADATA +0 -64
- {tinybird-0.0.1.dev68.dist-info → tinybird-0.0.1.dev70.dist-info}/entry_points.txt +0 -0
- {tinybird-0.0.1.dev68.dist-info → tinybird-0.0.1.dev70.dist-info}/top_level.txt +0 -0
tinybird/tb/modules/mock.py
CHANGED
|
@@ -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,22 +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
|
-
click.echo(FeedbackManager.highlight(message=f"\n» Creating fixture for {datasource_name}..."))
|
|
84
73
|
response = llm.ask(system_prompt=mock_prompt(rows), prompt=prompt)
|
|
85
74
|
sql = extract_xml(response, "sql")
|
|
86
75
|
result = await tb_client.query(f"{sql} FORMAT JSON")
|
|
87
76
|
data = result.get("data", [])[:rows]
|
|
88
|
-
|
|
89
|
-
|
|
77
|
+
if env == "build":
|
|
78
|
+
persist_fixture_sql(datasource_name, sql, folder)
|
|
79
|
+
|
|
80
|
+
fixture_path = persist_fixture(datasource_name, data, folder)
|
|
90
81
|
|
|
91
|
-
|
|
92
|
-
|
|
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))
|
|
93
85
|
|
|
94
86
|
click.echo(FeedbackManager.success(message=f"✓ Sample data for {datasource_name} created with {rows} rows"))
|
|
95
87
|
|
|
96
88
|
except Exception as e:
|
|
97
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
|
+
)
|
tinybird/tb/modules/pipe.py
CHANGED
|
@@ -27,7 +27,7 @@ def pipe(ctx):
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
@pipe.command(name="ls")
|
|
30
|
-
@click.option("--match", default=None, help="Retrieve any resourcing matching the pattern.
|
|
30
|
+
@click.option("--match", default=None, help="Retrieve any resourcing matching the pattern. For example, --match _test")
|
|
31
31
|
@click.option(
|
|
32
32
|
"--format",
|
|
33
33
|
"format_",
|
tinybird/tb/modules/project.py
CHANGED
|
@@ -40,17 +40,17 @@ class Project:
|
|
|
40
40
|
|
|
41
41
|
def get_vendor_files(self) -> List[str]:
|
|
42
42
|
vendor_files: List[str] = []
|
|
43
|
-
for project_file in glob.glob(f"{self.vendor_path}/**/*.datasource", recursive=
|
|
43
|
+
for project_file in glob.glob(f"{self.vendor_path}/**/*.datasource", recursive=False):
|
|
44
44
|
vendor_files.append(project_file)
|
|
45
45
|
return vendor_files
|
|
46
46
|
|
|
47
47
|
@property
|
|
48
48
|
def datasources(self) -> List[str]:
|
|
49
|
-
return sorted([Path(f).stem for f in glob.glob(f"{self.path}/**/*.datasource", recursive=
|
|
49
|
+
return sorted([Path(f).stem for f in glob.glob(f"{self.path}/**/*.datasource", recursive=False)])
|
|
50
50
|
|
|
51
51
|
@property
|
|
52
52
|
def pipes(self) -> List[str]:
|
|
53
|
-
return sorted([Path(f).stem for f in glob.glob(f"{self.path}/**/*.pipe", recursive=
|
|
53
|
+
return sorted([Path(f).stem for f in glob.glob(f"{self.path}/**/*.pipe", recursive=False)])
|
|
54
54
|
|
|
55
55
|
def get_pipe_datafile(self, filename: str) -> Optional[Datafile]:
|
|
56
56
|
try:
|
tinybird/tb/modules/shell.py
CHANGED
|
@@ -24,10 +24,17 @@ from tinybird.tb.modules.table import format_table
|
|
|
24
24
|
class DynamicCompleter(Completer):
|
|
25
25
|
def __init__(self, project: Project):
|
|
26
26
|
self.project = project
|
|
27
|
-
self.static_commands = [
|
|
27
|
+
self.static_commands = [
|
|
28
|
+
"create",
|
|
29
|
+
"mock",
|
|
30
|
+
"test",
|
|
31
|
+
"select",
|
|
32
|
+
"datasource",
|
|
33
|
+
"pipe",
|
|
34
|
+
"endpoint",
|
|
35
|
+
"copy",
|
|
36
|
+
]
|
|
28
37
|
self.test_commands = ["create", "run", "update"]
|
|
29
|
-
self.mock_flags = ["--prompt", "--rows"]
|
|
30
|
-
self.common_rows = ["10", "50", "100", "500", "1000"]
|
|
31
38
|
self.sql_keywords = ["select", "from", "where", "group by", "order by", "limit"]
|
|
32
39
|
|
|
33
40
|
def get_completions(self, document, complete_event):
|
|
@@ -114,20 +121,6 @@ class DynamicCompleter(Completer):
|
|
|
114
121
|
)
|
|
115
122
|
return
|
|
116
123
|
|
|
117
|
-
if len(words) == 3 or len(words) == 4:
|
|
118
|
-
# After datasource or after a flag value, show available flags
|
|
119
|
-
available_flags = [f for f in self.mock_flags if f not in words]
|
|
120
|
-
for flag in available_flags:
|
|
121
|
-
yield Completion(flag, start_position=0, display=flag, style="class:completion.cmd")
|
|
122
|
-
return
|
|
123
|
-
|
|
124
|
-
last_word = words[-1]
|
|
125
|
-
if last_word == "--prompt":
|
|
126
|
-
yield Completion('""', start_position=0, display='"Enter your prompt..."', style="class:completion.cmd")
|
|
127
|
-
elif last_word == "--rows":
|
|
128
|
-
for rows in self.common_rows:
|
|
129
|
-
yield Completion(rows, start_position=0, display=rows, style="class:completion.cmd")
|
|
130
|
-
|
|
131
124
|
def _handle_test_completions(self, words: List[str]):
|
|
132
125
|
if len(words) == 1:
|
|
133
126
|
for cmd in self.test_commands:
|
|
@@ -206,7 +199,6 @@ class Shell:
|
|
|
206
199
|
self.project = project
|
|
207
200
|
self.tb_client = tb_client
|
|
208
201
|
self.prompt_message = "\ntb > "
|
|
209
|
-
self.commands = ["create", "mock", "test", "tb", "select"]
|
|
210
202
|
self.session: PromptSession = PromptSession(
|
|
211
203
|
completer=DynamicCompleter(project),
|
|
212
204
|
complete_style=CompleteStyle.COLUMN,
|
|
@@ -274,7 +266,7 @@ class Shell:
|
|
|
274
266
|
def handle_mock(self, arg):
|
|
275
267
|
if "mock" in arg.strip().lower():
|
|
276
268
|
arg = arg.replace("mock", "")
|
|
277
|
-
subprocess.run(f"tb --build mock {arg}
|
|
269
|
+
subprocess.run(f"tb --build mock {arg}", shell=True, text=True)
|
|
278
270
|
|
|
279
271
|
def handle_tb(self, argline):
|
|
280
272
|
click.echo("")
|
|
@@ -290,7 +282,7 @@ class Shell:
|
|
|
290
282
|
else:
|
|
291
283
|
need_skip = ("mock", "test create", "create")
|
|
292
284
|
if any(arg.startswith(cmd) for cmd in need_skip):
|
|
293
|
-
argline = f"{argline}
|
|
285
|
+
argline = f"{argline}"
|
|
294
286
|
subprocess.run(f"tb --build {argline}", shell=True, text=True)
|
|
295
287
|
|
|
296
288
|
def default(self, argline):
|
|
@@ -305,7 +297,7 @@ class Shell:
|
|
|
305
297
|
else:
|
|
306
298
|
need_skip = ("mock", "test create", "create")
|
|
307
299
|
if any(arg.startswith(cmd) for cmd in need_skip):
|
|
308
|
-
argline = f"{argline}
|
|
300
|
+
argline = f"{argline}"
|
|
309
301
|
subprocess.run(f"tb --build {argline}", shell=True, text=True)
|
|
310
302
|
|
|
311
303
|
def run_sql(self, query, rows_limit=20):
|
tinybird/tb/modules/test.py
CHANGED
|
@@ -207,7 +207,7 @@ async def test_update(ctx: click.Context, pipe: str) -> None:
|
|
|
207
207
|
|
|
208
208
|
@test.command(
|
|
209
209
|
name="run",
|
|
210
|
-
help="Run the test suite, a file, or a test
|
|
210
|
+
help="Run the test suite, a file, or a test",
|
|
211
211
|
)
|
|
212
212
|
@click.argument("name", nargs=-1)
|
|
213
213
|
@click.pass_context
|
tinybird/tb/modules/token.py
CHANGED
|
@@ -24,7 +24,7 @@ def token(ctx: Context) -> None:
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
@token.command(name="ls")
|
|
27
|
-
@click.option("--match", default=None, help="Retrieve any token matching the pattern.
|
|
27
|
+
@click.option("--match", default=None, help="Retrieve any token matching the pattern. For example, --match _test")
|
|
28
28
|
@click.pass_context
|
|
29
29
|
@coro
|
|
30
30
|
async def token_ls(
|
|
@@ -52,7 +52,7 @@ async def token_ls(
|
|
|
52
52
|
|
|
53
53
|
@token.command(name="rm")
|
|
54
54
|
@click.argument("token_id")
|
|
55
|
-
@click.option("--yes", is_flag=True, default=False, help="
|
|
55
|
+
@click.option("--yes", is_flag=True, default=False, help="Don't ask for confirmation")
|
|
56
56
|
@click.pass_context
|
|
57
57
|
@coro
|
|
58
58
|
async def token_rm(ctx: Context, token_id: str, yes: bool) -> None:
|
|
@@ -74,7 +74,7 @@ async def token_rm(ctx: Context, token_id: str, yes: bool) -> None:
|
|
|
74
74
|
|
|
75
75
|
@token.command(name="refresh")
|
|
76
76
|
@click.argument("token_id")
|
|
77
|
-
@click.option("--yes", is_flag=True, default=False, help="
|
|
77
|
+
@click.option("--yes", is_flag=True, default=False, help="Don't ask for confirmation")
|
|
78
78
|
@click.pass_context
|
|
79
79
|
@coro
|
|
80
80
|
async def token_refresh(ctx: Context, token_id: str, yes: bool) -> None:
|
|
@@ -347,4 +347,4 @@ async def create_static_token(ctx, name: str):
|
|
|
347
347
|
except Exception as e:
|
|
348
348
|
raise CLITokenException(FeedbackManager.error_exception(error=e))
|
|
349
349
|
|
|
350
|
-
click.echo("
|
|
350
|
+
click.echo("Token has been generated successfully.")
|
tinybird/tb/modules/watch.py
CHANGED
|
@@ -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
|
tinybird/tb/modules/workspace.py
CHANGED
|
@@ -91,12 +91,12 @@ async def workspace_current():
|
|
|
91
91
|
@click.argument("workspace_name", required=False)
|
|
92
92
|
@click.option("--starter_kit", "starter_kit", type=str, required=False, help="Use a Tinybird starter kit as a template")
|
|
93
93
|
@click.option("--starter-kit", "starter_kit", hidden=True)
|
|
94
|
-
@click.option("--user_token", is_flag=False, default=None, help="When passed,
|
|
94
|
+
@click.option("--user_token", is_flag=False, default=None, help="When passed, tb won't prompt asking for the token")
|
|
95
95
|
@click.option(
|
|
96
96
|
"--fork",
|
|
97
97
|
is_flag=True,
|
|
98
98
|
default=False,
|
|
99
|
-
help="When enabled,
|
|
99
|
+
help="When enabled, tb will share all data sources from the current workspace with the new one",
|
|
100
100
|
)
|
|
101
101
|
@click.pass_context
|
|
102
102
|
@coro
|
|
@@ -123,16 +123,16 @@ async def create_workspace(
|
|
|
123
123
|
await create_workspace_interactive(ctx, workspace_name, starter_kit, user_token, fork)
|
|
124
124
|
|
|
125
125
|
|
|
126
|
-
@workspace.command(name="delete", short_help="Delete a
|
|
126
|
+
@workspace.command(name="delete", short_help="Delete a workspace for your Tinybird user")
|
|
127
127
|
@click.argument("workspace_name_or_id")
|
|
128
|
-
@click.option("--user_token", is_flag=False, default=None, help="When passed,
|
|
128
|
+
@click.option("--user_token", is_flag=False, default=None, help="When passed, tb won't prompt asking for the token")
|
|
129
129
|
@click.option(
|
|
130
130
|
"--confirm_hard_delete",
|
|
131
131
|
default=None,
|
|
132
|
-
help="
|
|
132
|
+
help="Enter the name of the workspace to confirm you want to run a hard delete over the workspace",
|
|
133
133
|
hidden=True,
|
|
134
134
|
)
|
|
135
|
-
@click.option("--yes", is_flag=True, default=False, help="
|
|
135
|
+
@click.option("--yes", is_flag=True, default=False, help="Don't ask for confirmation")
|
|
136
136
|
@click.pass_context
|
|
137
137
|
@coro
|
|
138
138
|
async def delete_workspace(
|
|
@@ -60,10 +60,10 @@ def members(ctx: Context) -> None:
|
|
|
60
60
|
"""Workspace members management commands."""
|
|
61
61
|
|
|
62
62
|
|
|
63
|
-
@members.command(name="add", short_help="Adds members to the current
|
|
63
|
+
@members.command(name="add", short_help="Adds members to the current workspace")
|
|
64
64
|
@click.argument("members_emails")
|
|
65
65
|
@click.option("--role", is_flag=False, default=None, help="Role for the members being added", type=click.Choice(ROLES))
|
|
66
|
-
@click.option("--user_token", is_flag=False, default=None, help="When passed,
|
|
66
|
+
@click.option("--user_token", is_flag=False, default=None, help="When passed, tb won't prompt asking for it")
|
|
67
67
|
@click.pass_context
|
|
68
68
|
@coro
|
|
69
69
|
async def add_members_to_workspace(
|
|
@@ -111,13 +111,13 @@ async def list_members_in_workspace(ctx: Context) -> None:
|
|
|
111
111
|
echo_safe_humanfriendly_tables_format_smart_table(users, column_names=["email"])
|
|
112
112
|
|
|
113
113
|
|
|
114
|
-
@members.command(name="rm", short_help="Removes members from the current
|
|
114
|
+
@members.command(name="rm", short_help="Removes members from the current workspace")
|
|
115
115
|
@click.argument("members_emails")
|
|
116
|
-
@click.option("--user_token", is_flag=False, default=None, help="When passed,
|
|
116
|
+
@click.option("--user_token", is_flag=False, default=None, help="When passed, tb won't prompt asking for it")
|
|
117
117
|
@click.pass_context
|
|
118
118
|
@coro
|
|
119
119
|
async def remove_members_from_workspace(ctx: Context, members_emails: str, user_token: Optional[str]) -> None:
|
|
120
|
-
"""Removes members from the current
|
|
120
|
+
"""Removes members from the current workspace."""
|
|
121
121
|
|
|
122
122
|
cmd_ctx = await get_command_context(ctx)
|
|
123
123
|
|
|
@@ -163,7 +163,7 @@ async def remove_members_from_workspace(ctx: Context, members_emails: str, user_
|
|
|
163
163
|
@members.command(name="set-role", short_help="Sets the role for existing workspace members")
|
|
164
164
|
@click.argument("role", required=True, type=click.Choice(ROLES))
|
|
165
165
|
@click.argument("members_emails", required=True, type=str)
|
|
166
|
-
@click.option("--user_token", is_flag=False, default=None, help="When passed,
|
|
166
|
+
@click.option("--user_token", is_flag=False, default=None, help="When passed, tb won't prompt asking for it")
|
|
167
167
|
@click.pass_context
|
|
168
168
|
@coro
|
|
169
169
|
async def set_workspace_member_role(ctx: Context, role: str, members_emails: str, user_token: Optional[str]) -> None:
|
|
@@ -637,7 +637,7 @@ async def check_user_token(ctx: Context, token: str):
|
|
|
637
637
|
if not is_authenticated.get("is_valid", False):
|
|
638
638
|
raise CLIWorkspaceException(
|
|
639
639
|
FeedbackManager.error_exception(
|
|
640
|
-
error='Invalid token.
|
|
640
|
+
error='Invalid token. Make sure you are using the "user token" instead of the "admin your@email" token.'
|
|
641
641
|
)
|
|
642
642
|
)
|
|
643
643
|
if is_authenticated.get("is_valid") and not is_authenticated.get("is_user", False):
|
|
@@ -1183,7 +1183,7 @@ async def sync_data(ctx, datasource_name: str, yes: bool):
|
|
|
1183
1183
|
client: TinyB = ctx.obj["client"]
|
|
1184
1184
|
datasource = await client.get_datasource(datasource_name)
|
|
1185
1185
|
|
|
1186
|
-
VALID_DATASOURCES = ["bigquery", "snowflake", "s3", "gcs"]
|
|
1186
|
+
VALID_DATASOURCES = ["bigquery", "snowflake", "s3", "s3_iamrole", "gcs"]
|
|
1187
1187
|
if datasource["type"] not in VALID_DATASOURCES:
|
|
1188
1188
|
raise CLIException(FeedbackManager.error_sync_not_supported(valid_datasources=VALID_DATASOURCES))
|
|
1189
1189
|
|
tinybird/tornado_template.py
CHANGED
|
@@ -1161,7 +1161,8 @@ def check_valid_expr(expr):
|
|
|
1161
1161
|
elif isinstance(expr, ast.Subscript):
|
|
1162
1162
|
check_valid_expr(expr.value)
|
|
1163
1163
|
if isinstance(expr.slice, ast.Index):
|
|
1164
|
-
|
|
1164
|
+
# TODO: Slice does not seems to have a value attribute
|
|
1165
|
+
check_valid_expr(expr.slice.value) # type: ignore[attr-defined]
|
|
1165
1166
|
elif isinstance(expr.slice, ast.Slice):
|
|
1166
1167
|
if expr.slice.lower is not None:
|
|
1167
1168
|
check_valid_expr(expr.slice.lower)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: tinybird
|
|
3
|
+
Version: 0.0.1.dev70
|
|
4
|
+
Summary: Tinybird Command Line Tool
|
|
5
|
+
Home-page: https://www.tinybird.co/docs/cli/introduction.html
|
|
6
|
+
Author: Tinybird
|
|
7
|
+
Author-email: support@tinybird.co
|
|
8
|
+
Requires-Python: >=3.9, <3.13
|
|
9
|
+
Description-Content-Type: text/x-rst
|
|
10
|
+
Requires-Dist: aiofiles==24.1.0
|
|
11
|
+
Requires-Dist: anthropic==0.42.0
|
|
12
|
+
Requires-Dist: click<8.2,>=8.1.6
|
|
13
|
+
Requires-Dist: clickhouse-toolset==0.33.dev0
|
|
14
|
+
Requires-Dist: colorama==0.4.6
|
|
15
|
+
Requires-Dist: cryptography~=41.0.0
|
|
16
|
+
Requires-Dist: croniter==1.3.8
|
|
17
|
+
Requires-Dist: docker==7.1.0
|
|
18
|
+
Requires-Dist: GitPython~=3.1.32
|
|
19
|
+
Requires-Dist: humanfriendly~=8.2
|
|
20
|
+
Requires-Dist: prompt_toolkit==3.0.48
|
|
21
|
+
Requires-Dist: pydantic~=2.8.0
|
|
22
|
+
Requires-Dist: pyperclip==1.8.2
|
|
23
|
+
Requires-Dist: pyyaml<6.1,>=6.0
|
|
24
|
+
Requires-Dist: requests<3,>=2.28.1
|
|
25
|
+
Requires-Dist: shandy-sqlfmt==0.11.1
|
|
26
|
+
Requires-Dist: shandy-sqlfmt[jinjafmt]==0.11.1
|
|
27
|
+
Requires-Dist: toposort==1.10
|
|
28
|
+
Requires-Dist: tornado~=6.0.0
|
|
29
|
+
Requires-Dist: urllib3<2,>=1.26.14
|
|
30
|
+
Requires-Dist: watchdog==6.0.0
|
|
31
|
+
Requires-Dist: wheel
|
|
32
|
+
Requires-Dist: packaging<24,>=23.1
|
|
33
|
+
Requires-Dist: llm>=0.19
|
|
34
|
+
Requires-Dist: thefuzz==0.22.1
|
|
35
|
+
Provides-Extra: bigquery
|
|
36
|
+
Requires-Dist: gsutil==4.58; extra == "bigquery"
|
|
37
|
+
Requires-Dist: google-api-python-client==2.0.2; extra == "bigquery"
|
|
38
|
+
Requires-Dist: google-auth==1.27.1; extra == "bigquery"
|
|
39
|
+
Requires-Dist: google-auth-httplib2==0.1.0; extra == "bigquery"
|
|
40
|
+
Requires-Dist: google-cloud-storage==2.4.0; extra == "bigquery"
|
|
41
|
+
Requires-Dist: google-cloud-bigquery==2.11.0; extra == "bigquery"
|
|
42
|
+
Provides-Extra: snowflake
|
|
43
|
+
Requires-Dist: snowflake-connector-python~=3.12.3; extra == "snowflake"
|
|
44
|
+
Requires-Dist: gsutil==4.58; extra == "snowflake"
|
|
45
|
+
Requires-Dist: google-api-python-client==2.0.2; extra == "snowflake"
|
|
46
|
+
Requires-Dist: google-auth==1.27.1; extra == "snowflake"
|
|
47
|
+
Requires-Dist: google-auth-httplib2==0.1.0; extra == "snowflake"
|
|
48
|
+
Requires-Dist: google-cloud-storage==2.4.0; extra == "snowflake"
|
|
49
|
+
Requires-Dist: oauth2client==3.0.0; extra == "snowflake"
|
|
50
|
+
Requires-Dist: chardet<4,>=3.0.2; extra == "snowflake"
|
|
51
|
+
Requires-Dist: pyOpenSSL<20.0.0,>=16.2.0; extra == "snowflake"
|
|
52
|
+
Dynamic: author
|
|
53
|
+
Dynamic: author-email
|
|
54
|
+
Dynamic: description
|
|
55
|
+
Dynamic: description-content-type
|
|
56
|
+
Dynamic: home-page
|
|
57
|
+
Dynamic: provides-extra
|
|
58
|
+
Dynamic: requires-dist
|
|
59
|
+
Dynamic: requires-python
|
|
60
|
+
Dynamic: summary
|
|
61
|
+
|
|
62
|
+
Tinybird CLI
|
|
63
|
+
=============
|
|
64
|
+
|
|
65
|
+
The Tinybird command-line tool allows you to use all the Tinybird functionality directly from the command line. Additionally, it includes several functions to create and manage data projects easily.
|
|
66
|
+
|
|
67
|
+
Changelog
|
|
68
|
+
----------
|
|
69
|
+
|
|
70
|
+
0.0.1dev1
|
|
71
|
+
***********
|
|
72
|
+
|
|
73
|
+
* Initial release of the Tinybird CLI
|
|
@@ -2,80 +2,80 @@ tinybird/__cli__.py,sha256=esPl5QDTzuQgHe5FuxWLm-fURFigGGwjnYLh9GuWUw4,232
|
|
|
2
2
|
tinybird/client.py,sha256=W5Xttnz0bzwqqVGNJJs-4Ca2AbtCMh3URuQYPJ5APsE,52013
|
|
3
3
|
tinybird/config.py,sha256=cd_RH7ZjqGjpWwu0efPkhS8VxD9K6Jix4QY2W3w1Pvs,5811
|
|
4
4
|
tinybird/connectors.py,sha256=7Gjms7b5MAaBFGi3xytsJurCylprONpFcYrzp4Fw2Rc,15241
|
|
5
|
-
tinybird/context.py,sha256=
|
|
5
|
+
tinybird/context.py,sha256=VaMhyHruH-uyMypPDfxtuo4scS18b7rxCCdeUVm6ysg,1301
|
|
6
6
|
tinybird/datatypes.py,sha256=XNypumfqNjsvLJ5iNXnbVHRvAJe0aQwI3lS6Cxox-e0,10979
|
|
7
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=LQfE0ruY9A7z1iqtt6xTkW-1NlHbXl7LbKqzfdOsPxA,30612
|
|
10
10
|
tinybird/sql.py,sha256=LBi74GxhNAYTb6m2-KNGpAkguSKh7rcvBbERbE7nalA,46195
|
|
11
|
-
tinybird/sql_template.py,sha256=
|
|
11
|
+
tinybird/sql_template.py,sha256=zUK-fsrvKISNsTquEFL40iD6-fMoL0RF3vxHn4PZYvw,93500
|
|
12
12
|
tinybird/sql_template_fmt.py,sha256=KUHdj5rYCYm_rKKdXYSJAE9vIyXUQLB0YSZnUXHeBlY,10196
|
|
13
|
-
tinybird/sql_toolset.py,sha256=
|
|
13
|
+
tinybird/sql_toolset.py,sha256=32SNvxRFKQYWTvYPMJ_u3ukcd1hKZyEqx8T2cv2412w,14697
|
|
14
14
|
tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
|
|
15
|
-
tinybird/tornado_template.py,sha256=
|
|
15
|
+
tinybird/tornado_template.py,sha256=fUKIFrZLe0WyMFmV-mkjIdCSeFcZMBL3Uet4eHcids0,41960
|
|
16
16
|
tinybird/ch_utils/constants.py,sha256=aYvg2C_WxYWsnqPdZB1ZFoIr8ZY-XjUXYyHKE9Ansj0,3890
|
|
17
|
-
tinybird/ch_utils/engine.py,sha256=
|
|
18
|
-
tinybird/tb/__cli__.py,sha256=
|
|
17
|
+
tinybird/ch_utils/engine.py,sha256=AUAww-KjGOZg9h0IBlKA3FeacJYB4rOtqcTGJhFM-g8,40392
|
|
18
|
+
tinybird/tb/__cli__.py,sha256=53NC2V-YpRXEwQyuGwM0-hJrMfoKVMQVHdHn44o-QYI,251
|
|
19
19
|
tinybird/tb/cli.py,sha256=FD1pfbzu9YHJHEG6Vtn_EwPLTYhwqw-I6AxXeTaRHU8,926
|
|
20
|
-
tinybird/tb/modules/auth.py,sha256=
|
|
21
|
-
tinybird/tb/modules/build.py,sha256=
|
|
20
|
+
tinybird/tb/modules/auth.py,sha256=vBA-KsrjAp77kFunGSM-4o7AFdfO7ac4dnrHKrx0alI,9020
|
|
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=
|
|
24
|
-
tinybird/tb/modules/common.py,sha256=
|
|
23
|
+
tinybird/tb/modules/cli.py,sha256=MJ4N0BUW6yhlo3zGf_N_qqBQWPyCD-aMrkI7u7azHW4,16125
|
|
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=
|
|
29
|
-
tinybird/tb/modules/deployment.py,sha256=
|
|
30
|
-
tinybird/tb/modules/endpoint.py,sha256=
|
|
28
|
+
tinybird/tb/modules/datasource.py,sha256=aOvjTVH9EdGNAw_lqhtZdJQhYnMOTGIqD3Pe4GtakFw,16905
|
|
29
|
+
tinybird/tb/modules/deployment.py,sha256=qGkFwPR1TGtcbqUcKkhsfzK--sNzXo6JV8Ny8HrlSfo,16873
|
|
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
|
|
33
|
-
tinybird/tb/modules/fmt.py,sha256=
|
|
33
|
+
tinybird/tb/modules/fmt.py,sha256=j6W0X_h88oxfFppakJgZ8ubAUwwrCGsfVjKw4gg8e5s,3551
|
|
34
34
|
tinybird/tb/modules/job.py,sha256=956Pj8BEEsiD2GZsV9RKKVM3I_CveOLgS82lykO5ukk,2963
|
|
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
38
|
tinybird/tb/modules/local_common.py,sha256=W1fEnB1vBQ4YC5U1PdA0w0g3cTV78bQ5R-lRxdDj5-Y,2868
|
|
39
39
|
tinybird/tb/modules/login.py,sha256=EGxwVRmMX1Y7ZeCRyA8fqaCWpYYk7NvnZ3x_1g0NlYA,6063
|
|
40
|
-
tinybird/tb/modules/materialization.py,sha256=
|
|
41
|
-
tinybird/tb/modules/mock.py,sha256=
|
|
42
|
-
tinybird/tb/modules/pipe.py,sha256=
|
|
43
|
-
tinybird/tb/modules/project.py,sha256=
|
|
40
|
+
tinybird/tb/modules/materialization.py,sha256=dESybok66Fn7XLzQQr-fBCDNf5xQL8wkRiD2QBr5lOg,5748
|
|
41
|
+
tinybird/tb/modules/mock.py,sha256=7alBqLfQLb7JSZJth9JDXGUOvABWXr8Gx23edgyrW8w,3869
|
|
42
|
+
tinybird/tb/modules/pipe.py,sha256=PbCM31q9lVB9xPWvPBhlpW53MGFGvzVv81trxC06kDY,2428
|
|
43
|
+
tinybird/tb/modules/project.py,sha256=QdOG65Hcc6r_eQ938CfZeIXyp38RkiTYNPupgqy2gP0,2948
|
|
44
44
|
tinybird/tb/modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
|
|
45
|
-
tinybird/tb/modules/shell.py,sha256=
|
|
45
|
+
tinybird/tb/modules/shell.py,sha256=qWpZ9TwDSDq3YsBxueNtezsslp3N7pwUPRF8HIlTjOo,13828
|
|
46
46
|
tinybird/tb/modules/table.py,sha256=4XrtjM-N0zfNtxVkbvLDQQazno1EPXnxTyo7llivfXk,11035
|
|
47
47
|
tinybird/tb/modules/tag.py,sha256=anPmMUBc-TbFovlpFi8GPkKA18y7Y0GczMsMms5TZsU,3502
|
|
48
48
|
tinybird/tb/modules/telemetry.py,sha256=iEGnMuCuNhvF6ln__j6X9MSTwL_0Hm-GgFHHHvhfknk,10466
|
|
49
|
-
tinybird/tb/modules/test.py,sha256=
|
|
50
|
-
tinybird/tb/modules/token.py,sha256=
|
|
51
|
-
tinybird/tb/modules/watch.py,sha256=
|
|
52
|
-
tinybird/tb/modules/workspace.py,sha256=
|
|
53
|
-
tinybird/tb/modules/workspace_members.py,sha256=
|
|
49
|
+
tinybird/tb/modules/test.py,sha256=tY7_FJRSL6EdztypWlvDJi5QpXDLS5dpO0i_dpGuzkI,11528
|
|
50
|
+
tinybird/tb/modules/token.py,sha256=WEB2xqRgOierJ_S7TrZLEpLpQ9mkXcYLH2-xipjoGDc,12814
|
|
51
|
+
tinybird/tb/modules/watch.py,sha256=IIahyfmVNNu_EY2dVKZ_zjdSEFocwsmpvvgki4EmU-w,4961
|
|
52
|
+
tinybird/tb/modules/workspace.py,sha256=7gOgt10j9emleqQ43BA6jU0CZjJxw7L5gDZhCxGafI4,6400
|
|
53
|
+
tinybird/tb/modules/workspace_members.py,sha256=Vb5XEaKmkfONyfg2MS5EcpwolMvv7GLwFS5m2EuobT8,8726
|
|
54
54
|
tinybird/tb/modules/datafile/build.py,sha256=seGFSvmgyRrAM1-icsKBkuog3WccfGUYFTPT-xoA5W8,50940
|
|
55
|
-
tinybird/tb/modules/datafile/build_common.py,sha256=
|
|
56
|
-
tinybird/tb/modules/datafile/build_datasource.py,sha256=
|
|
55
|
+
tinybird/tb/modules/datafile/build_common.py,sha256=rT7VJ5mnQ68R_8US91DAtkusfvjWuG_NObOzNgtN_ko,4562
|
|
56
|
+
tinybird/tb/modules/datafile/build_datasource.py,sha256=VjxaKKLZhPYt3XHOyMmfoqEAWAPI5D78T-8FOaN77MY,17355
|
|
57
57
|
tinybird/tb/modules/datafile/build_pipe.py,sha256=Jgv3YKIvMfjPiSIdw1k2mpaoDdAWMiMRaSHwRgyI97E,28258
|
|
58
|
-
tinybird/tb/modules/datafile/common.py,sha256=
|
|
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=
|
|
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
|
|
65
65
|
tinybird/tb/modules/datafile/parse_datasource.py,sha256=kk35PzesoJOd0LKjYp4kOyCwq4Qo4TiZnoI9qcXjB4k,1519
|
|
66
66
|
tinybird/tb/modules/datafile/parse_pipe.py,sha256=snoy8Ac_Sat7LIXLAKzxjJSl2-TKg9FaZTooxrx6muE,3420
|
|
67
|
-
tinybird/tb/modules/datafile/pipe_checker.py,sha256=
|
|
67
|
+
tinybird/tb/modules/datafile/pipe_checker.py,sha256=LnDLGIHLJ3N7qHb2ptEbPr8CoczNfGwpjOY8EMdxfHQ,24649
|
|
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=
|
|
72
|
+
tinybird/tb_cli_modules/common.py,sha256=NpR56fwwj6u--gLdTIZodvMe4LsWAtnphX-kw4hoKGs,78726
|
|
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.
|
|
78
|
-
tinybird-0.0.1.
|
|
79
|
-
tinybird-0.0.1.
|
|
80
|
-
tinybird-0.0.1.
|
|
81
|
-
tinybird-0.0.1.
|
|
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,,
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: tinybird
|
|
3
|
-
Version: 0.0.1.dev68
|
|
4
|
-
Summary: Tinybird Command Line Tool
|
|
5
|
-
Home-page: https://www.tinybird.co/docs/cli/introduction.html
|
|
6
|
-
Author: Tinybird
|
|
7
|
-
Author-email: support@tinybird.co
|
|
8
|
-
Requires-Python: >=3.9, <3.13
|
|
9
|
-
Description-Content-Type: text/x-rst
|
|
10
|
-
Requires-Dist: aiofiles (==24.1.0)
|
|
11
|
-
Requires-Dist: anthropic (==0.42.0)
|
|
12
|
-
Requires-Dist: click (<8.2,>=8.1.6)
|
|
13
|
-
Requires-Dist: clickhouse-toolset (==0.33.dev0)
|
|
14
|
-
Requires-Dist: colorama (==0.4.6)
|
|
15
|
-
Requires-Dist: cryptography (~=41.0.0)
|
|
16
|
-
Requires-Dist: croniter (==1.3.8)
|
|
17
|
-
Requires-Dist: docker (==7.1.0)
|
|
18
|
-
Requires-Dist: GitPython (~=3.1.32)
|
|
19
|
-
Requires-Dist: humanfriendly (~=8.2)
|
|
20
|
-
Requires-Dist: prompt-toolkit (==3.0.48)
|
|
21
|
-
Requires-Dist: pydantic (~=2.8.0)
|
|
22
|
-
Requires-Dist: pyperclip (==1.8.2)
|
|
23
|
-
Requires-Dist: pyyaml (<6.1,>=6.0)
|
|
24
|
-
Requires-Dist: requests (<3,>=2.28.1)
|
|
25
|
-
Requires-Dist: shandy-sqlfmt (==0.11.1)
|
|
26
|
-
Requires-Dist: shandy-sqlfmt[jinjafmt] (==0.11.1)
|
|
27
|
-
Requires-Dist: toposort (==1.10)
|
|
28
|
-
Requires-Dist: tornado (~=6.0.0)
|
|
29
|
-
Requires-Dist: urllib3 (<2,>=1.26.14)
|
|
30
|
-
Requires-Dist: watchdog (==6.0.0)
|
|
31
|
-
Requires-Dist: wheel
|
|
32
|
-
Requires-Dist: packaging (<24,>=23.1)
|
|
33
|
-
Requires-Dist: llm (>=0.19)
|
|
34
|
-
Requires-Dist: thefuzz (==0.22.1)
|
|
35
|
-
Provides-Extra: bigquery
|
|
36
|
-
Requires-Dist: gsutil (==4.58) ; extra == 'bigquery'
|
|
37
|
-
Requires-Dist: google-api-python-client (==2.0.2) ; extra == 'bigquery'
|
|
38
|
-
Requires-Dist: google-auth (==1.27.1) ; extra == 'bigquery'
|
|
39
|
-
Requires-Dist: google-auth-httplib2 (==0.1.0) ; extra == 'bigquery'
|
|
40
|
-
Requires-Dist: google-cloud-storage (==2.4.0) ; extra == 'bigquery'
|
|
41
|
-
Requires-Dist: google-cloud-bigquery (==2.11.0) ; extra == 'bigquery'
|
|
42
|
-
Provides-Extra: snowflake
|
|
43
|
-
Requires-Dist: snowflake-connector-python (~=3.12.3) ; extra == 'snowflake'
|
|
44
|
-
Requires-Dist: gsutil (==4.58) ; extra == 'snowflake'
|
|
45
|
-
Requires-Dist: google-api-python-client (==2.0.2) ; extra == 'snowflake'
|
|
46
|
-
Requires-Dist: google-auth (==1.27.1) ; extra == 'snowflake'
|
|
47
|
-
Requires-Dist: google-auth-httplib2 (==0.1.0) ; extra == 'snowflake'
|
|
48
|
-
Requires-Dist: google-cloud-storage (==2.4.0) ; extra == 'snowflake'
|
|
49
|
-
Requires-Dist: oauth2client (==3.0.0) ; extra == 'snowflake'
|
|
50
|
-
Requires-Dist: chardet (<4,>=3.0.2) ; extra == 'snowflake'
|
|
51
|
-
Requires-Dist: pyOpenSSL (<20.0.0,>=16.2.0) ; extra == 'snowflake'
|
|
52
|
-
|
|
53
|
-
Tinybird CLI
|
|
54
|
-
=============
|
|
55
|
-
|
|
56
|
-
The Tinybird command-line tool allows you to use all the Tinybird functionality directly from the command line. Additionally, it includes several functions to create and manage data projects easily.
|
|
57
|
-
|
|
58
|
-
Changelog
|
|
59
|
-
----------
|
|
60
|
-
|
|
61
|
-
0.0.1dev1
|
|
62
|
-
***********
|
|
63
|
-
|
|
64
|
-
* Initial release of the Tinybird CLI
|
|
File without changes
|
|
File without changes
|