tinybird 0.0.1.dev135__py3-none-any.whl → 0.0.1.dev136__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of tinybird might be problematic. Click here for more details.
- tinybird/tb/__cli__.py +2 -2
- tinybird/tb/modules/common.py +48 -1
- tinybird/tb/modules/connection.py +70 -2
- tinybird/tb/modules/create.py +10 -0
- tinybird/tb/modules/datafile/common.py +20 -6
- tinybird/tb/modules/datasource.py +21 -0
- tinybird/tb/modules/feedback_manager.py +52 -2
- tinybird/tb/modules/materialization.py +6 -0
- {tinybird-0.0.1.dev135.dist-info → tinybird-0.0.1.dev136.dist-info}/METADATA +1 -1
- {tinybird-0.0.1.dev135.dist-info → tinybird-0.0.1.dev136.dist-info}/RECORD +13 -13
- {tinybird-0.0.1.dev135.dist-info → tinybird-0.0.1.dev136.dist-info}/WHEEL +0 -0
- {tinybird-0.0.1.dev135.dist-info → tinybird-0.0.1.dev136.dist-info}/entry_points.txt +0 -0
- {tinybird-0.0.1.dev135.dist-info → tinybird-0.0.1.dev136.dist-info}/top_level.txt +0 -0
tinybird/tb/__cli__.py
CHANGED
|
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
|
|
|
4
4
|
__url__ = 'https://www.tinybird.co/docs/cli/introduction.html'
|
|
5
5
|
__author__ = 'Tinybird'
|
|
6
6
|
__author_email__ = 'support@tinybird.co'
|
|
7
|
-
__version__ = '0.0.1.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '0.0.1.dev136'
|
|
8
|
+
__revision__ = 'c7efbae'
|
tinybird/tb/modules/common.py
CHANGED
|
@@ -1836,6 +1836,31 @@ async def run_aws_iamrole_connection_flow(
|
|
|
1836
1836
|
return role_arn, region, bucket_name
|
|
1837
1837
|
|
|
1838
1838
|
|
|
1839
|
+
async def run_gcp_svc_account_connection_flow(
|
|
1840
|
+
environment: str,
|
|
1841
|
+
) -> Tuple[str, str, str]:
|
|
1842
|
+
bucket_name = click.prompt(
|
|
1843
|
+
"📦 Bucket name (specific name recommended, use '*' for unrestricted access in IAM policy)",
|
|
1844
|
+
prompt_suffix="\n> ",
|
|
1845
|
+
)
|
|
1846
|
+
validate_string_connector_param("Bucket", bucket_name)
|
|
1847
|
+
|
|
1848
|
+
click.echo(FeedbackManager.prompt_gcs_svc_account_login_gcp())
|
|
1849
|
+
click.echo(FeedbackManager.click_enter_to_continue())
|
|
1850
|
+
input()
|
|
1851
|
+
|
|
1852
|
+
# Display message and wait for user to press Enter
|
|
1853
|
+
click.echo(FeedbackManager.prompt_gcs_service_account_creation_flow(environment=environment))
|
|
1854
|
+
click.echo(FeedbackManager.click_enter_to_continue())
|
|
1855
|
+
input()
|
|
1856
|
+
|
|
1857
|
+
click.echo(FeedbackManager.prompt_gcs_service_account_key_creation())
|
|
1858
|
+
click.echo(FeedbackManager.click_enter_to_continue())
|
|
1859
|
+
input()
|
|
1860
|
+
|
|
1861
|
+
return bucket_name
|
|
1862
|
+
|
|
1863
|
+
|
|
1839
1864
|
async def production_aws_iamrole_only(
|
|
1840
1865
|
prod_client: TinyB,
|
|
1841
1866
|
service: str,
|
|
@@ -1916,12 +1941,20 @@ async def get_aws_iamrole_policies(
|
|
|
1916
1941
|
|
|
1917
1942
|
|
|
1918
1943
|
def get_s3_connection_name(project_folder: str) -> str:
|
|
1944
|
+
return get_connection_name(project_folder=project_folder, connection_type="S3")
|
|
1945
|
+
|
|
1946
|
+
|
|
1947
|
+
def get_gcs_connection_name(project_folder) -> str:
|
|
1948
|
+
return get_connection_name(project_folder=project_folder, connection_type="GCS")
|
|
1949
|
+
|
|
1950
|
+
|
|
1951
|
+
def get_connection_name(project_folder: str, connection_type: str) -> str:
|
|
1919
1952
|
connection_name = None
|
|
1920
1953
|
valid_pattern = r"^[a-zA-Z][a-zA-Z0-9_]*$"
|
|
1921
1954
|
|
|
1922
1955
|
while not connection_name:
|
|
1923
1956
|
connection_name = click.prompt(
|
|
1924
|
-
"🔗 Enter a name for your new Tinybird
|
|
1957
|
+
f"🔗 Enter a name for your new Tinybird {connection_type} connection (use alphanumeric characters, and underscores)",
|
|
1925
1958
|
prompt_suffix="\n> ",
|
|
1926
1959
|
show_default=True,
|
|
1927
1960
|
)
|
|
@@ -1947,6 +1980,20 @@ def get_s3_connection_name(project_folder: str) -> str:
|
|
|
1947
1980
|
return connection_name
|
|
1948
1981
|
|
|
1949
1982
|
|
|
1983
|
+
def get_gcs_svc_account_creds() -> str:
|
|
1984
|
+
creds = None
|
|
1985
|
+
|
|
1986
|
+
while not creds:
|
|
1987
|
+
creds = click.edit(
|
|
1988
|
+
"🔗 IMPORTANT: THIS LINE MUST BE DELETED. Enter your GCP credentials (JSON):", extension=".json"
|
|
1989
|
+
)
|
|
1990
|
+
|
|
1991
|
+
assert isinstance(creds, str)
|
|
1992
|
+
creds_without_new_lines = creds.replace("\n", "")
|
|
1993
|
+
|
|
1994
|
+
return creds_without_new_lines
|
|
1995
|
+
|
|
1996
|
+
|
|
1950
1997
|
class DataConnectorType(str, Enum):
|
|
1951
1998
|
KAFKA = "kafka"
|
|
1952
1999
|
GCLOUD_SCHEDULER = "gcscheduler"
|
|
@@ -16,12 +16,19 @@ from tinybird.tb.modules.common import (
|
|
|
16
16
|
_get_setting_value,
|
|
17
17
|
coro,
|
|
18
18
|
echo_safe_humanfriendly_tables_format_smart_table,
|
|
19
|
+
get_gcs_connection_name,
|
|
20
|
+
get_gcs_svc_account_creds,
|
|
19
21
|
get_s3_connection_name,
|
|
20
22
|
production_aws_iamrole_only,
|
|
21
23
|
run_aws_iamrole_connection_flow,
|
|
24
|
+
run_gcp_svc_account_connection_flow,
|
|
25
|
+
)
|
|
26
|
+
from tinybird.tb.modules.create import (
|
|
27
|
+
generate_aws_iamrole_connection_file_with_secret,
|
|
28
|
+
generate_gcs_connection_file_with_secrets,
|
|
22
29
|
)
|
|
23
|
-
from tinybird.tb.modules.create import generate_aws_iamrole_connection_file_with_secret
|
|
24
30
|
from tinybird.tb.modules.feedback_manager import FeedbackManager
|
|
31
|
+
from tinybird.tb.modules.local_common import get_tinybird_local_client
|
|
25
32
|
from tinybird.tb.modules.project import Project
|
|
26
33
|
|
|
27
34
|
DATA_CONNECTOR_SETTINGS: Dict[DataConnectorType, List[str]] = {
|
|
@@ -150,6 +157,7 @@ async def connection_create_s3(ctx: Context) -> None:
|
|
|
150
157
|
project: Project = ctx.ensure_object(dict)["project"]
|
|
151
158
|
obj: Dict[str, Any] = ctx.ensure_object(dict)
|
|
152
159
|
client: TinyB = obj["client"]
|
|
160
|
+
build_client = await get_tinybird_local_client(obj["config"], True)
|
|
153
161
|
|
|
154
162
|
if obj["env"] == "local" and not await client.check_aws_credentials():
|
|
155
163
|
click.echo(
|
|
@@ -172,9 +180,10 @@ async def connection_create_s3(ctx: Context) -> None:
|
|
|
172
180
|
unique_suffix = uuid.uuid4().hex[:8] # Use first 8 chars of a UUID for brevity
|
|
173
181
|
secret_name = f"s3_role_arn_{connection_name}_{unique_suffix}"
|
|
174
182
|
await client.create_secret(name=secret_name, value=role_arn)
|
|
183
|
+
await build_client.create_secret(name=secret_name, value=role_arn)
|
|
175
184
|
|
|
176
185
|
create_in_cloud = (
|
|
177
|
-
click.confirm(FeedbackManager.
|
|
186
|
+
click.confirm(FeedbackManager.prompt_connection_in_cloud_confirmation(), default=True)
|
|
178
187
|
if obj["env"] == "local"
|
|
179
188
|
else False
|
|
180
189
|
)
|
|
@@ -212,3 +221,62 @@ async def connection_create_s3(ctx: Context) -> None:
|
|
|
212
221
|
connection_path=str(connection_file_path),
|
|
213
222
|
)
|
|
214
223
|
)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
@connection_create.command(name="gcs", short_help="Creates a Google Cloud Storage connection.")
|
|
227
|
+
@click.pass_context
|
|
228
|
+
@coro
|
|
229
|
+
async def connection_create_gcs(ctx: Context) -> None:
|
|
230
|
+
"""
|
|
231
|
+
Creates a Google Cloud Storage connection.
|
|
232
|
+
|
|
233
|
+
\b
|
|
234
|
+
$ tb connection create gcs
|
|
235
|
+
"""
|
|
236
|
+
project: Project = ctx.ensure_object(dict)["project"]
|
|
237
|
+
obj: Dict[str, Any] = ctx.ensure_object(dict)
|
|
238
|
+
client: TinyB = obj["client"]
|
|
239
|
+
build_client = await get_tinybird_local_client(obj["config"], True)
|
|
240
|
+
|
|
241
|
+
service = DataConnectorType.GCLOUD_STORAGE
|
|
242
|
+
click.echo(FeedbackManager.prompt_gcs_connection_header())
|
|
243
|
+
connection_name = get_gcs_connection_name(project.folder)
|
|
244
|
+
_ = await run_gcp_svc_account_connection_flow(environment=obj["env"])
|
|
245
|
+
creds_json = get_gcs_svc_account_creds()
|
|
246
|
+
unique_suffix = uuid.uuid4().hex[:8] # Use first 8 chars of a UUID for brevity
|
|
247
|
+
secret_name = f"gcs_svc_account_creds_{connection_name}_{unique_suffix}"
|
|
248
|
+
await client.create_secret(name=secret_name, value=creds_json)
|
|
249
|
+
await build_client.create_secret(name=secret_name, value=creds_json)
|
|
250
|
+
|
|
251
|
+
connection_path = await generate_gcs_connection_file_with_secrets(
|
|
252
|
+
name=connection_name,
|
|
253
|
+
service=service,
|
|
254
|
+
svc_account_creds=secret_name,
|
|
255
|
+
folder=project.folder,
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
create_in_cloud = (
|
|
259
|
+
click.confirm(FeedbackManager.prompt_connection_in_cloud_confirmation(), default=True)
|
|
260
|
+
if obj["env"] == "local"
|
|
261
|
+
else False
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
if create_in_cloud:
|
|
265
|
+
prod_config = obj["config"]
|
|
266
|
+
host = prod_config["host"]
|
|
267
|
+
token = prod_config["token"]
|
|
268
|
+
prod_client = TinyB(
|
|
269
|
+
token=token,
|
|
270
|
+
host=host,
|
|
271
|
+
staging=False,
|
|
272
|
+
)
|
|
273
|
+
creds_json = get_gcs_svc_account_creds()
|
|
274
|
+
secret_name = f"gcs_svc_account_creds_{connection_name}_{unique_suffix}"
|
|
275
|
+
await prod_client.create_secret(name=secret_name, value=creds_json)
|
|
276
|
+
|
|
277
|
+
click.echo(
|
|
278
|
+
FeedbackManager.prompt_gcs_success(
|
|
279
|
+
connection_name=connection_name,
|
|
280
|
+
connection_path=connection_path,
|
|
281
|
+
)
|
|
282
|
+
)
|
tinybird/tb/modules/create.py
CHANGED
|
@@ -380,6 +380,16 @@ S3_REGION {region}
|
|
|
380
380
|
return file_path
|
|
381
381
|
|
|
382
382
|
|
|
383
|
+
async def generate_gcs_connection_file_with_secrets(
|
|
384
|
+
name: str, service: str, svc_account_creds: str, folder: str
|
|
385
|
+
) -> Path:
|
|
386
|
+
content = f"""TYPE {service}
|
|
387
|
+
GCS_SERVICE_ACCOUNT_CREDENTIALS_JSON {{{{ tb_secret("{svc_account_creds}") }}}}
|
|
388
|
+
"""
|
|
389
|
+
file_path = generate_connection_file(name, content, folder, skip_feedback=True)
|
|
390
|
+
return file_path
|
|
391
|
+
|
|
392
|
+
|
|
383
393
|
def create_rules(folder: str, source: str, agent: str):
|
|
384
394
|
if agent == "cursor":
|
|
385
395
|
extension = ".cursorrules"
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import functools
|
|
4
4
|
import glob
|
|
5
5
|
import itertools
|
|
6
|
+
import json
|
|
6
7
|
import os
|
|
7
8
|
import os.path
|
|
8
9
|
import pprint
|
|
@@ -191,13 +192,13 @@ REQUIRED_KAFKA_PARAMS = {
|
|
|
191
192
|
|
|
192
193
|
KAFKA_PARAMS = REQUIRED_KAFKA_PARAMS
|
|
193
194
|
|
|
194
|
-
|
|
195
|
+
REQUIRED_BLOB_STORAGE_PARAMS = {
|
|
195
196
|
"import_connection_name",
|
|
196
197
|
"import_schedule",
|
|
197
198
|
"import_bucket_uri",
|
|
198
199
|
}
|
|
199
200
|
|
|
200
|
-
|
|
201
|
+
BLOB_STORAGE_PARAMS = REQUIRED_BLOB_STORAGE_PARAMS.union({"import_from_timestamp"})
|
|
201
202
|
|
|
202
203
|
|
|
203
204
|
class Datafile:
|
|
@@ -293,10 +294,12 @@ class Datafile:
|
|
|
293
294
|
f"Some Kafka params have been provided, but the following required ones are missing: {missing}"
|
|
294
295
|
)
|
|
295
296
|
# Validate S3 params
|
|
296
|
-
if any(param in node for param in
|
|
297
|
-
|
|
297
|
+
if any(param in node for param in BLOB_STORAGE_PARAMS) and not all(
|
|
298
|
+
param in node for param in REQUIRED_BLOB_STORAGE_PARAMS
|
|
299
|
+
):
|
|
300
|
+
missing = [param for param in REQUIRED_BLOB_STORAGE_PARAMS if param not in node]
|
|
298
301
|
raise DatafileValidationError(
|
|
299
|
-
f"Some
|
|
302
|
+
f"Some connection params have been provided, but the following required ones are missing: {missing}"
|
|
300
303
|
)
|
|
301
304
|
else:
|
|
302
305
|
# We cannot validate a datafile whose kind is unknown
|
|
@@ -1310,6 +1313,16 @@ def parse(
|
|
|
1310
1313
|
|
|
1311
1314
|
return _f
|
|
1312
1315
|
|
|
1316
|
+
def assign_var_json(v: str) -> Callable[[VarArg(str), KwArg(Any)], None]:
|
|
1317
|
+
@multiline_not_supported
|
|
1318
|
+
def _f(*args: str, **kwargs: Any):
|
|
1319
|
+
s = _unquote((" ".join(args)).strip())
|
|
1320
|
+
tmp = eval_var(s, skip=skip_eval)
|
|
1321
|
+
struct = json.loads(tmp)
|
|
1322
|
+
parser_state.current_node[v.lower()] = struct
|
|
1323
|
+
|
|
1324
|
+
return _f
|
|
1325
|
+
|
|
1313
1326
|
def kafka_key_avro_deserialization(*args: str, **kwargs: Any):
|
|
1314
1327
|
raise DatafileSyntaxError(
|
|
1315
1328
|
f'{kwargs["cmd"].upper()} has been deprecated. Use "KAFKA_KEY_FORMAT avro" instead',
|
|
@@ -1536,7 +1549,7 @@ def parse(
|
|
|
1536
1549
|
"kafka_store_headers": assign_var("kafka_store_headers"),
|
|
1537
1550
|
"kafka_store_binary_headers": assign_var("kafka_store_binary_headers"),
|
|
1538
1551
|
"kafka_key_format": assign_var("kafka_key_format"),
|
|
1539
|
-
"kafka_value_format": assign_var("
|
|
1552
|
+
"kafka_value_format": assign_var("kafka_value_format"),
|
|
1540
1553
|
"kafka_key_avro_deserialization": kafka_key_avro_deserialization,
|
|
1541
1554
|
"kafka_ssl_ca_pem": assign_var("kafka_ssl_ca_pem"),
|
|
1542
1555
|
"kafka_security_protocol": assign_var("kafka_security_protocol"),
|
|
@@ -1546,6 +1559,7 @@ def parse(
|
|
|
1546
1559
|
"s3_arn": assign_var("s3_arn"),
|
|
1547
1560
|
"s3_access_key": assign_var("s3_access_key"),
|
|
1548
1561
|
"s3_secret": assign_var("s3_secret"),
|
|
1562
|
+
"gcs_service_account_credentials_json": assign_var_json("gcs_service_account_credentials_json"),
|
|
1549
1563
|
"import_connection_name": assign_var("import_connection_name"),
|
|
1550
1564
|
"import_schedule": assign_var("import_schedule"),
|
|
1551
1565
|
"import_strategy": assign_var("import_strategy"),
|
|
@@ -454,3 +454,24 @@ async def datasource_export(
|
|
|
454
454
|
|
|
455
455
|
except Exception as e:
|
|
456
456
|
raise CLIDatasourceException(FeedbackManager.error(message=str(e)))
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
@datasource.command(name="sync")
|
|
460
|
+
@click.argument("datasource_name")
|
|
461
|
+
@click.option("--yes", is_flag=True, default=False, help="Do not ask for confirmation")
|
|
462
|
+
@click.pass_context
|
|
463
|
+
@coro
|
|
464
|
+
async def datasource_sync(ctx: Context, datasource_name: str, yes: bool):
|
|
465
|
+
try:
|
|
466
|
+
client: TinyB = ctx.obj["client"]
|
|
467
|
+
ds = await client.get_datasource(datasource_name)
|
|
468
|
+
|
|
469
|
+
warning_message = FeedbackManager.warning_datasource_sync_bucket(datasource=datasource_name)
|
|
470
|
+
|
|
471
|
+
if yes or click.confirm(warning_message):
|
|
472
|
+
await client.datasource_sync(ds["id"])
|
|
473
|
+
click.echo(FeedbackManager.success_sync_datasource(datasource=datasource_name))
|
|
474
|
+
except AuthNoTokenException:
|
|
475
|
+
raise
|
|
476
|
+
except Exception as e:
|
|
477
|
+
raise CLIDatasourceException(FeedbackManager.error_syncing_datasource(datasource=datasource_name, error=str(e)))
|
|
@@ -566,7 +566,7 @@ STEP {step}: CREATE IAM ROLE FOR {environment} ENVIRONMENT
|
|
|
566
566
|
Please enter the ARN of the role you just created"""
|
|
567
567
|
)
|
|
568
568
|
|
|
569
|
-
|
|
569
|
+
prompt_connection_in_cloud_confirmation = prompt_message(
|
|
570
570
|
"Would you like to create this connection in the cloud environment as well?"
|
|
571
571
|
)
|
|
572
572
|
|
|
@@ -597,6 +597,56 @@ Please enter the ARN of the role you just created"""
|
|
|
597
597
|
• \033]8;;https://www.tinybird.co/docs/forward/get-data-in/connectors/s3\033\\Learn more about our S3 Connector\033]8;;\033\\
|
|
598
598
|
""")
|
|
599
599
|
|
|
600
|
+
# S3 IAM Role Connection Messages
|
|
601
|
+
prompt_gcs_connection_header = info_highlight_message("""
|
|
602
|
+
──────────────────────────────────────────────────────────────
|
|
603
|
+
GCS CONNECTION SETUP
|
|
604
|
+
──────────────────────────────────────────────────────────────""")
|
|
605
|
+
|
|
606
|
+
prompt_gcs_svc_account_login_gcp = prompt_message("""
|
|
607
|
+
──────────────────────────────────────────────────────────────
|
|
608
|
+
STEP 1: GCP AUTHENTICATION
|
|
609
|
+
──────────────────────────────────────────────────────────────
|
|
610
|
+
|
|
611
|
+
Please log into your \033]8;;https://console.cloud.google.com/\033\\GCP Console\033]8;;\033\\. We'll guide you through creating the necessary permissions.
|
|
612
|
+
|
|
613
|
+
You'll be creating a Google Service Account and you will grant it access to you GCS data. Using Google Service Accounts is the Google recommended solution for this use case.""")
|
|
614
|
+
|
|
615
|
+
prompt_gcs_service_account_creation_flow = prompt_message(
|
|
616
|
+
"""
|
|
617
|
+
──────────────────────────────────────────────────────────────
|
|
618
|
+
STEP 2: CREATE GCP SERVICE ACCOUNT
|
|
619
|
+
──────────────────────────────────────────────────────────────
|
|
620
|
+
|
|
621
|
+
1. Go to \033]8;https://console.cloud.google.com/iam-admin/serviceaccounts/create\033\\Service Accounts > + Create service account\033]8;;\033\\
|
|
622
|
+
2. Provide a service account name. Name the service account something meaningful (e.g., TinybirdGCS-{environment}-svc-account)
|
|
623
|
+
3. Click "Create and continue"
|
|
624
|
+
4. Click the "Select a role" drop down menu and select "Storage Object Viewer" (You can add IAM condition to provide access to selected buckets. More info in \033]8;;https://www.tinybird.co/docs/forward/get-data-in/connectors/gcs\033\\IAM Conditions\033]8;;\033\\)
|
|
625
|
+
5. Click "Done"
|
|
626
|
+
"""
|
|
627
|
+
)
|
|
628
|
+
|
|
629
|
+
prompt_gcs_service_account_key_creation = prompt_message(
|
|
630
|
+
"""
|
|
631
|
+
──────────────────────────────────────────────────────────────
|
|
632
|
+
STEP 3: ADD KEY TO SERVICE ACCOUNT
|
|
633
|
+
──────────────────────────────────────────────────────────────
|
|
634
|
+
|
|
635
|
+
1. Go to Keys
|
|
636
|
+
2. Click the "Add key" drop down menu and select "Create new key"
|
|
637
|
+
3. Select "JSON" and click "Create". This should have downloaded a .json file.
|
|
638
|
+
4. Copy the whole json and paste it here. This will create a tinybird secret, so there is no need to have that credentials file in the project.
|
|
639
|
+
"""
|
|
640
|
+
)
|
|
641
|
+
|
|
642
|
+
prompt_gcs_success = success_message("""
|
|
643
|
+
✅ GCS CONNECTION CONFIGURED SUCCESSFULLY
|
|
644
|
+
|
|
645
|
+
• File created at: {connection_path}
|
|
646
|
+
• You can now use this connection in your Data Sources with: IMPORT_CONNECTION_NAME '{connection_name}'
|
|
647
|
+
• \033]8;;https://www.tinybird.co/docs/forward/get-data-in/connectors/s3\033\\Learn more about our GCS Connector\033]8;;\033\\
|
|
648
|
+
""")
|
|
649
|
+
|
|
600
650
|
prompt_init_git_release_pull = prompt_message(
|
|
601
651
|
"❓ Download the Data Project to continue, otherwise you can't initialize Workspace with Git. Execute '{pull_command}'?"
|
|
602
652
|
)
|
|
@@ -715,7 +765,7 @@ Please enter the ARN of the role you just created"""
|
|
|
715
765
|
)
|
|
716
766
|
warning_datasource_sync = warning_message("** Warning: Do you want to sync the Data Source {datasource}?")
|
|
717
767
|
warning_datasource_sync_bucket = warning_message(
|
|
718
|
-
"** Warning:
|
|
768
|
+
"** Warning: Files from the {datasource} bucket will be updated from the last time synced. Do you want to continue?\n"
|
|
719
769
|
)
|
|
720
770
|
warning_users_dont_exist = warning_message(
|
|
721
771
|
"** Warning: The following users do not exist in the workspace {workspace}: {users}"
|
|
@@ -100,6 +100,12 @@ async def pipe_populate(
|
|
|
100
100
|
wait: bool,
|
|
101
101
|
):
|
|
102
102
|
"""Populate the result of a Materialized Node into the target materialized view"""
|
|
103
|
+
|
|
104
|
+
click.echo(
|
|
105
|
+
"Populating a materialized view on-demand is not supported yet. You can backfill data sources via Deployments."
|
|
106
|
+
)
|
|
107
|
+
return
|
|
108
|
+
|
|
103
109
|
cl: TinyB = ctx.ensure_object(dict)["client"]
|
|
104
110
|
|
|
105
111
|
pipe = await cl.pipe(pipe_name)
|
|
@@ -12,7 +12,7 @@ tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
|
|
|
12
12
|
tinybird/tornado_template.py,sha256=jjNVDMnkYFWXflmT8KU_Ssbo5vR8KQq3EJMk5vYgXRw,41959
|
|
13
13
|
tinybird/ch_utils/constants.py,sha256=aYvg2C_WxYWsnqPdZB1ZFoIr8ZY-XjUXYyHKE9Ansj0,3890
|
|
14
14
|
tinybird/ch_utils/engine.py,sha256=BZuPM7MFS7vaEKK5tOMR2bwSAgJudPrJt27uVEwZmTY,40512
|
|
15
|
-
tinybird/tb/__cli__.py,sha256=
|
|
15
|
+
tinybird/tb/__cli__.py,sha256=M0pSXz42qigJM-2E3dS0gV12H9C1ZSDJxBr_WwVLrag,252
|
|
16
16
|
tinybird/tb/cli.py,sha256=Xw5EhwCQu6Xx55DzoJsZJODdi7tkA391mii-xgGnpEU,1066
|
|
17
17
|
tinybird/tb/client.py,sha256=aaPKq5C77e72kR7IMv9WrvnvNki8mKMOTi9EsCp0eUc,55962
|
|
18
18
|
tinybird/tb/config.py,sha256=HLMHbJg6BjeGZ2KiJA-BCCVnk8w959xsSaDEEePakZg,3981
|
|
@@ -20,16 +20,16 @@ tinybird/tb/modules/auth.py,sha256=_OeYnmTH83lnqCgQEdS6K0bx1KBUeRmZk2M7JnRmWpk,9
|
|
|
20
20
|
tinybird/tb/modules/build.py,sha256=ohHiYwygJtldWsina-2QpvIt-g2hIqOkm5BEnh4JhdA,17187
|
|
21
21
|
tinybird/tb/modules/cicd.py,sha256=Ug7LijuHDIqKR6rm8OLZispWp75Zv6TyonAme8K9jaI,7114
|
|
22
22
|
tinybird/tb/modules/cli.py,sha256=Y_5hu9xwyTIZw4bQoe0MYLnRIzmR7hUjql_oZBxd4Qg,13407
|
|
23
|
-
tinybird/tb/modules/common.py,sha256=
|
|
23
|
+
tinybird/tb/modules/common.py,sha256=jThkqkIJ_blXXUZ2-3HdjG1dpLKOCE_TjXA0jSesIx0,85712
|
|
24
24
|
tinybird/tb/modules/config.py,sha256=ziqW_t_mRVvWOd85VoB4vKyvgMkEfpXDf9H4v38p2xc,11422
|
|
25
|
-
tinybird/tb/modules/connection.py,sha256=
|
|
25
|
+
tinybird/tb/modules/connection.py,sha256=bFolBbKjGMEs9CS_S74KLy-x-IlrhU0HNEmAeMywU00,9373
|
|
26
26
|
tinybird/tb/modules/copy.py,sha256=2Mm4FWKehOG7CoOhiF1m9UZJgJn0W1_cMolqju8ONYg,5805
|
|
27
|
-
tinybird/tb/modules/create.py,sha256=
|
|
28
|
-
tinybird/tb/modules/datasource.py,sha256=
|
|
27
|
+
tinybird/tb/modules/create.py,sha256=VMX8b5ukgQm0VDUbBX91TsIsxqQid2UXRwlKekQp3M4,16792
|
|
28
|
+
tinybird/tb/modules/datasource.py,sha256=V314rkpdVxVMjsp5qcSCTqDlmp4Vu--qM07BoWh-aqs,17783
|
|
29
29
|
tinybird/tb/modules/deployment.py,sha256=M3NPFQXIEsDh9-J-pzPLuHF9k4SIZVvgUnHp05KOf-E,20448
|
|
30
30
|
tinybird/tb/modules/endpoint.py,sha256=XySDt3pk66vxOZ0egUfz4bY8bEk3BjOXkv-L0OIJ3sc,12083
|
|
31
31
|
tinybird/tb/modules/exceptions.py,sha256=5jK91w1LPmtqIUfDpHe_Op5OxGz8-p1BPgtLREMIni0,5217
|
|
32
|
-
tinybird/tb/modules/feedback_manager.py,sha256=
|
|
32
|
+
tinybird/tb/modules/feedback_manager.py,sha256=YrKz1qHLmCKYVNvW2SDobmI6ozMjf2eZL-AnFowSfm8,77664
|
|
33
33
|
tinybird/tb/modules/infra.py,sha256=eX0StUipaXaxIhMxO82cnAnFKTCa7EPOt-e8pWoSLX0,33206
|
|
34
34
|
tinybird/tb/modules/job.py,sha256=n4dSSBgnA8NqD7srGahf2xRj6wxkmX9Vl0J-QJ_a2w0,2966
|
|
35
35
|
tinybird/tb/modules/llm.py,sha256=KfsCYmKeW1VQz0iDZhGKCRkQv_Y3kTHh6JuxvofOguE,1076
|
|
@@ -38,7 +38,7 @@ tinybird/tb/modules/local.py,sha256=-oXIeVXjzdfxVPQaXw68YyQOb48EFQZeUys8_U0xePs,
|
|
|
38
38
|
tinybird/tb/modules/local_common.py,sha256=lyJ8vIFsDcVGYbfoCEBNgkwROsF5YJovxME1CRykEj8,3321
|
|
39
39
|
tinybird/tb/modules/login.py,sha256=8oybH3rwTqNrHx0gN2zG-9MGSYsKwLuD2hKZsKJtrQA,7152
|
|
40
40
|
tinybird/tb/modules/logout.py,sha256=ULooy1cDBD02-r7voZmhV7udA0ML5tVuflJyShrh56Y,1022
|
|
41
|
-
tinybird/tb/modules/materialization.py,sha256=
|
|
41
|
+
tinybird/tb/modules/materialization.py,sha256=QJX5kCPhhm6IXBO1JsalVfbQdypCe_eOUDZ_WHJZWS8,5478
|
|
42
42
|
tinybird/tb/modules/mock.py,sha256=tyhs6izqVGmDzMHdW5yHiprNPjeJDa2I-cLwrLRDC_U,4816
|
|
43
43
|
tinybird/tb/modules/open.py,sha256=OuctINN77oexpSjth9uoIZPCelKO4Li-yyVxeSnk1io,1371
|
|
44
44
|
tinybird/tb/modules/pipe.py,sha256=AQKEDagO6e3psPVjJkS_MDbn8aK-apAiLp26k7jgAV0,2432
|
|
@@ -58,7 +58,7 @@ tinybird/tb/modules/datafile/build.py,sha256=d_h3pRFDPFrDKGhpFx2iejY25GuB2k8yfNo
|
|
|
58
58
|
tinybird/tb/modules/datafile/build_common.py,sha256=LU24kAQmxDJIyoIapDaYG-SU3P4FrMG9UBf8m9PgVSI,4565
|
|
59
59
|
tinybird/tb/modules/datafile/build_datasource.py,sha256=nXEQ0qHdq2ai7jJTv8H2d7eeDPBYzLn8VY7zMtOYb8M,17382
|
|
60
60
|
tinybird/tb/modules/datafile/build_pipe.py,sha256=6Cwjf3BKEF3-oQ9PipsQfK-Z43nSwtA4qJAUoysI7Uc,11385
|
|
61
|
-
tinybird/tb/modules/datafile/common.py,sha256=
|
|
61
|
+
tinybird/tb/modules/datafile/common.py,sha256=p3EyhmO-zp5ZzdJcG6H5S60TTahhQn1fjK_ovXCk2J8,86185
|
|
62
62
|
tinybird/tb/modules/datafile/diff.py,sha256=MTmj53RYjER4neLgWVjabn-FKVFgh8h8uYiBo55lFQg,6757
|
|
63
63
|
tinybird/tb/modules/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
|
|
64
64
|
tinybird/tb/modules/datafile/fixture.py,sha256=DrRWivcvo_1rn7LlVUnHcXccdgx9yVj63mzBkUwCzk8,1420
|
|
@@ -78,8 +78,8 @@ tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4
|
|
|
78
78
|
tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
|
|
79
79
|
tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
|
|
80
80
|
tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
|
|
81
|
-
tinybird-0.0.1.
|
|
82
|
-
tinybird-0.0.1.
|
|
83
|
-
tinybird-0.0.1.
|
|
84
|
-
tinybird-0.0.1.
|
|
85
|
-
tinybird-0.0.1.
|
|
81
|
+
tinybird-0.0.1.dev136.dist-info/METADATA,sha256=9bqpPb2SgYfpKY9CL3Y4z9dv6vJDqFYhX3M9DAvnKNs,1612
|
|
82
|
+
tinybird-0.0.1.dev136.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
83
|
+
tinybird-0.0.1.dev136.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
|
|
84
|
+
tinybird-0.0.1.dev136.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
|
|
85
|
+
tinybird-0.0.1.dev136.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|