tinybird 0.0.1.dev302__py3-none-any.whl → 0.0.1.dev304__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/sql_template.py +6 -7
- tinybird/tb/__cli__.py +2 -2
- tinybird/tb/modules/agent/banner.py +15 -15
- tinybird/tb/modules/agent/tools/deploy.py +1 -1
- tinybird/tb/modules/agent/tools/execute_query.py +14 -17
- tinybird/tb/modules/agent/utils.py +37 -46
- tinybird/tb/modules/build_common.py +16 -17
- tinybird/tb/modules/cli.py +3 -4
- tinybird/tb/modules/common.py +9 -10
- tinybird/tb/modules/datafile/build.py +26 -37
- tinybird/tb/modules/datafile/build_datasource.py +21 -25
- tinybird/tb/modules/datafile/format_pipe.py +1 -1
- tinybird/tb/modules/datafile/playground.py +58 -67
- tinybird/tb/modules/datafile/pull.py +2 -3
- tinybird/tb/modules/deployment_common.py +3 -1
- tinybird/tb/modules/infra.py +4 -5
- tinybird/tb/modules/login.py +18 -0
- tinybird/tb/modules/login_common.py +2 -3
- tinybird/tb/modules/telemetry.py +4 -0
- tinybird/tb/modules/tinyunit/tinyunit.py +0 -14
- tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -6
- tinybird/tornado_template.py +4 -5
- {tinybird-0.0.1.dev302.dist-info → tinybird-0.0.1.dev304.dist-info}/METADATA +1 -1
- {tinybird-0.0.1.dev302.dist-info → tinybird-0.0.1.dev304.dist-info}/RECORD +27 -27
- {tinybird-0.0.1.dev302.dist-info → tinybird-0.0.1.dev304.dist-info}/WHEEL +0 -0
- {tinybird-0.0.1.dev302.dist-info → tinybird-0.0.1.dev304.dist-info}/entry_points.txt +0 -0
- {tinybird-0.0.1.dev302.dist-info → tinybird-0.0.1.dev304.dist-info}/top_level.txt +0 -0
tinybird/sql_template.py
CHANGED
|
@@ -384,14 +384,13 @@ def array_type(types):
|
|
|
384
384
|
if isinstance(x, Placeholder):
|
|
385
385
|
if default:
|
|
386
386
|
x = default
|
|
387
|
-
|
|
388
|
-
if _type
|
|
389
|
-
if _type == "String":
|
|
390
|
-
x = ""
|
|
391
|
-
else:
|
|
392
|
-
x = ",".join(map(str, [types[_type](x) for _ in range(2)]))
|
|
393
|
-
else:
|
|
387
|
+
elif _type and _type in types:
|
|
388
|
+
if _type == "String":
|
|
394
389
|
x = ""
|
|
390
|
+
else:
|
|
391
|
+
x = ",".join(map(str, [types[_type](x) for _ in range(2)]))
|
|
392
|
+
else:
|
|
393
|
+
x = ""
|
|
395
394
|
elif x is None:
|
|
396
395
|
x = default
|
|
397
396
|
if x is None:
|
tinybird/tb/__cli__.py
CHANGED
|
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
|
|
|
4
4
|
__url__ = 'https://www.tinybird.co/docs/forward/commands'
|
|
5
5
|
__author__ = 'Tinybird'
|
|
6
6
|
__author_email__ = 'support@tinybird.co'
|
|
7
|
-
__version__ = '0.0.1.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '0.0.1.dev304'
|
|
8
|
+
__revision__ = '9a414a1'
|
|
@@ -54,20 +54,20 @@ def display_banner():
|
|
|
54
54
|
"""Convert RGB values to ANSI escape code"""
|
|
55
55
|
if use_truecolor:
|
|
56
56
|
return f"\033[38;2;{r};{g};{b}m"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
57
|
+
|
|
58
|
+
# Convert to 8-bit color (256 color palette)
|
|
59
|
+
# Simple approximation: map RGB to 216-color cube + grayscale
|
|
60
|
+
if r == g == b:
|
|
61
|
+
# Grayscale
|
|
62
|
+
gray = int(r / 255 * 23) + 232
|
|
63
|
+
return f"\033[38;5;{gray}m"
|
|
64
|
+
|
|
65
|
+
# Color cube (6x6x6)
|
|
66
|
+
r_idx = int(r / 255 * 5)
|
|
67
|
+
g_idx = int(g / 255 * 5)
|
|
68
|
+
b_idx = int(b / 255 * 5)
|
|
69
|
+
color_idx = 16 + (36 * r_idx) + (6 * g_idx) + b_idx
|
|
70
|
+
return f"\033[38;5;{color_idx}m"
|
|
71
71
|
|
|
72
72
|
# Define solid color (corresponding to #27f795)
|
|
73
73
|
solid_color = [39, 247, 149] # #27f795 in RGB
|
|
@@ -84,4 +84,4 @@ def display_banner():
|
|
|
84
84
|
colored_line += f"{color_code}{char}"
|
|
85
85
|
|
|
86
86
|
click.echo(colored_line + reset)
|
|
87
|
-
click.echo()
|
|
87
|
+
click.echo("")
|
|
@@ -24,7 +24,7 @@ def deploy(ctx: RunContext[TinybirdAgentContext], allow_destructive_operations:
|
|
|
24
24
|
FeedbackManager.warning(message="Destructive operations flag is enabled due to a file deleted recently")
|
|
25
25
|
)
|
|
26
26
|
|
|
27
|
-
click.echo()
|
|
27
|
+
click.echo("")
|
|
28
28
|
confirmation = show_confirmation(
|
|
29
29
|
title="Deploy the project?",
|
|
30
30
|
skip_confirmation=False,
|
|
@@ -121,27 +121,24 @@ def execute_query(
|
|
|
121
121
|
bytes_read = humanfriendly.format_size(stats["bytes_read"])
|
|
122
122
|
|
|
123
123
|
click.echo(FeedbackManager.info_query_stats(seconds=seconds, rows=rows_read, bytes=bytes_read))
|
|
124
|
-
click.echo()
|
|
124
|
+
click.echo("")
|
|
125
125
|
|
|
126
126
|
if not result["data"]:
|
|
127
127
|
click.echo(FeedbackManager.info_no_rows())
|
|
128
|
+
elif script:
|
|
129
|
+
try:
|
|
130
|
+
# Execute the LLM-generated plotext script
|
|
131
|
+
chart_output = _execute_plotext_script(script, result["data"], result["meta"])
|
|
132
|
+
click.echo(chart_output)
|
|
133
|
+
except Exception as script_error:
|
|
134
|
+
click.echo(FeedbackManager.error(message=f"There was an error rendering the chart.\n{script_error}"))
|
|
135
|
+
ctx.deps.thinking_animation.start()
|
|
136
|
+
return f"After executing the query: {query}, there was an error rendering the chart: {script_error}. Fix the script and render the chart again."
|
|
128
137
|
else:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
click.echo(chart_output)
|
|
134
|
-
except Exception as script_error:
|
|
135
|
-
click.echo(
|
|
136
|
-
FeedbackManager.error(message=f"There was an error rendering the chart.\n{script_error}")
|
|
137
|
-
)
|
|
138
|
-
ctx.deps.thinking_animation.start()
|
|
139
|
-
return f"After executing the query: {query}, there was an error rendering the chart: {script_error}. Fix the script and render the chart again."
|
|
140
|
-
else:
|
|
141
|
-
echo_safe_humanfriendly_tables_format_pretty_table(
|
|
142
|
-
data=[d.values() for d in result["data"]], column_names=result["data"][0].keys()
|
|
143
|
-
)
|
|
144
|
-
click.echo("Showing first 10 results\n")
|
|
138
|
+
echo_safe_humanfriendly_tables_format_pretty_table(
|
|
139
|
+
data=[d.values() for d in result["data"]], column_names=result["data"][0].keys()
|
|
140
|
+
)
|
|
141
|
+
click.echo("Showing first 10 results\n")
|
|
145
142
|
|
|
146
143
|
ctx.deps.thinking_animation.start()
|
|
147
144
|
display_format = "chart" if script else "table"
|
|
@@ -580,59 +580,50 @@ def create_terminal_box(content: str, new_content: Optional[str] = None, title:
|
|
|
580
580
|
else:
|
|
581
581
|
line_num_str = f"{line_num:>4}"
|
|
582
582
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
if diff_marker == "-":
|
|
586
|
-
# Fill the entire content area with red background
|
|
587
|
-
content_with_bg = f"{Back.RED}{diff_marker} {content}{Style.RESET_ALL}"
|
|
588
|
-
# Calculate padding needed for the content area
|
|
589
|
-
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
590
|
-
content_padding = content_area_width - len(f"{diff_marker} {content}")
|
|
591
|
-
if content_padding > 0:
|
|
592
|
-
content_with_bg = (
|
|
593
|
-
f"{Back.RED}{diff_marker} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
594
|
-
)
|
|
595
|
-
line = f"{vertical} {line_num_str} {content_with_bg}"
|
|
596
|
-
elif diff_marker == "+":
|
|
597
|
-
# Fill the entire content area with green background
|
|
598
|
-
content_with_bg = f"{Back.GREEN}{diff_marker} {content}{Style.RESET_ALL}"
|
|
599
|
-
# Calculate padding needed for the content area
|
|
600
|
-
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
601
|
-
content_padding = content_area_width - len(f"{diff_marker} {content}")
|
|
602
|
-
if content_padding > 0:
|
|
603
|
-
content_with_bg = (
|
|
604
|
-
f"{Back.GREEN}{diff_marker} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
605
|
-
)
|
|
606
|
-
line = f"{vertical} {line_num_str} {content_with_bg}"
|
|
607
|
-
else:
|
|
608
|
-
line = f"{vertical} {line_num:>4} {diff_marker} {content}"
|
|
609
|
-
else:
|
|
610
|
-
line = f"{vertical} {line_num_str} {content}"
|
|
611
|
-
else:
|
|
612
|
-
# Continuation line without number - fill background starting from where symbol would be
|
|
613
|
-
if diff_marker and COLORAMA_AVAILABLE:
|
|
583
|
+
if diff_marker:
|
|
584
|
+
if COLORAMA_AVAILABLE:
|
|
614
585
|
if diff_marker == "-":
|
|
615
|
-
#
|
|
586
|
+
# Fill the entire content area with red background
|
|
587
|
+
content_with_bg = f"{Back.RED}{diff_marker} {content}{Style.RESET_ALL}"
|
|
588
|
+
# Calculate padding needed for the content area
|
|
616
589
|
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
617
|
-
content_padding = content_area_width - len(
|
|
618
|
-
content
|
|
619
|
-
) # Don't subtract spaces, they're in the background
|
|
590
|
+
content_padding = content_area_width - len(f"{diff_marker} {content}")
|
|
620
591
|
if content_padding > 0:
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
line = f"{vertical} {Back.RED} {content}{Style.RESET_ALL}"
|
|
592
|
+
content_with_bg = f"{Back.RED}{diff_marker} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
593
|
+
line = f"{vertical} {line_num_str} {content_with_bg}"
|
|
624
594
|
elif diff_marker == "+":
|
|
625
|
-
#
|
|
595
|
+
# Fill the entire content area with green background
|
|
596
|
+
content_with_bg = f"{Back.GREEN}{diff_marker} {content}{Style.RESET_ALL}"
|
|
597
|
+
# Calculate padding needed for the content area
|
|
626
598
|
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
627
|
-
content_padding = content_area_width - len(
|
|
628
|
-
content
|
|
629
|
-
) # Don't subtract spaces, they're in the background
|
|
599
|
+
content_padding = content_area_width - len(f"{diff_marker} {content}")
|
|
630
600
|
if content_padding > 0:
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
601
|
+
content_with_bg = (
|
|
602
|
+
f"{Back.GREEN}{diff_marker} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
603
|
+
)
|
|
604
|
+
line = f"{vertical} {line_num_str} {content_with_bg}"
|
|
634
605
|
else:
|
|
635
|
-
line = f"{vertical}
|
|
606
|
+
line = f"{vertical} {line_num:>4} {diff_marker} {content}"
|
|
607
|
+
elif diff_marker and COLORAMA_AVAILABLE:
|
|
608
|
+
# Continuation line without number - fill background starting from where symbol would be
|
|
609
|
+
if diff_marker == "-":
|
|
610
|
+
# Calculate how much space we need to fill with background
|
|
611
|
+
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
612
|
+
content_padding = content_area_width - len(content) # Don't subtract spaces, they're in the background
|
|
613
|
+
if content_padding > 0:
|
|
614
|
+
line = f"{vertical} {Back.RED} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
615
|
+
else:
|
|
616
|
+
line = f"{vertical} {Back.RED} {content}{Style.RESET_ALL}"
|
|
617
|
+
elif diff_marker == "+":
|
|
618
|
+
# Calculate how much space we need to fill with background
|
|
619
|
+
content_area_width = available_width - 9 # 9 is reduced prefix length
|
|
620
|
+
content_padding = content_area_width - len(content) # Don't subtract spaces, they're in the background
|
|
621
|
+
if content_padding > 0:
|
|
622
|
+
line = f"{vertical} {Back.GREEN} {content}{' ' * content_padding}{Style.RESET_ALL}"
|
|
623
|
+
else:
|
|
624
|
+
line = f"{vertical} {Back.GREEN} {content}{Style.RESET_ALL}"
|
|
625
|
+
else:
|
|
626
|
+
line = f"{vertical} {content}"
|
|
636
627
|
|
|
637
628
|
# Pad to terminal width
|
|
638
629
|
# Need to account for ANSI escape sequences not taking visual space
|
|
@@ -102,12 +102,12 @@ def process(
|
|
|
102
102
|
build_status.error = build_error
|
|
103
103
|
build_status.building = False
|
|
104
104
|
return build_error
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
105
|
+
|
|
106
|
+
if not silent:
|
|
107
|
+
if build_result == False: # noqa: E712
|
|
108
|
+
click.echo(FeedbackManager.info(message="No changes. Build skipped."))
|
|
109
|
+
else:
|
|
110
|
+
click.echo(FeedbackManager.success(message=f"\n✓ {rebuild_str} completed in {elapsed_time:.1f}s"))
|
|
111
111
|
|
|
112
112
|
return None
|
|
113
113
|
|
|
@@ -280,17 +280,16 @@ def build_project(
|
|
|
280
280
|
)
|
|
281
281
|
if no_changes:
|
|
282
282
|
return False
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
echo_changes(project, deleted_connections, ".connection", "deleted")
|
|
283
|
+
if not silent:
|
|
284
|
+
echo_changes(project, new_datasources, ".datasource", "created")
|
|
285
|
+
echo_changes(project, changed_datasources, ".datasource", "changed")
|
|
286
|
+
echo_changes(project, deleted_datasources, ".datasource", "deleted")
|
|
287
|
+
echo_changes(project, new_pipes, ".pipe", "created")
|
|
288
|
+
echo_changes(project, changed_pipes, ".pipe", "changed")
|
|
289
|
+
echo_changes(project, deleted_pipes, ".pipe", "deleted")
|
|
290
|
+
echo_changes(project, new_connections, ".connection", "created")
|
|
291
|
+
echo_changes(project, changed_connections, ".connection", "changed")
|
|
292
|
+
echo_changes(project, deleted_connections, ".connection", "deleted")
|
|
294
293
|
if load_fixtures:
|
|
295
294
|
try:
|
|
296
295
|
for filename in project_files:
|
tinybird/tb/modules/cli.py
CHANGED
|
@@ -116,11 +116,10 @@ def cli(
|
|
|
116
116
|
# We need to unpatch for our tests not to break
|
|
117
117
|
if output != "human":
|
|
118
118
|
__hide_click_output()
|
|
119
|
+
elif show_tokens or not cloud or ctx.invoked_subcommand == "build":
|
|
120
|
+
__unpatch_click_output()
|
|
119
121
|
else:
|
|
120
|
-
|
|
121
|
-
__unpatch_click_output()
|
|
122
|
-
else:
|
|
123
|
-
__patch_click_output()
|
|
122
|
+
__patch_click_output()
|
|
124
123
|
|
|
125
124
|
if getenv_bool("TB_DISABLE_SSL_CHECKS", False):
|
|
126
125
|
click.echo(FeedbackManager.warning_disabled_ssl_checks())
|
tinybird/tb/modules/common.py
CHANGED
|
@@ -2197,18 +2197,17 @@ def ask_for_organization(
|
|
|
2197
2197
|
user_token = get_user_token(config, user_token)
|
|
2198
2198
|
organization = create_organization_and_add_workspaces(config, organization_name, user_token)
|
|
2199
2199
|
organization_id = organization.get("id")
|
|
2200
|
+
elif len(organizations) == 1:
|
|
2201
|
+
organization_name = organizations[0]["name"]
|
|
2202
|
+
organization_id = organizations[0]["id"]
|
|
2200
2203
|
else:
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
+
sorted_organizations = sort_organizations_by_user(organizations, user_email=user_email)
|
|
2205
|
+
current_organization = ask_for_organization_interactively(sorted_organizations)
|
|
2206
|
+
if current_organization:
|
|
2207
|
+
organization_id = current_organization.get("id")
|
|
2208
|
+
organization_name = current_organization.get("name")
|
|
2204
2209
|
else:
|
|
2205
|
-
|
|
2206
|
-
current_organization = ask_for_organization_interactively(sorted_organizations)
|
|
2207
|
-
if current_organization:
|
|
2208
|
-
organization_id = current_organization.get("id")
|
|
2209
|
-
organization_name = current_organization.get("name")
|
|
2210
|
-
else:
|
|
2211
|
-
return None, None
|
|
2210
|
+
return None, None
|
|
2212
2211
|
return organization_id, organization_name
|
|
2213
2212
|
|
|
2214
2213
|
|
|
@@ -128,41 +128,33 @@ def folder_build(
|
|
|
128
128
|
filename = to_run[name]["filename"]
|
|
129
129
|
filename = filename.replace(f"{folder}/", "")
|
|
130
130
|
click.echo(FeedbackManager.info(message=f"✓ {filename}"))
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
name=name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}"
|
|
136
|
-
)
|
|
131
|
+
elif raise_on_exists:
|
|
132
|
+
raise AlreadyExistsException(
|
|
133
|
+
FeedbackManager.warning_name_already_exists(
|
|
134
|
+
name=name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}"
|
|
137
135
|
)
|
|
136
|
+
)
|
|
137
|
+
elif name_matches_existing_resource(resource, name, tb_client):
|
|
138
|
+
if resource == "pipes":
|
|
139
|
+
click.echo(FeedbackManager.error_pipe_cannot_be_pushed(name=name))
|
|
138
140
|
else:
|
|
139
|
-
|
|
140
|
-
if resource == "pipes":
|
|
141
|
-
click.echo(FeedbackManager.error_pipe_cannot_be_pushed(name=name))
|
|
142
|
-
else:
|
|
143
|
-
click.echo(FeedbackManager.error_datasource_cannot_be_pushed(name=name))
|
|
144
|
-
else:
|
|
145
|
-
click.echo(
|
|
146
|
-
FeedbackManager.warning_name_already_exists(
|
|
147
|
-
name=(
|
|
148
|
-
name
|
|
149
|
-
if to_run[name]["version"] is None
|
|
150
|
-
else f"{name}__v{to_run[name]['version']}"
|
|
151
|
-
)
|
|
152
|
-
)
|
|
153
|
-
)
|
|
154
|
-
else:
|
|
155
|
-
if should_push_file(name, remote_resource_names, force, run_tests):
|
|
156
|
-
extension = "pipe" if resource == "pipes" else "datasource"
|
|
157
|
-
click.echo(FeedbackManager.info_building_resource(name=f"{name}.{extension}", version=""))
|
|
141
|
+
click.echo(FeedbackManager.error_datasource_cannot_be_pushed(name=name))
|
|
158
142
|
else:
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
143
|
+
click.echo(
|
|
144
|
+
FeedbackManager.warning_name_already_exists(
|
|
145
|
+
name=(name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}")
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
elif should_push_file(name, remote_resource_names, force, run_tests):
|
|
149
|
+
extension = "pipe" if resource == "pipes" else "datasource"
|
|
150
|
+
click.echo(FeedbackManager.info_building_resource(name=f"{name}.{extension}", version=""))
|
|
151
|
+
elif name_matches_existing_resource(resource, name, tb_client):
|
|
152
|
+
if resource == "pipes":
|
|
153
|
+
click.echo(FeedbackManager.warning_pipe_cannot_be_pushed(name=name))
|
|
154
|
+
else:
|
|
155
|
+
click.echo(FeedbackManager.warning_datasource_cannot_be_pushed(name=name))
|
|
156
|
+
else:
|
|
157
|
+
click.echo(FeedbackManager.warning_dry_name_already_exists(name=name))
|
|
166
158
|
|
|
167
159
|
def push_files(
|
|
168
160
|
dependency_graph: GraphDependencies,
|
|
@@ -932,11 +924,8 @@ def process_file(
|
|
|
932
924
|
raise click.ClickException(FeedbackManager.error_missing_table_arn(datasource=datasource["name"]))
|
|
933
925
|
if not params.get("import_export_bucket", None):
|
|
934
926
|
raise click.ClickException(FeedbackManager.error_missing_export_bucket(datasource=datasource["name"]))
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
raise click.ClickException(
|
|
938
|
-
FeedbackManager.error_missing_external_datasource(datasource=datasource["name"])
|
|
939
|
-
)
|
|
927
|
+
elif not params.get("import_external_datasource", None):
|
|
928
|
+
raise click.ClickException(FeedbackManager.error_missing_external_datasource(datasource=datasource["name"]))
|
|
940
929
|
|
|
941
930
|
return params
|
|
942
931
|
|
|
@@ -301,32 +301,28 @@ def new_ds(
|
|
|
301
301
|
if alter_response and make_changes:
|
|
302
302
|
# alter operation finished
|
|
303
303
|
pass
|
|
304
|
+
elif (
|
|
305
|
+
os.getenv("TB_I_KNOW_WHAT_I_AM_DOING")
|
|
306
|
+
and click.prompt(FeedbackManager.info_ask_for_datasource_confirmation()) == ds_name
|
|
307
|
+
): # TODO move to CLI
|
|
308
|
+
try:
|
|
309
|
+
client.datasource_delete(ds_name)
|
|
310
|
+
click.echo(FeedbackManager.success_delete_datasource(datasource=ds_name))
|
|
311
|
+
except Exception:
|
|
312
|
+
raise click.ClickException(FeedbackManager.error_removing_datasource(datasource=ds_name))
|
|
313
|
+
return
|
|
314
|
+
elif alter_error_message:
|
|
315
|
+
raise click.ClickException(
|
|
316
|
+
FeedbackManager.error_datasource_already_exists_and_alter_failed(
|
|
317
|
+
datasource=ds_name, alter_error_message=alter_error_message
|
|
318
|
+
)
|
|
319
|
+
)
|
|
320
|
+
elif promote_error_message:
|
|
321
|
+
raise click.ClickException(
|
|
322
|
+
FeedbackManager.error_promoting_datasource(datasource=ds_name, error=promote_error_message)
|
|
323
|
+
)
|
|
304
324
|
else:
|
|
305
|
-
|
|
306
|
-
# removed and all the references needs to be updated
|
|
307
|
-
if (
|
|
308
|
-
os.getenv("TB_I_KNOW_WHAT_I_AM_DOING")
|
|
309
|
-
and click.prompt(FeedbackManager.info_ask_for_datasource_confirmation()) == ds_name
|
|
310
|
-
): # TODO move to CLI
|
|
311
|
-
try:
|
|
312
|
-
client.datasource_delete(ds_name)
|
|
313
|
-
click.echo(FeedbackManager.success_delete_datasource(datasource=ds_name))
|
|
314
|
-
except Exception:
|
|
315
|
-
raise click.ClickException(FeedbackManager.error_removing_datasource(datasource=ds_name))
|
|
316
|
-
return
|
|
317
|
-
else:
|
|
318
|
-
if alter_error_message:
|
|
319
|
-
raise click.ClickException(
|
|
320
|
-
FeedbackManager.error_datasource_already_exists_and_alter_failed(
|
|
321
|
-
datasource=ds_name, alter_error_message=alter_error_message
|
|
322
|
-
)
|
|
323
|
-
)
|
|
324
|
-
if promote_error_message:
|
|
325
|
-
raise click.ClickException(
|
|
326
|
-
FeedbackManager.error_promoting_datasource(datasource=ds_name, error=promote_error_message)
|
|
327
|
-
)
|
|
328
|
-
else:
|
|
329
|
-
click.echo(FeedbackManager.warning_datasource_already_exists(datasource=ds_name))
|
|
325
|
+
click.echo(FeedbackManager.warning_datasource_already_exists(datasource=ds_name))
|
|
330
326
|
|
|
331
327
|
|
|
332
328
|
def share_and_unshare_datasource(
|
|
@@ -162,7 +162,7 @@ def format_pipe(
|
|
|
162
162
|
if "." in include_file
|
|
163
163
|
else eval_var(include_file)
|
|
164
164
|
)
|
|
165
|
-
included_pipe = parse_pipe(include_file, skip_eval=skip_eval).datafile
|
|
165
|
+
included_pipe = parse_pipe(str(include_file), skip_eval=skip_eval).datafile
|
|
166
166
|
pipe_nodes = doc.nodes.copy()
|
|
167
167
|
for included_node in included_pipe.nodes.copy():
|
|
168
168
|
unrolled_included_node = next(
|
|
@@ -214,41 +214,34 @@ def folder_playground(
|
|
|
214
214
|
error=e,
|
|
215
215
|
)
|
|
216
216
|
raise click.ClickException(exception)
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
name=name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}"
|
|
222
|
-
)
|
|
217
|
+
elif raise_on_exists:
|
|
218
|
+
raise AlreadyExistsException(
|
|
219
|
+
FeedbackManager.warning_name_already_exists(
|
|
220
|
+
name=name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}"
|
|
223
221
|
)
|
|
222
|
+
)
|
|
223
|
+
elif name_matches_existing_resource(resource, name, tb_client):
|
|
224
|
+
if resource == "pipes":
|
|
225
|
+
click.echo(FeedbackManager.error_pipe_cannot_be_pushed(name=name))
|
|
224
226
|
else:
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
name=(
|
|
234
|
-
name
|
|
235
|
-
if to_run[name]["version"] is None
|
|
236
|
-
else f"{name}__v{to_run[name]['version']}"
|
|
237
|
-
)
|
|
238
|
-
)
|
|
239
|
-
)
|
|
240
|
-
else:
|
|
227
|
+
click.echo(FeedbackManager.error_datasource_cannot_be_pushed(name=name))
|
|
228
|
+
else:
|
|
229
|
+
click.echo(
|
|
230
|
+
FeedbackManager.warning_name_already_exists(
|
|
231
|
+
name=(name if to_run[name]["version"] is None else f"{name}__v{to_run[name]['version']}")
|
|
232
|
+
)
|
|
233
|
+
)
|
|
234
|
+
if dry_run:
|
|
241
235
|
if should_push_file(name, remote_resource_names, force, run_tests):
|
|
242
236
|
extension = "pipe" if resource == "pipes" else "datasource"
|
|
243
237
|
click.echo(FeedbackManager.info_building_resource(name=f"{name}.{extension}", version=""))
|
|
244
|
-
|
|
245
|
-
if
|
|
246
|
-
|
|
247
|
-
click.echo(FeedbackManager.warning_pipe_cannot_be_pushed(name=name))
|
|
248
|
-
else:
|
|
249
|
-
click.echo(FeedbackManager.warning_datasource_cannot_be_pushed(name=name))
|
|
238
|
+
elif name_matches_existing_resource(resource, name, tb_client):
|
|
239
|
+
if resource == "pipes":
|
|
240
|
+
click.echo(FeedbackManager.warning_pipe_cannot_be_pushed(name=name))
|
|
250
241
|
else:
|
|
251
|
-
click.echo(FeedbackManager.
|
|
242
|
+
click.echo(FeedbackManager.warning_datasource_cannot_be_pushed(name=name))
|
|
243
|
+
else:
|
|
244
|
+
click.echo(FeedbackManager.warning_dry_name_already_exists(name=name))
|
|
252
245
|
|
|
253
246
|
def push_files(
|
|
254
247
|
dependency_graph: GraphDependencies,
|
|
@@ -793,44 +786,45 @@ def get_processed(
|
|
|
793
786
|
dir_path=dir_path,
|
|
794
787
|
embedded_datasources=embedded_ds,
|
|
795
788
|
)
|
|
796
|
-
|
|
797
|
-
if verbose:
|
|
798
|
-
click.echo(FeedbackManager.info_processing_file(filename=filename))
|
|
789
|
+
continue
|
|
799
790
|
|
|
800
|
-
|
|
801
|
-
|
|
791
|
+
if verbose:
|
|
792
|
+
click.echo(FeedbackManager.info_processing_file(filename=filename))
|
|
802
793
|
|
|
803
|
-
|
|
804
|
-
|
|
794
|
+
if ".incl" in filename:
|
|
795
|
+
click.echo(FeedbackManager.warning_skipping_include_file(file=filename))
|
|
805
796
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
tb_client=tb_client,
|
|
809
|
-
deps=deps_list,
|
|
810
|
-
dep_map=dep_map_dict,
|
|
811
|
-
to_run=to_run_dict,
|
|
812
|
-
vendor_paths=vendor_paths,
|
|
813
|
-
skip_connectors=skip_connectors,
|
|
814
|
-
current_ws=current_ws,
|
|
815
|
-
changed=changed,
|
|
816
|
-
fork_downstream=fork_downstream,
|
|
817
|
-
is_internal=is_internal,
|
|
818
|
-
dir_path=dir_path,
|
|
819
|
-
verbose=verbose,
|
|
820
|
-
embedded_datasources=embedded_ds,
|
|
821
|
-
)
|
|
822
|
-
processed_set.add(name)
|
|
797
|
+
if tb_client is None:
|
|
798
|
+
raise ValueError("tb_client cannot be None")
|
|
823
799
|
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
800
|
+
name, warnings = process(
|
|
801
|
+
filename=filename,
|
|
802
|
+
tb_client=tb_client,
|
|
803
|
+
deps=deps_list,
|
|
804
|
+
dep_map=dep_map_dict,
|
|
805
|
+
to_run=to_run_dict,
|
|
806
|
+
vendor_paths=vendor_paths,
|
|
807
|
+
skip_connectors=skip_connectors,
|
|
808
|
+
current_ws=current_ws,
|
|
809
|
+
changed=changed,
|
|
810
|
+
fork_downstream=fork_downstream,
|
|
811
|
+
is_internal=is_internal,
|
|
812
|
+
dir_path=dir_path,
|
|
813
|
+
verbose=verbose,
|
|
814
|
+
embedded_datasources=embedded_ds,
|
|
815
|
+
)
|
|
816
|
+
processed_set.add(name)
|
|
817
|
+
|
|
818
|
+
if verbose:
|
|
819
|
+
if len(warnings) == 1:
|
|
820
|
+
click.echo(FeedbackManager.warning_pipe_restricted_param(word=warnings[0]))
|
|
821
|
+
elif len(warnings) > 1:
|
|
822
|
+
click.echo(
|
|
823
|
+
FeedbackManager.warning_pipe_restricted_params(
|
|
824
|
+
words=", ".join(["'{}'".format(param) for param in warnings[:-1]]),
|
|
825
|
+
last_word=warnings[-1],
|
|
833
826
|
)
|
|
827
|
+
)
|
|
834
828
|
|
|
835
829
|
|
|
836
830
|
def build_graph(
|
|
@@ -1082,11 +1076,8 @@ def process_file(
|
|
|
1082
1076
|
raise click.ClickException(FeedbackManager.error_missing_table_arn(datasource=datasource["name"]))
|
|
1083
1077
|
if not params.get("import_export_bucket", None):
|
|
1084
1078
|
raise click.ClickException(FeedbackManager.error_missing_export_bucket(datasource=datasource["name"]))
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
raise click.ClickException(
|
|
1088
|
-
FeedbackManager.error_missing_external_datasource(datasource=datasource["name"])
|
|
1089
|
-
)
|
|
1079
|
+
elif not params.get("import_external_datasource", None):
|
|
1080
|
+
raise click.ClickException(FeedbackManager.error_missing_external_datasource(datasource=datasource["name"]))
|
|
1090
1081
|
|
|
1091
1082
|
return params
|
|
1092
1083
|
|
|
@@ -74,9 +74,8 @@ def folder_pull(
|
|
|
74
74
|
if resource_to_write:
|
|
75
75
|
fd.write(resource_to_write)
|
|
76
76
|
return f
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
click.echo(FeedbackManager.info_skip_already_exists())
|
|
77
|
+
elif verbose:
|
|
78
|
+
click.echo(FeedbackManager.info_skip_already_exists())
|
|
80
79
|
return None
|
|
81
80
|
except Exception as e:
|
|
82
81
|
raise click.ClickException(FeedbackManager.error_exception(error=e))
|
|
@@ -202,7 +202,7 @@ def discard_deployment(host: Optional[str], headers: dict, wait: bool) -> None:
|
|
|
202
202
|
result = api_fetch(TINYBIRD_API_URL, headers)
|
|
203
203
|
|
|
204
204
|
current_deployment = result.get("deployment")
|
|
205
|
-
if current_deployment.get("status") == "deleted":
|
|
205
|
+
if current_deployment and current_deployment.get("status") == "deleted":
|
|
206
206
|
click.echo(FeedbackManager.success(message="Discard process successfully completed"))
|
|
207
207
|
break
|
|
208
208
|
time.sleep(5)
|
|
@@ -352,6 +352,8 @@ def create_deployment(
|
|
|
352
352
|
if not deployment:
|
|
353
353
|
click.echo(FeedbackManager.error(message="Error parsing deployment from response"))
|
|
354
354
|
sys_exit("deployment_error", "Error parsing deployment from response")
|
|
355
|
+
return
|
|
356
|
+
|
|
355
357
|
if deployment.get("status") == "failed":
|
|
356
358
|
click.echo(FeedbackManager.error(message="Deployment failed"))
|
|
357
359
|
deploy_errors = deployment.get("errors")
|
tinybird/tb/modules/infra.py
CHANGED
|
@@ -626,12 +626,11 @@ def infra_init(
|
|
|
626
626
|
else:
|
|
627
627
|
click.echo("Failed to get diff for Kubernetes configuration:")
|
|
628
628
|
click.echo(diff_result.stderr)
|
|
629
|
+
elif diff_result.stdout:
|
|
630
|
+
click.echo("\nChanges that will be applied:")
|
|
631
|
+
click.echo(diff_result.stdout)
|
|
629
632
|
else:
|
|
630
|
-
|
|
631
|
-
click.echo("\nChanges that will be applied:")
|
|
632
|
-
click.echo(diff_result.stdout)
|
|
633
|
-
else:
|
|
634
|
-
click.echo("\nNo changes detected or resources don't exist yet.")
|
|
633
|
+
click.echo("\nNo changes detected or resources don't exist yet.")
|
|
635
634
|
|
|
636
635
|
# Now apply the configuration
|
|
637
636
|
command = f"kubectl --context {selected_context} apply -f {str(yaml_path)}"
|
tinybird/tb/modules/login.py
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import platform
|
|
2
|
+
import sys
|
|
1
3
|
from typing import Optional
|
|
2
4
|
|
|
3
5
|
import click
|
|
4
6
|
|
|
7
|
+
from tinybird.tb.config import CURRENT_VERSION
|
|
5
8
|
from tinybird.tb.modules.cli import cli
|
|
6
9
|
from tinybird.tb.modules.login_common import login
|
|
10
|
+
from tinybird.tb.modules.telemetry import add_telemetry_event
|
|
7
11
|
|
|
8
12
|
|
|
9
13
|
@cli.command("login", help="Authenticate using the browser.")
|
|
@@ -37,3 +41,17 @@ from tinybird.tb.modules.login_common import login
|
|
|
37
41
|
)
|
|
38
42
|
def login_cmd(host: Optional[str], auth_host: str, workspace: str, interactive: bool, method: str):
|
|
39
43
|
login(host, auth_host, workspace, interactive, method)
|
|
44
|
+
# we send a telemetry event manually so we have user and workspace info available
|
|
45
|
+
add_telemetry_event(
|
|
46
|
+
"system_info",
|
|
47
|
+
platform=platform.platform(),
|
|
48
|
+
system=platform.system(),
|
|
49
|
+
arch=platform.machine(),
|
|
50
|
+
processor=platform.processor(),
|
|
51
|
+
python_runtime=platform.python_implementation(),
|
|
52
|
+
python_version=platform.python_version(),
|
|
53
|
+
is_ci=False,
|
|
54
|
+
ci_product=None,
|
|
55
|
+
cli_version=CURRENT_VERSION,
|
|
56
|
+
cli_args=sys.argv[1:] if len(sys.argv) > 1 else [],
|
|
57
|
+
)
|
|
@@ -249,9 +249,8 @@ def open_url(url: str, *, new_tab: bool = False) -> bool:
|
|
|
249
249
|
if new_tab:
|
|
250
250
|
if wb.open_new_tab(url):
|
|
251
251
|
return True
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
return True
|
|
252
|
+
elif wb.open(url):
|
|
253
|
+
return True
|
|
255
254
|
except webbrowser.Error:
|
|
256
255
|
pass # keep going
|
|
257
256
|
|
tinybird/tb/modules/telemetry.py
CHANGED
|
@@ -284,6 +284,10 @@ def add_telemetry_sysinfo_event() -> None:
|
|
|
284
284
|
|
|
285
285
|
cli_args = sys.argv[1:] if len(sys.argv) > 1 else []
|
|
286
286
|
|
|
287
|
+
# we don't track login commands because we track them explicitly
|
|
288
|
+
if "login" in cli_args:
|
|
289
|
+
return
|
|
290
|
+
|
|
287
291
|
is_secret_command = "secret" in cli_args
|
|
288
292
|
if is_secret_command:
|
|
289
293
|
need_to_obfuscate = "set" in cli_args
|
|
@@ -5,7 +5,6 @@ from typing import Any, Dict, Iterable, List, Optional
|
|
|
5
5
|
import click
|
|
6
6
|
import yaml
|
|
7
7
|
from humanfriendly.tables import format_smart_table
|
|
8
|
-
from typing_extensions import override
|
|
9
8
|
|
|
10
9
|
from tinybird.tb.client import TinyB
|
|
11
10
|
from tinybird.tb.modules.common import CLIException
|
|
@@ -118,19 +117,6 @@ class TestResult:
|
|
|
118
117
|
return PASS_OVER_TIME
|
|
119
118
|
return PASS
|
|
120
119
|
|
|
121
|
-
@override
|
|
122
|
-
def __dict__(self):
|
|
123
|
-
return {
|
|
124
|
-
"name": self.name,
|
|
125
|
-
"data": self.data,
|
|
126
|
-
"elapsed_time": self.elapsed_time,
|
|
127
|
-
"read_bytes": self.read_bytes,
|
|
128
|
-
"max_elapsed_time": self.max_elapsed_time,
|
|
129
|
-
"max_bytes_read": self.max_bytes_read,
|
|
130
|
-
"error": self.error,
|
|
131
|
-
"status": self.status.name,
|
|
132
|
-
}
|
|
133
|
-
|
|
134
120
|
|
|
135
121
|
@dataclass()
|
|
136
122
|
class TestSummaryResults:
|
|
@@ -3,8 +3,6 @@ from collections import namedtuple
|
|
|
3
3
|
from json import JSONEncoder
|
|
4
4
|
from typing import Optional
|
|
5
5
|
|
|
6
|
-
from typing_extensions import override
|
|
7
|
-
|
|
8
6
|
|
|
9
7
|
class MyJSONEncoder(JSONEncoder):
|
|
10
8
|
# def default(self, in_obj):
|
|
@@ -56,10 +54,6 @@ class DataUnitTest:
|
|
|
56
54
|
def __str__(self):
|
|
57
55
|
return json.dumps(dict(self), ensure_ascii=False)
|
|
58
56
|
|
|
59
|
-
@override
|
|
60
|
-
def __dict__(self):
|
|
61
|
-
return dict(self)
|
|
62
|
-
|
|
63
57
|
def __repr__(self):
|
|
64
58
|
return self.__str__()
|
|
65
59
|
|
tinybird/tornado_template.py
CHANGED
|
@@ -289,12 +289,11 @@ class Template:
|
|
|
289
289
|
if whitespace is None:
|
|
290
290
|
if loader and loader.whitespace:
|
|
291
291
|
whitespace = loader.whitespace
|
|
292
|
-
|
|
292
|
+
elif name.endswith((".html", ".js")):
|
|
293
293
|
# Whitespace defaults by filename.
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
whitespace = "all"
|
|
294
|
+
whitespace = "single"
|
|
295
|
+
else:
|
|
296
|
+
whitespace = "all"
|
|
298
297
|
# Validate the whitespace setting.
|
|
299
298
|
filter_whitespace(whitespace, "")
|
|
300
299
|
|
|
@@ -6,11 +6,11 @@ tinybird/git_settings.py,sha256=Sw_8rGmribEFJ4Z_6idrVytxpFYk7ez8ei0qHULzs3E,3934
|
|
|
6
6
|
tinybird/prompts.py,sha256=HoDv9TxPiP8v2XoGTWYxP133dK9CEbXVv4XE5IT339c,45483
|
|
7
7
|
tinybird/service_datasources.py,sha256=y36l2QYLxFEYRBEBuYCKtjkPjGu0P2a8Fz_AjOTTNM4,48914
|
|
8
8
|
tinybird/sql.py,sha256=7pkwQMUVy0CH5zFgLMZyCx1BeaJSQYC05EmOb9vO3Ls,48694
|
|
9
|
-
tinybird/sql_template.py,sha256=
|
|
9
|
+
tinybird/sql_template.py,sha256=vOpIAgHoLu3D3aFwywgYHJgRmYxtrxvro8sRwYHX-tk,102415
|
|
10
10
|
tinybird/sql_template_fmt.py,sha256=KUHdj5rYCYm_rKKdXYSJAE9vIyXUQLB0YSZnUXHeBlY,10196
|
|
11
11
|
tinybird/sql_toolset.py,sha256=Y2_fQrbk5GSNoRncAmRS_snpV61XQbiOy4uYkeF6pr4,19767
|
|
12
12
|
tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
|
|
13
|
-
tinybird/tornado_template.py,sha256=
|
|
13
|
+
tinybird/tornado_template.py,sha256=p3V4ERIWPRdtQuqkaL1NVjivaFoVXZgPJUxwVPce4nc,41850
|
|
14
14
|
tinybird/ch_utils/constants.py,sha256=yTNizMzgYNBzUc2EV3moBfdrDIggOe9hiuAgWF7sv2c,4333
|
|
15
15
|
tinybird/ch_utils/engine.py,sha256=4X1B-iuhdW_mxKnX_m3iCsxgP9RPVgR75g7yH1vsJ6A,40851
|
|
16
16
|
tinybird/datafile/common.py,sha256=r-kfUPH1feXjYCJR-7xNNzRrA8RZ8y47KAjMgkzhaZo,105654
|
|
@@ -18,37 +18,37 @@ tinybird/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1w
|
|
|
18
18
|
tinybird/datafile/parse_connection.py,sha256=tRyn2Rpr1TeWet5BXmMoQgaotbGdYep1qiTak_OqC5E,1825
|
|
19
19
|
tinybird/datafile/parse_datasource.py,sha256=ssW8QeFSgglVFi3sDZj_HgkJiTJ2069v2JgqnH3CkDE,1825
|
|
20
20
|
tinybird/datafile/parse_pipe.py,sha256=8e9LMecSQVWHC4AXf8cdxoQ1nxUR4fTObYxTctO_EXQ,3816
|
|
21
|
-
tinybird/tb/__cli__.py,sha256=
|
|
21
|
+
tinybird/tb/__cli__.py,sha256=zKFXL0dY2JM1qGDKRazQWAKaCs3Ex5FQRqD_WLnFa5Q,247
|
|
22
22
|
tinybird/tb/check_pypi.py,sha256=Gp0HkHHDFMSDL6nxKlOY51z7z1Uv-2LRexNTZSHHGmM,552
|
|
23
23
|
tinybird/tb/cli.py,sha256=FdDFEIayjmsZEVsVSSvRiVYn_FHOVg_zWQzchnzfWho,1008
|
|
24
24
|
tinybird/tb/client.py,sha256=Z27O6kXbQ1ZVi_K6qzdUJoS877nt7rqQDRckOycjNmI,53544
|
|
25
25
|
tinybird/tb/config.py,sha256=XIKju3xxpo40oQ48zDtSv0vgUrBZBHSmHJi4SHksjXE,5447
|
|
26
26
|
tinybird/tb/modules/build.py,sha256=q3f_CM-_yt7R24VCmQqe4yat1aPdLqmP_hW5WoqdxBg,7907
|
|
27
|
-
tinybird/tb/modules/build_common.py,sha256=
|
|
27
|
+
tinybird/tb/modules/build_common.py,sha256=zHqnzEdJvEIlzDGEL5HqcUXInuKLqYG6hPCdB6f6PMA,20064
|
|
28
28
|
tinybird/tb/modules/cicd.py,sha256=0KLKccha9IP749QvlXBmzdWv1On3mFwMY4DUcJlBxiE,7326
|
|
29
|
-
tinybird/tb/modules/cli.py,sha256=
|
|
30
|
-
tinybird/tb/modules/common.py,sha256=
|
|
29
|
+
tinybird/tb/modules/cli.py,sha256=dkHnD8oiB7w4YllTDOvmE71BU8wSLDEDvkquKqg4s8Y,20479
|
|
30
|
+
tinybird/tb/modules/common.py,sha256=UkrlPni5jh43w18FOWx3icNbjpAWbB-bgXDWOQPGh3Y,83559
|
|
31
31
|
tinybird/tb/modules/config.py,sha256=gK7rgaWTDd4ZKCrNEg_Uemr26EQjqWt6TjyQKujxOws,11462
|
|
32
32
|
tinybird/tb/modules/connection.py,sha256=axp8Fny1_4PSLJGN4UF6WygyRbQtM3Lbt6thxHKTxzw,17790
|
|
33
33
|
tinybird/tb/modules/copy.py,sha256=dPZkcIDvxjJrlQUIvToO0vsEEEs4EYumbNV77-BzNoU,4404
|
|
34
34
|
tinybird/tb/modules/create.py,sha256=j0WvO6LxuGW1ZOYVuvR1FxFls2oMmKePYNTRJMSXfuU,20135
|
|
35
35
|
tinybird/tb/modules/datasource.py,sha256=O-w4qwhAIitD_SLVdxkpknckliRp_xMswdB8n8Ohxo0,42335
|
|
36
36
|
tinybird/tb/modules/deployment.py,sha256=v0layOmG0IMnuXc3RT39mpGfa5M8yPlrL9F089fJFCo,15964
|
|
37
|
-
tinybird/tb/modules/deployment_common.py,sha256=
|
|
37
|
+
tinybird/tb/modules/deployment_common.py,sha256=5fAXTaK5HhmZts3fkqJ1W9d57I9fD_q3z9uyySePtJI,20453
|
|
38
38
|
tinybird/tb/modules/deprecations.py,sha256=rrszC1f_JJeJ8mUxGoCxckQTJFBCR8wREf4XXXN-PRc,4507
|
|
39
39
|
tinybird/tb/modules/dev_server.py,sha256=57FCKuWpErwYUYgHspYDkLWEm9F4pbvVOtMrFXX1fVU,10129
|
|
40
40
|
tinybird/tb/modules/endpoint.py,sha256=ksRj6mfDb9Xv63PhTkV_uKSosgysHElqagg3RTt21Do,11958
|
|
41
41
|
tinybird/tb/modules/exceptions.py,sha256=_1BHy0OixEkeF0fOCu1_1Pj8pJS4BNfUyucqCViJGTw,5958
|
|
42
42
|
tinybird/tb/modules/feedback_manager.py,sha256=duigLI2UIeMzP5IOa7XUty23NRvNssm2ZAKicuun3Pg,78130
|
|
43
43
|
tinybird/tb/modules/info.py,sha256=UKlazKWSE3bzEtggTwyDhmkh7WRrWURuBraR36ClbmQ,7177
|
|
44
|
-
tinybird/tb/modules/infra.py,sha256=
|
|
44
|
+
tinybird/tb/modules/infra.py,sha256=J9Noe9aZo5Y9ZKAhqh9jnv8azfivXLLHQ2a9TeMWN9s,32673
|
|
45
45
|
tinybird/tb/modules/job.py,sha256=wBsnu8UPTOha2rkLvucgmw4xYv73ubmui3eeSIF68ZM,3107
|
|
46
46
|
tinybird/tb/modules/llm.py,sha256=fPBBCmM3KlCksLlgJkg4joDn6y3H5QjDzE-Pm4YNf7E,1782
|
|
47
47
|
tinybird/tb/modules/llm_utils.py,sha256=nS9r4FAElJw8yXtmdYrx-rtI2zXR8qXfi1QqUDCfxvg,3469
|
|
48
48
|
tinybird/tb/modules/local.py,sha256=cez8ZV7Gt9F1siz54dpgtynEw-il3Y9mNcQgEtOVvmw,6512
|
|
49
49
|
tinybird/tb/modules/local_common.py,sha256=KhALzU0L3AC56vqs3peBe-dqGzw5hWkOg_CfS0skohk,18528
|
|
50
|
-
tinybird/tb/modules/login.py,sha256=
|
|
51
|
-
tinybird/tb/modules/login_common.py,sha256=
|
|
50
|
+
tinybird/tb/modules/login.py,sha256=q2fc0dy5brwofQSNQppipS1aDcyrxHvVjZZbzIA3b4g,1916
|
|
51
|
+
tinybird/tb/modules/login_common.py,sha256=u1Eh1u6L7V3x8qmxVO-LnWDELHWAnXm3bvb7BNjVXF8,11990
|
|
52
52
|
tinybird/tb/modules/logout.py,sha256=sniI4JNxpTrVeRCp0oGJuQ3yRerG4hH5uz6oBmjv724,1009
|
|
53
53
|
tinybird/tb/modules/materialization.py,sha256=8fdbTTxFSk0Sjet3pcEk_x-cs4RGpgl6toN8vrMLXJE,5630
|
|
54
54
|
tinybird/tb/modules/mock.py,sha256=zxSBvB_Bd3dhVnQUvZEhBREg0tqskzu5dQxF1YldOaw,1479
|
|
@@ -62,7 +62,7 @@ tinybird/tb/modules/secret_common.py,sha256=8mEXOdNFrTuVWu7rgZ5-C8v-rB1EAdZQUHIy
|
|
|
62
62
|
tinybird/tb/modules/shell.py,sha256=ExOAY2SwywCc5D6X-WCbl7tAV73bYWcGAan4E6u02vI,13605
|
|
63
63
|
tinybird/tb/modules/sink.py,sha256=dK2s__my0ePIUYrqBzhPSgdWN9rbpvP1G4dT7DJzz80,3865
|
|
64
64
|
tinybird/tb/modules/table.py,sha256=4XrtjM-N0zfNtxVkbvLDQQazno1EPXnxTyo7llivfXk,11035
|
|
65
|
-
tinybird/tb/modules/telemetry.py,sha256=
|
|
65
|
+
tinybird/tb/modules/telemetry.py,sha256=eSpIwy-zwpva7DbAzGCBcBjHi-G6YtgISS9bPK79DZs,11595
|
|
66
66
|
tinybird/tb/modules/test.py,sha256=NcpRCEDA2itnGRrkao8UNYDZlJ4d35N55OfO_UyJR_U,2229
|
|
67
67
|
tinybird/tb/modules/test_common.py,sha256=7iaHMUSxWsXd98IRMkYezcTa-x1uNEUmG1T48wQenKk,11185
|
|
68
68
|
tinybird/tb/modules/token.py,sha256=ZhW_o7XCr90wJRhMN6816vyo_TVfnzPXyIhrhzQ7oZ0,13807
|
|
@@ -72,7 +72,7 @@ tinybird/tb/modules/workspace_members.py,sha256=5JdkJgfuEwbq-t6vxkBhYwgsiTDxF790
|
|
|
72
72
|
tinybird/tb/modules/agent/__init__.py,sha256=i3oe3vDIWWPaicdCM0zs7D7BJ1W0k7th93ooskHAV00,54
|
|
73
73
|
tinybird/tb/modules/agent/agent.py,sha256=_PRCkFgpLCzo-5EdUphLKZ0pG8YMmBfCNFuHdTQKKO8,39057
|
|
74
74
|
tinybird/tb/modules/agent/animations.py,sha256=4WOC5_2BracttmMCrV0H91tXfWcUzQHBUaIJc5FA7tE,3490
|
|
75
|
-
tinybird/tb/modules/agent/banner.py,sha256=
|
|
75
|
+
tinybird/tb/modules/agent/banner.py,sha256=KNdL78nc1wyhgzgji5tHzlSr8Za7GpFhorKL5zLAbuc,3985
|
|
76
76
|
tinybird/tb/modules/agent/command_agent.py,sha256=0Z08rQsir59zQAr-kkOvsKIFpIBsBSTGJJ1VgqqF5WA,3654
|
|
77
77
|
tinybird/tb/modules/agent/compactor.py,sha256=BK5AxZFhrp3xWnsRnYaleiYoIWtVNc-_m650Hsopt8g,13841
|
|
78
78
|
tinybird/tb/modules/agent/explore_agent.py,sha256=QVMPmX6GDW8bh65_X4yXepvAgJmNRQh1S-YwmvGHkjw,4288
|
|
@@ -82,16 +82,16 @@ tinybird/tb/modules/agent/mock_agent.py,sha256=9_w5-MJDC3vp0U5SkM-ucqhxftfpeUM4F
|
|
|
82
82
|
tinybird/tb/modules/agent/models.py,sha256=QSTwxz_-U4_iQxXT_t3uJZRzZmIsuxVrdmV4APsr1ms,2346
|
|
83
83
|
tinybird/tb/modules/agent/prompts.py,sha256=eua-QawthfG5X6Kz1dRzOZSjXU8tj0nr4k7onmvBZnk,45792
|
|
84
84
|
tinybird/tb/modules/agent/testing_agent.py,sha256=AtwtJViH7805i7djyBgDb7SSUtDyJnw0TWJu6lBFsrg,2953
|
|
85
|
-
tinybird/tb/modules/agent/utils.py,sha256=
|
|
85
|
+
tinybird/tb/modules/agent/utils.py,sha256=haIwgVcYNwo_Or2NtQgdbOpZxxGMXkORgqN6x72MkEA,31523
|
|
86
86
|
tinybird/tb/modules/agent/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
87
|
tinybird/tb/modules/agent/tools/analyze.py,sha256=CR5LXg4fou-zYEksqnjpJ0icvxJVoKnTctoI1NRvqCM,3873
|
|
88
88
|
tinybird/tb/modules/agent/tools/append.py,sha256=cF-1XYmgTXI3dfMQ_nEpOKo6duJGe2GOg64rXNnS9gw,8284
|
|
89
89
|
tinybird/tb/modules/agent/tools/build.py,sha256=Hm-xDAP9ckMiKquT-DmDg5H0yxZefLOaWKANyoVSaEQ,846
|
|
90
90
|
tinybird/tb/modules/agent/tools/datafile.py,sha256=kTob7G2TwCwIgwom0rERgXQ13rgPtZv3_ByLnrvpIdU,10881
|
|
91
|
-
tinybird/tb/modules/agent/tools/deploy.py,sha256=
|
|
91
|
+
tinybird/tb/modules/agent/tools/deploy.py,sha256=uIth0nvkCrI-RXrADhWdWV0iGgdoSC-ej3DzJFzNkmk,2029
|
|
92
92
|
tinybird/tb/modules/agent/tools/deploy_check.py,sha256=pE3d9TPtXVKZjYbU0G6ORAGI86lN5K_4JKUriClERbM,1229
|
|
93
93
|
tinybird/tb/modules/agent/tools/diff_resource.py,sha256=_9xHcDzCTKk_E1wKQbuktVqV6U9sA0kqYaBxWvtliX0,2613
|
|
94
|
-
tinybird/tb/modules/agent/tools/execute_query.py,sha256=
|
|
94
|
+
tinybird/tb/modules/agent/tools/execute_query.py,sha256=hd_1wmhhAHpZ3MU5xKSgXwYGBLE0ii7X1LBfgPWTxwI,9033
|
|
95
95
|
tinybird/tb/modules/agent/tools/file.py,sha256=_strhF1bnFFui3pVGUi2dFdcKzMyYzOD59lKeSHqG7o,2855
|
|
96
96
|
tinybird/tb/modules/agent/tools/get_endpoint_stats.py,sha256=r2FrXg1L1s_Llr1tPdJ6k_gu6qw7qLsAXOkbz3eTk1g,2307
|
|
97
97
|
tinybird/tb/modules/agent/tools/get_openapi_definition.py,sha256=4TIMO2XzHBMhpt9zIWRfjjPZbThT8r_iPS4CVHcItE0,2904
|
|
@@ -101,28 +101,28 @@ tinybird/tb/modules/agent/tools/request_endpoint.py,sha256=bsLWrMn-ofJM3nn9vm8j_
|
|
|
101
101
|
tinybird/tb/modules/agent/tools/run_command.py,sha256=B0jyXQW7d0vSBi7abCTlhmEsf6nvwWcVEbRpGatLFBo,2464
|
|
102
102
|
tinybird/tb/modules/agent/tools/secret.py,sha256=8AGTZgHLPg1bxCA2cPMnb-zNutWEwn4emHo7kLjJC5w,4323
|
|
103
103
|
tinybird/tb/modules/agent/tools/test.py,sha256=4XuEWVHLOTSO51Z9xJ08dTjk0j3IWY_JlPtSBO5aaUs,10373
|
|
104
|
-
tinybird/tb/modules/datafile/build.py,sha256=
|
|
104
|
+
tinybird/tb/modules/datafile/build.py,sha256=PAqddZmDbHlfRAx2ySmtHTU8_02V1MtkfjB6M_q4lTI,50641
|
|
105
105
|
tinybird/tb/modules/datafile/build_common.py,sha256=2yNdxe49IMA9wNvl25NemY2Iaz8L66snjOdT64dm1is,4511
|
|
106
|
-
tinybird/tb/modules/datafile/build_datasource.py,sha256
|
|
106
|
+
tinybird/tb/modules/datafile/build_datasource.py,sha256=-ti8bCo8-dzf7b1lzzSGNF88jyo00CotKrou9hP4AWQ,16935
|
|
107
107
|
tinybird/tb/modules/datafile/build_pipe.py,sha256=-mpzYcTEdH313R-FEDYuDOtAbZ5zehynzJwmtsfy16w,11262
|
|
108
108
|
tinybird/tb/modules/datafile/diff.py,sha256=bwVh15E_lio78QDUFQ4ozAEMF7rfUBm2c77JQkL33ZA,6712
|
|
109
109
|
tinybird/tb/modules/datafile/fixture.py,sha256=gftYWeweeQDFK3cHgUmSOfltNjZVOuMt8v7WTMLhGBw,1579
|
|
110
110
|
tinybird/tb/modules/datafile/format_common.py,sha256=5w6GX_8RDFueW9AtDfWpc1OicEu8wWdrjUBdCEidCQk,1951
|
|
111
111
|
tinybird/tb/modules/datafile/format_datasource.py,sha256=X5N65vDpprFKaWaxkSwFnHaNzYIxVhG1Sya4BARTd2Q,6138
|
|
112
|
-
tinybird/tb/modules/datafile/format_pipe.py,sha256=
|
|
112
|
+
tinybird/tb/modules/datafile/format_pipe.py,sha256=fg9odSXV5TkjX64aTPiPNSE8NhdROQa4rdT9-hr9nws,7379
|
|
113
113
|
tinybird/tb/modules/datafile/pipe_checker.py,sha256=dxsCQoA6ruxg1fvF6sMLFowpjaqws8lUQcM7XyhgZPE,24609
|
|
114
|
-
tinybird/tb/modules/datafile/playground.py,sha256
|
|
115
|
-
tinybird/tb/modules/datafile/pull.py,sha256=
|
|
116
|
-
tinybird/tb/modules/tinyunit/tinyunit.py,sha256=
|
|
117
|
-
tinybird/tb/modules/tinyunit/tinyunit_lib.py,sha256=
|
|
114
|
+
tinybird/tb/modules/datafile/playground.py,sha256=-ZvsHeg3c_enX7GNhs-ZyRCQxoBsZb4fUHTEbnG-yLk,55805
|
|
115
|
+
tinybird/tb/modules/datafile/pull.py,sha256=vzJ8_rixPRyuv3x_Ah8v5iHr1cM2LUGrSX54Opg4lGI,5073
|
|
116
|
+
tinybird/tb/modules/tinyunit/tinyunit.py,sha256=TQHcBhZHqhRWVjvB9h-0F_ZgM_Zhwgwy4EGJ61sI1Ao,11259
|
|
117
|
+
tinybird/tb/modules/tinyunit/tinyunit_lib.py,sha256=NHoXcCHPDcKWYLzgP3NViho3Ey-6RV-ynPDzySPrTPE,1817
|
|
118
118
|
tinybird/tb_cli_modules/cicd.py,sha256=0lMkb6CVOFZl5HOwgY8mK4T4mgI7O8335UngLXtCc-c,13851
|
|
119
119
|
tinybird/tb_cli_modules/common.py,sha256=VQQjGmbbKR09TWn1lxd_ip4uykqaBcY6UoXB2MlWvgQ,82985
|
|
120
120
|
tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4ewgA,11546
|
|
121
121
|
tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
|
|
122
122
|
tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
|
|
123
123
|
tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
|
|
124
|
-
tinybird-0.0.1.
|
|
125
|
-
tinybird-0.0.1.
|
|
126
|
-
tinybird-0.0.1.
|
|
127
|
-
tinybird-0.0.1.
|
|
128
|
-
tinybird-0.0.1.
|
|
124
|
+
tinybird-0.0.1.dev304.dist-info/METADATA,sha256=lhsEuveQfvJdP9vvlunpZqBKmKtSyhi4V7cy3xfe8nw,1845
|
|
125
|
+
tinybird-0.0.1.dev304.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
126
|
+
tinybird-0.0.1.dev304.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
|
|
127
|
+
tinybird-0.0.1.dev304.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
|
|
128
|
+
tinybird-0.0.1.dev304.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|