tinybird 0.0.1.dev100__py3-none-any.whl → 0.0.1.dev101__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/client.py +10 -0
- tinybird/sql.py +2 -2
- tinybird/sql_toolset.py +16 -3
- tinybird/tb/__cli__.py +2 -2
- tinybird/tb/modules/datafile/common.py +21 -1
- tinybird/tb/modules/infra.py +73 -13
- {tinybird-0.0.1.dev100.dist-info → tinybird-0.0.1.dev101.dist-info}/METADATA +1 -1
- {tinybird-0.0.1.dev100.dist-info → tinybird-0.0.1.dev101.dist-info}/RECORD +11 -11
- {tinybird-0.0.1.dev100.dist-info → tinybird-0.0.1.dev101.dist-info}/WHEEL +0 -0
- {tinybird-0.0.1.dev100.dist-info → tinybird-0.0.1.dev101.dist-info}/entry_points.txt +0 -0
- {tinybird-0.0.1.dev100.dist-info → tinybird-0.0.1.dev101.dist-info}/top_level.txt +0 -0
tinybird/client.py
CHANGED
|
@@ -915,6 +915,16 @@ class TinyB:
|
|
|
915
915
|
}
|
|
916
916
|
return await self._req(f"/v1/infra?{urlencode(params)}", method="POST")
|
|
917
917
|
|
|
918
|
+
async def infra_update(self, infra_id: str, organization_id: str, name: str, host: str) -> Dict[str, Any]:
|
|
919
|
+
params = {
|
|
920
|
+
"organization_id": organization_id,
|
|
921
|
+
}
|
|
922
|
+
if name:
|
|
923
|
+
params["name"] = name
|
|
924
|
+
if host:
|
|
925
|
+
params["host"] = host
|
|
926
|
+
return await self._req(f"/v1/infra/{infra_id}?{urlencode(params)}", method="PUT")
|
|
927
|
+
|
|
918
928
|
async def infra_list(self, organization_id: str) -> List[Dict[str, Any]]:
|
|
919
929
|
data = await self._req(f"/v1/infra?organization_id={organization_id}")
|
|
920
930
|
return data.get("infras", [])
|
tinybird/sql.py
CHANGED
|
@@ -174,7 +174,7 @@ def try_to_fix_nullable_in_simple_aggregating_function(t: str) -> Optional[str]:
|
|
|
174
174
|
return result
|
|
175
175
|
|
|
176
176
|
|
|
177
|
-
def schema_to_sql_columns(schema: List[Dict[str, Any]]) -> List[str]:
|
|
177
|
+
def schema_to_sql_columns(schema: List[Dict[str, Any]], skip_jsonpaths: bool = False) -> List[str]:
|
|
178
178
|
"""return an array with each column in SQL
|
|
179
179
|
>>> schema_to_sql_columns([{'name': 'temperature', 'type': 'Float32', 'codec': None, 'default_value': None, 'nullable': False, 'normalized_name': 'temperature'}, {'name': 'temperature_delta', 'type': 'Float32', 'codec': 'CODEC(Delta(4), LZ4))', 'default_value': 'MATERIALIZED temperature', 'nullable': False, 'normalized_name': 'temperature_delta'}])
|
|
180
180
|
['`temperature` Float32', '`temperature_delta` Float32 MATERIALIZED temperature CODEC(Delta(4), LZ4))']
|
|
@@ -198,7 +198,7 @@ def schema_to_sql_columns(schema: List[Dict[str, Any]]) -> List[str]:
|
|
|
198
198
|
else:
|
|
199
199
|
_type = x["type"]
|
|
200
200
|
parts = [col_name(name, backquotes=True), _type]
|
|
201
|
-
if x.get("jsonpath", None):
|
|
201
|
+
if x.get("jsonpath", None) and not skip_jsonpaths:
|
|
202
202
|
parts.append(f"`json:{x['jsonpath']}`")
|
|
203
203
|
if "default_value" in x and x["default_value"] not in ("", None):
|
|
204
204
|
parts.append(x["default_value"])
|
tinybird/sql_toolset.py
CHANGED
|
@@ -10,6 +10,9 @@ from toposort import toposort
|
|
|
10
10
|
|
|
11
11
|
from tinybird.ch_utils.constants import COPY_ENABLED_TABLE_FUNCTIONS, ENABLED_TABLE_FUNCTIONS
|
|
12
12
|
|
|
13
|
+
# VALID_REMOTE is used to explicitly vet queries sent to sql_toolset. In this module, when a table used in a query has
|
|
14
|
+
# VALID_REMOTE in the database portion (as in (VALID_REMOTE, "select * from cluster(tinybird, public.t_blabla)"), the
|
|
15
|
+
# query is not blocked, even if the rhs (the "select * ..." bit) is not found in the various collections of allowed tables.
|
|
13
16
|
VALID_REMOTE = "VALID_REMOTE"
|
|
14
17
|
|
|
15
18
|
|
|
@@ -351,14 +354,24 @@ def is_invalid_resource(
|
|
|
351
354
|
valid_tables: Optional[Set[Tuple[str, str]]] = None,
|
|
352
355
|
) -> bool:
|
|
353
356
|
return is_invalid_resource_from_other_workspace(
|
|
354
|
-
r, database, default_database, _replaced_with
|
|
357
|
+
r, database, default_database, _replaced_with, valid_tables
|
|
355
358
|
) or is_invalid_resource_from_current_workspace(r, database, default_database, _replaced_with, valid_tables)
|
|
356
359
|
|
|
357
360
|
|
|
358
361
|
def is_invalid_resource_from_other_workspace(
|
|
359
|
-
r: Tuple[str, str],
|
|
362
|
+
r: Tuple[str, str],
|
|
363
|
+
database: str,
|
|
364
|
+
default_database: str,
|
|
365
|
+
_replaced_with: Set[Tuple[str, str]],
|
|
366
|
+
valid_tables: Optional[Set[Tuple[str, str]]],
|
|
360
367
|
) -> bool:
|
|
361
|
-
return database not in [default_database, "tinybird", VALID_REMOTE] and r not in _replaced_with
|
|
368
|
+
# return database not in [default_database, "tinybird", VALID_REMOTE] and r not in _replaced_with
|
|
369
|
+
return bool(
|
|
370
|
+
database not in [default_database, "tinybird", VALID_REMOTE]
|
|
371
|
+
and valid_tables
|
|
372
|
+
and r not in valid_tables
|
|
373
|
+
and r not in _replaced_with
|
|
374
|
+
)
|
|
362
375
|
|
|
363
376
|
|
|
364
377
|
def is_invalid_resource_from_current_workspace(
|
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.dev101'
|
|
8
|
+
__revision__ = '5dc0d4b'
|
|
@@ -183,6 +183,15 @@ class DatafileKind(Enum):
|
|
|
183
183
|
return extension_map[extension]
|
|
184
184
|
|
|
185
185
|
|
|
186
|
+
KAFKA_PARAMS = {
|
|
187
|
+
"kafka_connection_name",
|
|
188
|
+
"kafka_topic",
|
|
189
|
+
"kafka_group_id",
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
REQUIRED_KAFKA_PARAMS = KAFKA_PARAMS
|
|
193
|
+
|
|
194
|
+
|
|
186
195
|
class Datafile:
|
|
187
196
|
def __init__(self) -> None:
|
|
188
197
|
self.maintainer: Optional[str] = None
|
|
@@ -248,9 +257,10 @@ class Datafile:
|
|
|
248
257
|
f"Invalid permission {token['permission']} for token {token['token_name']}. Only READ is allowed for pipes"
|
|
249
258
|
)
|
|
250
259
|
elif self.kind == DatafileKind.datasource:
|
|
251
|
-
# TODO(eclbg):
|
|
252
260
|
# [x] Just one node
|
|
253
261
|
# [x] Engine is present
|
|
262
|
+
# [x] Token permissions are valid
|
|
263
|
+
# [x] If it's a kafka datasource, all required kafka params are present
|
|
254
264
|
# [ ] ...
|
|
255
265
|
if len(self.nodes) > 1:
|
|
256
266
|
# Our users are not aware of data source data files being a single-node data file, hence this error
|
|
@@ -259,11 +269,20 @@ class Datafile:
|
|
|
259
269
|
node = self.nodes[0]
|
|
260
270
|
if "schema" not in node:
|
|
261
271
|
raise DatafileValidationError("SCHEMA is mandatory")
|
|
272
|
+
# Validate token permissions
|
|
262
273
|
for token in self.tokens:
|
|
263
274
|
if token["permission"].upper() not in {"READ", "APPEND"}:
|
|
264
275
|
raise DatafileValidationError(
|
|
265
276
|
f"Invalid permission {token['permission']} for token {token['token_name']}. Only READ and APPEND are allowed for datasources"
|
|
266
277
|
)
|
|
278
|
+
# Validate Kafka params
|
|
279
|
+
if any(param in node for param in KAFKA_PARAMS) and not all(
|
|
280
|
+
param in node for param in REQUIRED_KAFKA_PARAMS
|
|
281
|
+
):
|
|
282
|
+
missing = [param for param in REQUIRED_KAFKA_PARAMS if param not in node]
|
|
283
|
+
raise DatafileValidationError(
|
|
284
|
+
f"Some Kafka params have been provided, but the following required ones are missing: {missing}"
|
|
285
|
+
)
|
|
267
286
|
else:
|
|
268
287
|
# We cannot validate a datafile whose kind is unknown
|
|
269
288
|
pass
|
|
@@ -1427,6 +1446,7 @@ def parse(
|
|
|
1427
1446
|
"include": include,
|
|
1428
1447
|
"sql": sql("sql"),
|
|
1429
1448
|
"version": version,
|
|
1449
|
+
# TODO(eclbg): We should decide on a single place to define the kafka params. Definitely not here.
|
|
1430
1450
|
"kafka_connection_name": assign_var("kafka_connection_name"),
|
|
1431
1451
|
"kafka_topic": assign_var("kafka_topic"),
|
|
1432
1452
|
"kafka_group_id": assign_var("kafka_group_id"),
|
tinybird/tb/modules/infra.py
CHANGED
|
@@ -6,6 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Optional
|
|
7
7
|
|
|
8
8
|
import click
|
|
9
|
+
import pyperclip
|
|
9
10
|
import requests
|
|
10
11
|
from click import Context
|
|
11
12
|
|
|
@@ -217,11 +218,11 @@ def infra(ctx: Context) -> None:
|
|
|
217
218
|
|
|
218
219
|
@infra.command(name="init")
|
|
219
220
|
@click.option("--name", type=str, help="Name for identifying the self-managed infrastructure in Tinybird")
|
|
220
|
-
@click.option("--provider", type=str, help="Infrastructure provider
|
|
221
|
-
@click.option("--region", type=str, help="AWS region
|
|
221
|
+
@click.option("--provider", type=str, help="Infrastructure provider. Possible values are: aws, gcp, azure)")
|
|
222
|
+
@click.option("--region", type=str, help="AWS region, when using aws as the provider")
|
|
222
223
|
@click.option("--dns-zone-name", type=str, help="DNS zone name")
|
|
223
|
-
@click.option("--namespace", type=str, help="Kubernetes namespace for deployment")
|
|
224
|
-
@click.option("--dns-record", type=str, help="DNS record name to create
|
|
224
|
+
@click.option("--namespace", type=str, help="Kubernetes namespace for the deployment")
|
|
225
|
+
@click.option("--dns-record", type=str, help="DNS record name to create, without domain. For example, 'tinybird')")
|
|
225
226
|
@click.option("--storage-class", type=str, help="Storage class for the k8s StatefulSet")
|
|
226
227
|
@click.option(
|
|
227
228
|
"--auto-apply", is_flag=True, help="Automatically apply Terraform and kubectl configuration without prompting"
|
|
@@ -243,7 +244,7 @@ def infra_init(
|
|
|
243
244
|
"""Init infra"""
|
|
244
245
|
# Check if provider is specified
|
|
245
246
|
if not provider:
|
|
246
|
-
click.echo("Error: --provider option is required.
|
|
247
|
+
click.echo("Error: --provider option is required. Specify a provider. Possible values are: aws, gcp, azure.")
|
|
247
248
|
return
|
|
248
249
|
|
|
249
250
|
# AWS-specific Terraform template creation
|
|
@@ -266,27 +267,27 @@ def infra_init(
|
|
|
266
267
|
config = json.load(f)
|
|
267
268
|
click.echo("Loaded existing configuration from config.json")
|
|
268
269
|
except json.JSONDecodeError:
|
|
269
|
-
click.echo("Warning: Could not parse existing config.json
|
|
270
|
+
click.echo("Warning: Could not parse existing config.json. Creating a new file...")
|
|
270
271
|
|
|
271
272
|
# Generate a random ID for default values
|
|
272
273
|
random_id = str(uuid.uuid4())[:8]
|
|
273
274
|
|
|
274
275
|
# Get or prompt for configuration values
|
|
275
|
-
name = name or click.prompt("Enter name", type=str)
|
|
276
|
-
region = region or config.get("region") or click.prompt("Enter
|
|
277
|
-
dns_zone_name = dns_zone_name or config.get("dns_zone_name") or click.prompt("Enter DNS zone name", type=str)
|
|
276
|
+
name = name or click.prompt("Enter the name for your self-managed region", type=str)
|
|
277
|
+
region = region or config.get("region") or click.prompt("Enter the AWS region", default="us-east-1", type=str)
|
|
278
|
+
dns_zone_name = dns_zone_name or config.get("dns_zone_name") or click.prompt("Enter the DNS zone name", type=str)
|
|
278
279
|
namespace = (
|
|
279
280
|
namespace
|
|
280
281
|
or config.get("namespace")
|
|
281
|
-
or click.prompt("Enter namespace
|
|
282
|
+
or click.prompt("Enter the Kubernetes namespace", default=f"tinybird-{random_id}", type=str)
|
|
282
283
|
)
|
|
283
284
|
dns_record = (
|
|
284
285
|
dns_record
|
|
285
286
|
or config.get("dns_record")
|
|
286
|
-
or click.prompt("Enter DNS record name
|
|
287
|
+
or click.prompt("Enter the DNS record name, without domain", default=f"tinybird-{random_id}", type=str)
|
|
287
288
|
)
|
|
288
289
|
storage_class = config.get("storage_class") or click.prompt(
|
|
289
|
-
"Enter storage class", default="gp3-encrypted", type=str
|
|
290
|
+
"Enter the Kubernetes storage class", default="gp3-encrypted", type=str
|
|
290
291
|
)
|
|
291
292
|
|
|
292
293
|
# Save configuration
|
|
@@ -407,7 +408,7 @@ def infra_init(
|
|
|
407
408
|
available_contexts = [context.strip() for context in contexts_result.stdout.splitlines() if context.strip()]
|
|
408
409
|
|
|
409
410
|
if not available_contexts:
|
|
410
|
-
click.echo("No kubectl contexts found.
|
|
411
|
+
click.echo("No kubectl contexts found. Configure kubectl first.")
|
|
411
412
|
return
|
|
412
413
|
|
|
413
414
|
# Prompt user to select a context
|
|
@@ -562,3 +563,62 @@ async def infra_ls(ctx: click.Context):
|
|
|
562
563
|
click.echo(FeedbackManager.info(message="\n** Infras:"))
|
|
563
564
|
echo_safe_humanfriendly_tables_format_smart_table(table_human_readable, column_names=columns)
|
|
564
565
|
click.echo("\n")
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
@infra.command(name="create")
|
|
569
|
+
@click.option("--name", type=str, help="Name for identifying the self-managed infrastructure in Tinybird")
|
|
570
|
+
@click.option("--host", type=str, help="Host for the infrastructure")
|
|
571
|
+
@click.pass_context
|
|
572
|
+
@coro
|
|
573
|
+
async def infra_create(ctx: click.Context, name: str, host: str):
|
|
574
|
+
"""Create a self-managed infrastructure"""
|
|
575
|
+
try:
|
|
576
|
+
client: TinyB = ctx.ensure_object(dict)["client"]
|
|
577
|
+
user_workspaces = await client.user_workspaces_with_organization()
|
|
578
|
+
admin_org_id = user_workspaces.get("organization_id")
|
|
579
|
+
if not admin_org_id:
|
|
580
|
+
raise CLIException("No organization associated to this workspace")
|
|
581
|
+
name = name or click.prompt("Enter name", type=str)
|
|
582
|
+
host = host or click.prompt("Enter host", type=str)
|
|
583
|
+
click.echo(FeedbackManager.highlight(message=f"\n» Creating infrastructure '{name}' in Tinybird..."))
|
|
584
|
+
infra = await client.infra_create(organization_id=admin_org_id, name=name, host=host)
|
|
585
|
+
click.echo(FeedbackManager.success(message=f"\n✓ Infrastructure '{name}' created"))
|
|
586
|
+
pyperclip.copy(infra["token"])
|
|
587
|
+
click.echo(FeedbackManager.info(message="Access token has been copied to your clipboard."))
|
|
588
|
+
click.echo(
|
|
589
|
+
FeedbackManager.info(message="Pass it as an environment variable in your deployment as TB_INFRA_TOKEN")
|
|
590
|
+
)
|
|
591
|
+
except Exception as e:
|
|
592
|
+
click.echo(FeedbackManager.error(message=f"✗ Error: {str(e)}"))
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
@infra.command(name="update")
|
|
596
|
+
@click.argument("infra_name")
|
|
597
|
+
@click.option("--name", type=str, help="Name for identifying the self-managed infrastructure in Tinybird")
|
|
598
|
+
@click.option("--host", type=str, help="Host for the infrastructure")
|
|
599
|
+
@click.pass_context
|
|
600
|
+
@coro
|
|
601
|
+
async def infra_update(ctx: click.Context, infra_name: str, name: str, host: str):
|
|
602
|
+
"""Update a self-managed infrastructure"""
|
|
603
|
+
try:
|
|
604
|
+
client: TinyB = ctx.ensure_object(dict)["client"]
|
|
605
|
+
user_workspaces = await client.user_workspaces_with_organization()
|
|
606
|
+
admin_org_id = user_workspaces.get("organization_id")
|
|
607
|
+
if not admin_org_id:
|
|
608
|
+
raise CLIException("No organization associated to this workspace")
|
|
609
|
+
|
|
610
|
+
if not name and not host:
|
|
611
|
+
click.echo(
|
|
612
|
+
FeedbackManager.warning(message="No name or host provided. Please provide either a name or a host.")
|
|
613
|
+
)
|
|
614
|
+
return
|
|
615
|
+
|
|
616
|
+
if name or host:
|
|
617
|
+
infras = await client.infra_list(organization_id=admin_org_id)
|
|
618
|
+
infra_id = next((infra["id"] for infra in infras if infra["name"] == infra_name), None)
|
|
619
|
+
if not infra_id:
|
|
620
|
+
raise CLIException(f"Infrastructure '{infra_name}' not found")
|
|
621
|
+
click.echo(FeedbackManager.highlight(message=f"\n» Updating infrastructure '{infra_name}' in Tinybird..."))
|
|
622
|
+
await client.infra_update(infra_id=infra_id, organization_id=admin_org_id, name=name, host=host)
|
|
623
|
+
except Exception as e:
|
|
624
|
+
click.echo(FeedbackManager.error(message=f"✗ Error: {str(e)}"))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
tinybird/__cli__.py,sha256=esPl5QDTzuQgHe5FuxWLm-fURFigGGwjnYLh9GuWUw4,232
|
|
2
|
-
tinybird/client.py,sha256=
|
|
2
|
+
tinybird/client.py,sha256=yc2BP2HiQhaUjU-t7nBuZEiJsb2nQMH3vBfOhKCciyU,55468
|
|
3
3
|
tinybird/config.py,sha256=5UP_UZ2Qtlm5aOH5W7SbtN8r7X-8u3-r853joKqU5zs,6072
|
|
4
4
|
tinybird/connectors.py,sha256=7Gjms7b5MAaBFGi3xytsJurCylprONpFcYrzp4Fw2Rc,15241
|
|
5
5
|
tinybird/context.py,sha256=FfqYfrGX_I7PKGTQo93utaKPDNVYWelg4Hsp3evX5wM,1291
|
|
@@ -7,15 +7,15 @@ tinybird/datatypes.py,sha256=XNypumfqNjsvLJ5iNXnbVHRvAJe0aQwI3lS6Cxox-e0,10979
|
|
|
7
7
|
tinybird/feedback_manager.py,sha256=YSjtFDJvc8y66j2J0iIkb3SVzDdYAJbzFL-JPQ26pak,68761
|
|
8
8
|
tinybird/git_settings.py,sha256=Sw_8rGmribEFJ4Z_6idrVytxpFYk7ez8ei0qHULzs3E,3934
|
|
9
9
|
tinybird/prompts.py,sha256=syxUvbdkzxIrIK8pkS-Y7nzBx7DMS2Z9HaiXx7AjvnQ,33912
|
|
10
|
-
tinybird/sql.py,sha256=
|
|
10
|
+
tinybird/sql.py,sha256=J35bhdpuu84HW2tiLp-cs_nzkRwPhiy1yPcFhcWMCR4,46248
|
|
11
11
|
tinybird/sql_template.py,sha256=VH8io4n5eP2z6TEw111d8hcA9FKQerFjprKKCW2MODw,99127
|
|
12
12
|
tinybird/sql_template_fmt.py,sha256=KUHdj5rYCYm_rKKdXYSJAE9vIyXUQLB0YSZnUXHeBlY,10196
|
|
13
|
-
tinybird/sql_toolset.py,sha256=
|
|
13
|
+
tinybird/sql_toolset.py,sha256=KORVbNAUTfW1qo3U9oe7Z59xQ0QMsFhB0ji3HzY2JVo,15324
|
|
14
14
|
tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
|
|
15
15
|
tinybird/tornado_template.py,sha256=jjNVDMnkYFWXflmT8KU_Ssbo5vR8KQq3EJMk5vYgXRw,41959
|
|
16
16
|
tinybird/ch_utils/constants.py,sha256=aYvg2C_WxYWsnqPdZB1ZFoIr8ZY-XjUXYyHKE9Ansj0,3890
|
|
17
17
|
tinybird/ch_utils/engine.py,sha256=BZuPM7MFS7vaEKK5tOMR2bwSAgJudPrJt27uVEwZmTY,40512
|
|
18
|
-
tinybird/tb/__cli__.py,sha256=
|
|
18
|
+
tinybird/tb/__cli__.py,sha256=9fN3V2hgGADGGvafwXcIrRciQG80C2cmQs_OlsP8u-A,252
|
|
19
19
|
tinybird/tb/cli.py,sha256=H_HaZhkimKgkryYXpBjHfY9Qtg-ZORiONU3psDNpzDk,1135
|
|
20
20
|
tinybird/tb/modules/auth.py,sha256=L1IatO2arRSzys3t8px8xVt8uPWUL5EVD0sFzAV_uVU,9022
|
|
21
21
|
tinybird/tb/modules/build.py,sha256=h5drdmDFX8NHts9dA2Zepao7KSgMAl3DZGyFufVZP78,11085
|
|
@@ -32,7 +32,7 @@ tinybird/tb/modules/endpoint.py,sha256=EhVoGAXsFz-83Fiwj1gI-I73iRRvL49d0W81un7hv
|
|
|
32
32
|
tinybird/tb/modules/exceptions.py,sha256=4A2sSjCEqKUMqpP3WI00zouCWW4uLaghXXLZBSw04mY,3363
|
|
33
33
|
tinybird/tb/modules/feedback_manager.py,sha256=7nNiOx7OMebiheLED1r0d75SbuXCNxyBmF4e20rCBNc,69511
|
|
34
34
|
tinybird/tb/modules/fmt.py,sha256=qpf9APqKTKL2uphNgdbj4OMVyLkAxZn6dn4eHF99L5g,3553
|
|
35
|
-
tinybird/tb/modules/infra.py,sha256=
|
|
35
|
+
tinybird/tb/modules/infra.py,sha256=vb6WmVHFuU1ZhtQMh2wOzRd2x8g7CLt_2gR3EL_L2E4,22867
|
|
36
36
|
tinybird/tb/modules/job.py,sha256=956Pj8BEEsiD2GZsV9RKKVM3I_CveOLgS82lykO5ukk,2963
|
|
37
37
|
tinybird/tb/modules/llm.py,sha256=AC0VSphTOM2t-v1_3NLvNN_FIbgMo4dTyMqIv5nniPo,835
|
|
38
38
|
tinybird/tb/modules/llm_utils.py,sha256=nS9r4FAElJw8yXtmdYrx-rtI2zXR8qXfi1QqUDCfxvg,3469
|
|
@@ -61,7 +61,7 @@ tinybird/tb/modules/datafile/build.py,sha256=jhfIJ2xt0N13XsLPe3iMQIyCPApHS13_Df2
|
|
|
61
61
|
tinybird/tb/modules/datafile/build_common.py,sha256=rT7VJ5mnQ68R_8US91DAtkusfvjWuG_NObOzNgtN_ko,4562
|
|
62
62
|
tinybird/tb/modules/datafile/build_datasource.py,sha256=CCU3eQ8Rax9RgHHfbAXDRL6rQ49N35h_GDQnGrUUUzA,17379
|
|
63
63
|
tinybird/tb/modules/datafile/build_pipe.py,sha256=w-Wd08gZYAEcak9FdBijVfIU2_Wn_PPdgAZddPpoGTo,11382
|
|
64
|
-
tinybird/tb/modules/datafile/common.py,sha256=
|
|
64
|
+
tinybird/tb/modules/datafile/common.py,sha256=ZRRx-9EXeHMOz6Lu9Y1TSWELF0ftfUHLLQAANjJZ334,82241
|
|
65
65
|
tinybird/tb/modules/datafile/diff.py,sha256=-0J7PsBO64T7LOZSkZ4ZFHHCPvT7cKItnJkbz2PkndU,6754
|
|
66
66
|
tinybird/tb/modules/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
|
|
67
67
|
tinybird/tb/modules/datafile/fixture.py,sha256=si-9LB-LdKQSWDtVW82xDrHtFfko5bgBG1cvjqqrcPU,1064
|
|
@@ -81,8 +81,8 @@ tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4
|
|
|
81
81
|
tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
|
|
82
82
|
tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
|
|
83
83
|
tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
|
|
84
|
-
tinybird-0.0.1.
|
|
85
|
-
tinybird-0.0.1.
|
|
86
|
-
tinybird-0.0.1.
|
|
87
|
-
tinybird-0.0.1.
|
|
88
|
-
tinybird-0.0.1.
|
|
84
|
+
tinybird-0.0.1.dev101.dist-info/METADATA,sha256=73sj_cIfixFVZVrtmkn_MwEYvtkMLO4GYeJCjJQ1KA0,2586
|
|
85
|
+
tinybird-0.0.1.dev101.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
86
|
+
tinybird-0.0.1.dev101.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
|
|
87
|
+
tinybird-0.0.1.dev101.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
|
|
88
|
+
tinybird-0.0.1.dev101.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|