tinybird 0.0.1.dev174__py3-none-any.whl → 0.0.1.dev175__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 +3 -3
- tinybird/tb/__cli__.py +2 -2
- tinybird/tb/modules/datafile/common.py +79 -15
- tinybird/tb/modules/datafile/format_common.py +1 -1
- tinybird/tb/modules/datasource.py +4 -4
- tinybird/tb/modules/tinyunit/tinyunit.py +1 -1
- {tinybird-0.0.1.dev174.dist-info → tinybird-0.0.1.dev175.dist-info}/METADATA +1 -1
- {tinybird-0.0.1.dev174.dist-info → tinybird-0.0.1.dev175.dist-info}/RECORD +11 -11
- {tinybird-0.0.1.dev174.dist-info → tinybird-0.0.1.dev175.dist-info}/WHEEL +0 -0
- {tinybird-0.0.1.dev174.dist-info → tinybird-0.0.1.dev175.dist-info}/entry_points.txt +0 -0
- {tinybird-0.0.1.dev174.dist-info → tinybird-0.0.1.dev175.dist-info}/top_level.txt +0 -0
tinybird/sql_template.py
CHANGED
|
@@ -1657,7 +1657,7 @@ def get_var_data(content, node_id=None):
|
|
|
1657
1657
|
# It will be overriden in later definitions or left as is otherwise.
|
|
1658
1658
|
# args[0] check is used to avoid adding unnamed parameters found in
|
|
1659
1659
|
# templates like: `split_to_array('')`
|
|
1660
|
-
if
|
|
1660
|
+
if args and isinstance(args[0], list):
|
|
1661
1661
|
raise ValueError(f'"{args[0]}" can not be used as a variable name')
|
|
1662
1662
|
if len(args) > 0 and args[0] not in vars and args[0]:
|
|
1663
1663
|
vars[args[0]] = {
|
|
@@ -1669,7 +1669,7 @@ def get_var_data(content, node_id=None):
|
|
|
1669
1669
|
if "default" not in kwargs:
|
|
1670
1670
|
default = kwargs.get("default", args[2] if len(args) > 2 and args[2] else None)
|
|
1671
1671
|
kwargs["default"] = check_default_value(default)
|
|
1672
|
-
if
|
|
1672
|
+
if args:
|
|
1673
1673
|
if isinstance(args[0], list):
|
|
1674
1674
|
raise ValueError(f'"{args[0]}" can not be used as a variable name')
|
|
1675
1675
|
vars[args[0]] = {
|
|
@@ -1678,7 +1678,7 @@ def get_var_data(content, node_id=None):
|
|
|
1678
1678
|
}
|
|
1679
1679
|
elif func in parameter_types:
|
|
1680
1680
|
# avoid variable names to be None
|
|
1681
|
-
if
|
|
1681
|
+
if args and args[0] is not None:
|
|
1682
1682
|
# if this is a cast use the function name to get the type
|
|
1683
1683
|
if "default" not in kwargs:
|
|
1684
1684
|
default = kwargs.get("default", args[1] if len(args) > 1 else 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.dev175'
|
|
8
|
+
__revision__ = '943d7b4'
|
|
@@ -110,6 +110,19 @@ class PipeNodeTypes:
|
|
|
110
110
|
DATA_SINK = "sink"
|
|
111
111
|
COPY = "copy"
|
|
112
112
|
STREAM = "stream"
|
|
113
|
+
EMPTY = ""
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
VALID_PIPE_NODE_TYPES = {
|
|
117
|
+
PipeNodeTypes.MATERIALIZED,
|
|
118
|
+
PipeNodeTypes.STANDARD,
|
|
119
|
+
PipeNodeTypes.COPY,
|
|
120
|
+
PipeNodeTypes.EMPTY,
|
|
121
|
+
PipeNodeTypes.ENDPOINT,
|
|
122
|
+
PipeNodeTypes.STREAM,
|
|
123
|
+
PipeNodeTypes.DATA_SINK,
|
|
124
|
+
}
|
|
125
|
+
VISIBLE_PIPE_NODE_TYPES = {PipeNodeTypes.MATERIALIZED, PipeNodeTypes.COPY, PipeNodeTypes.ENDPOINT}
|
|
113
126
|
|
|
114
127
|
|
|
115
128
|
class DataFileExtensions:
|
|
@@ -130,10 +143,43 @@ class CopyModes:
|
|
|
130
143
|
return node_mode.lower() in CopyModes.valid_modes
|
|
131
144
|
|
|
132
145
|
|
|
133
|
-
class
|
|
146
|
+
class Parameters:
|
|
147
|
+
ACCEPTED_ATTRIBUTES: set[str] = set()
|
|
148
|
+
MANDATORY_ATTRIBUTES: set[str] = set()
|
|
149
|
+
_PARAMS_ALIASES: dict[str, str] = {"name": "node", "mode": "copy_mode"}
|
|
150
|
+
|
|
151
|
+
@classmethod
|
|
152
|
+
def valid_params(cls) -> set[str]:
|
|
153
|
+
return cls.ACCEPTED_ATTRIBUTES
|
|
154
|
+
|
|
155
|
+
@classmethod
|
|
156
|
+
def required_params(cls) -> set[str]:
|
|
157
|
+
return cls.MANDATORY_ATTRIBUTES
|
|
158
|
+
|
|
159
|
+
@staticmethod
|
|
160
|
+
def canonical_name(name: str):
|
|
161
|
+
return Parameters._PARAMS_ALIASES.get(name, name)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class PipeParameters(Parameters):
|
|
165
|
+
MANDATORY_ATTRIBUTES = {"name", "sql", "type"}
|
|
166
|
+
ACCEPTED_ATTRIBUTES = {"description"}.union(MANDATORY_ATTRIBUTES)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class CopyParameters(Parameters):
|
|
134
170
|
TARGET_DATASOURCE = "target_datasource"
|
|
135
171
|
COPY_SCHEDULE = "copy_schedule"
|
|
136
172
|
COPY_MODE = "copy_mode"
|
|
173
|
+
COPY_MODE_ALIAS = "mode" # we need this because bot MODE and COPY_MODE go to `mode` variable inside the node
|
|
174
|
+
MANDATORY_ATTRIBUTES = PipeParameters.MANDATORY_ATTRIBUTES.union({TARGET_DATASOURCE})
|
|
175
|
+
ACCEPTED_ATTRIBUTES = PipeParameters.ACCEPTED_ATTRIBUTES.union(MANDATORY_ATTRIBUTES).union(
|
|
176
|
+
{COPY_SCHEDULE, COPY_MODE_ALIAS}
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class MaterializedParameters(Parameters):
|
|
181
|
+
MANDATORY_ATTRIBUTES = PipeParameters.MANDATORY_ATTRIBUTES.union({"datasource"})
|
|
182
|
+
ACCEPTED_ATTRIBUTES = PipeParameters.ACCEPTED_ATTRIBUTES.union(MANDATORY_ATTRIBUTES)
|
|
137
183
|
|
|
138
184
|
|
|
139
185
|
DATAFILE_NEW_LINE = "\n"
|
|
@@ -228,8 +274,10 @@ class Datafile:
|
|
|
228
274
|
self.kind = kind
|
|
229
275
|
|
|
230
276
|
def validate_copy_node(self, node: Dict[str, Any]):
|
|
231
|
-
if
|
|
232
|
-
raise DatafileValidationError(
|
|
277
|
+
if missing := [param for param in CopyParameters.required_params() if param not in node]:
|
|
278
|
+
raise DatafileValidationError(
|
|
279
|
+
f"Some copy node params have been provided, but the following required ones are missing: {missing}"
|
|
280
|
+
)
|
|
233
281
|
# copy mode must be append or replace
|
|
234
282
|
if node.get("mode") and node["mode"] not in ["append", "replace"]:
|
|
235
283
|
raise DatafileValidationError("COPY node mode must be append or replace")
|
|
@@ -240,6 +288,22 @@ class Datafile:
|
|
|
240
288
|
and not croniter.is_valid(node["copy_schedule"])
|
|
241
289
|
):
|
|
242
290
|
raise DatafileValidationError("COPY node schedule must be @on-demand or a valid cron expression.")
|
|
291
|
+
for key in node.keys():
|
|
292
|
+
if key not in CopyParameters.valid_params():
|
|
293
|
+
raise DatafileValidationError(
|
|
294
|
+
f"Copy node {repr(node['name'])} has an invalid attribute ({CopyParameters.canonical_name(key)})"
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
def validate_materialized_node(self, node: Dict[str, Any]):
|
|
298
|
+
if missing := [param for param in MaterializedParameters.required_params() if param not in node]:
|
|
299
|
+
raise DatafileValidationError(
|
|
300
|
+
f"Some materialized node params have been provided, but the following required ones are missing: {missing}"
|
|
301
|
+
)
|
|
302
|
+
for key in node.keys():
|
|
303
|
+
if key not in MaterializedParameters.valid_params():
|
|
304
|
+
raise DatafileValidationError(
|
|
305
|
+
f"Materialized node {repr(node['name'])} has an invalid attribute ({MaterializedParameters.canonical_name(key)})"
|
|
306
|
+
)
|
|
243
307
|
|
|
244
308
|
def validate(self):
|
|
245
309
|
if self.kind == DatafileKind.pipe:
|
|
@@ -250,19 +314,21 @@ class Datafile:
|
|
|
250
314
|
# [x] Only one materialized node
|
|
251
315
|
# [x] Only one node of any specific type
|
|
252
316
|
# (rbarbadillo): there's a HUGE amount of validations in api_pipes.py, we should somehow merge them
|
|
253
|
-
for node in self.nodes:
|
|
254
|
-
if "sql" not in node:
|
|
255
|
-
raise DatafileValidationError(f"SQL missing for node {repr(node['name'])}")
|
|
256
317
|
non_standard_nodes_count = 0
|
|
257
318
|
for node in self.nodes:
|
|
258
|
-
|
|
319
|
+
node_type = node.get("type", "").lower()
|
|
320
|
+
if node_type not in {PipeNodeTypes.STANDARD, ""}:
|
|
259
321
|
non_standard_nodes_count += 1
|
|
260
322
|
if non_standard_nodes_count > 1:
|
|
261
323
|
raise DatafileValidationError("Multiple non-standard nodes in pipe. There can only be one")
|
|
262
|
-
if
|
|
263
|
-
|
|
264
|
-
if
|
|
324
|
+
if node_type == PipeNodeTypes.MATERIALIZED:
|
|
325
|
+
self.validate_materialized_node(node)
|
|
326
|
+
if node_type == PipeNodeTypes.COPY:
|
|
265
327
|
self.validate_copy_node(node)
|
|
328
|
+
if node_type not in VALID_PIPE_NODE_TYPES:
|
|
329
|
+
raise DatafileValidationError(
|
|
330
|
+
f"Invalid node type ({node_type}) in pipe {repr(node['name'])}. Allowed node types: {VISIBLE_PIPE_NODE_TYPES}"
|
|
331
|
+
)
|
|
266
332
|
for token in self.tokens:
|
|
267
333
|
if token["permission"].upper() != "READ":
|
|
268
334
|
raise DatafileValidationError(
|
|
@@ -289,17 +355,15 @@ class Datafile:
|
|
|
289
355
|
f"Invalid permission {token['permission']} for token {token['token_name']}. Only READ and APPEND are allowed for datasources"
|
|
290
356
|
)
|
|
291
357
|
# Validate Kafka params
|
|
292
|
-
if any(param in node for param in KAFKA_PARAMS) and
|
|
293
|
-
param in
|
|
358
|
+
if any(param in node for param in KAFKA_PARAMS) and (
|
|
359
|
+
missing := [param for param in REQUIRED_KAFKA_PARAMS if param not in node]
|
|
294
360
|
):
|
|
295
|
-
missing = [param for param in REQUIRED_KAFKA_PARAMS if param not in node]
|
|
296
361
|
raise DatafileValidationError(
|
|
297
362
|
f"Some Kafka params have been provided, but the following required ones are missing: {missing}"
|
|
298
363
|
)
|
|
299
364
|
# Validate S3 params
|
|
300
365
|
if any(param in node for param in BLOB_STORAGE_PARAMS):
|
|
301
|
-
if
|
|
302
|
-
missing = [param for param in REQUIRED_BLOB_STORAGE_PARAMS if param not in node]
|
|
366
|
+
if missing := [param for param in REQUIRED_BLOB_STORAGE_PARAMS if param not in node]:
|
|
303
367
|
raise DatafileValidationError(
|
|
304
368
|
f"Some connection params have been provided, but the following required ones are missing: {missing}"
|
|
305
369
|
)
|
|
@@ -53,7 +53,7 @@ def format_include(file_parts: List[str], doc: Datafile, unroll_includes: bool =
|
|
|
53
53
|
assert doc.raw is not None
|
|
54
54
|
|
|
55
55
|
include = [line for line in doc.raw if "INCLUDE" in line and ".incl" in line]
|
|
56
|
-
if
|
|
56
|
+
if include:
|
|
57
57
|
file_parts.append(include[0])
|
|
58
58
|
file_parts.append(DATAFILE_NEW_LINE)
|
|
59
59
|
return file_parts
|
|
@@ -107,8 +107,8 @@ async def datasource_ls(ctx: Context, match: Optional[str], format_: str):
|
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
@datasource.command(name="append")
|
|
110
|
-
@click.argument("datasource_name")
|
|
111
|
-
@click.argument("url", nargs=-1)
|
|
110
|
+
@click.argument("datasource_name", required=True)
|
|
111
|
+
@click.argument("url", nargs=-1, required=True)
|
|
112
112
|
@click.option("--concurrency", help="How many files to submit concurrently", default=1, hidden=True)
|
|
113
113
|
@click.pass_context
|
|
114
114
|
@coro
|
|
@@ -137,8 +137,8 @@ async def datasource_append(
|
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
@datasource.command(name="replace")
|
|
140
|
-
@click.argument("datasource_name")
|
|
141
|
-
@click.argument("url", nargs=-1)
|
|
140
|
+
@click.argument("datasource_name", required=True)
|
|
141
|
+
@click.argument("url", nargs=-1, required=True)
|
|
142
142
|
@click.option("--sql-condition", default=None, help="SQL WHERE condition to replace data", hidden=True)
|
|
143
143
|
@click.option("--skip-incompatible-partition-key", is_flag=True, default=False, hidden=True)
|
|
144
144
|
@click.pass_context
|
|
@@ -317,7 +317,7 @@ def test_run_summary(results: List[TestSummaryResults], only_fail: bool = False,
|
|
|
317
317
|
if test.error:
|
|
318
318
|
click.secho(test.error, fg=test.status.color, bold=True, nl=True, err=True)
|
|
319
319
|
|
|
320
|
-
if
|
|
320
|
+
if total_counts:
|
|
321
321
|
click.echo("\nTotals:")
|
|
322
322
|
for key_status, value_total in total_counts.items():
|
|
323
323
|
code_summary = f"Total {key_status.description}: {value_total}"
|
|
@@ -5,14 +5,14 @@ tinybird/feedback_manager.py,sha256=1INQFfRfuMCb9lfB8KNf4r6qC2khW568hoHjtk-wshI,
|
|
|
5
5
|
tinybird/git_settings.py,sha256=Sw_8rGmribEFJ4Z_6idrVytxpFYk7ez8ei0qHULzs3E,3934
|
|
6
6
|
tinybird/prompts.py,sha256=yLXzHB7_P0zjriIvI9UsfnIRwmcwLSEA1tcJMzYJqjw,36456
|
|
7
7
|
tinybird/sql.py,sha256=C_B81wwv3BsqyXGhF5oTk9DcTUkrp7NwIFqSzd3Dmjc,47854
|
|
8
|
-
tinybird/sql_template.py,sha256=
|
|
8
|
+
tinybird/sql_template.py,sha256=hWW8JawSWLl9GeWPYkC_Yrxj7P0MHEVMJ0Px9bedEgM,99817
|
|
9
9
|
tinybird/sql_template_fmt.py,sha256=KUHdj5rYCYm_rKKdXYSJAE9vIyXUQLB0YSZnUXHeBlY,10196
|
|
10
10
|
tinybird/sql_toolset.py,sha256=KORVbNAUTfW1qo3U9oe7Z59xQ0QMsFhB0ji3HzY2JVo,15324
|
|
11
11
|
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=X4tE9OrfaUy6kO9cqVEzyI9cDcmOF3IAssRRzsTsfEQ,40781
|
|
15
|
-
tinybird/tb/__cli__.py,sha256=
|
|
15
|
+
tinybird/tb/__cli__.py,sha256=mNNVJC46uQmnvvav2NlnK3gYzkaOlbEhJB0WGPr1imA,247
|
|
16
16
|
tinybird/tb/check_pypi.py,sha256=rW4QmDRbtgKdUUwJCnBkVjmTjZSZGN-XgZhx7vMkC0w,1009
|
|
17
17
|
tinybird/tb/cli.py,sha256=u3eGOhX0MHkuT6tiwaZ0_3twqLmqKXDAOxF7yV_Nn9Q,1075
|
|
18
18
|
tinybird/tb/client.py,sha256=CSBl_JRuioPyY0H8Ac96dJ9wQXDXfrvK2lwqlOxKGoY,55715
|
|
@@ -25,7 +25,7 @@ tinybird/tb/modules/config.py,sha256=ziqW_t_mRVvWOd85VoB4vKyvgMkEfpXDf9H4v38p2xc
|
|
|
25
25
|
tinybird/tb/modules/connection.py,sha256=7oOR7x4PhBcm1ETFFCH2YJ_3oeGXjAbmx1cnZX9_L70,9014
|
|
26
26
|
tinybird/tb/modules/copy.py,sha256=2Mm4FWKehOG7CoOhiF1m9UZJgJn0W1_cMolqju8ONYg,5805
|
|
27
27
|
tinybird/tb/modules/create.py,sha256=_s_vdb9pjq1ORajE_gFMxSGVuns1imNgiD5H8KuI2gQ,17231
|
|
28
|
-
tinybird/tb/modules/datasource.py,sha256=
|
|
28
|
+
tinybird/tb/modules/datasource.py,sha256=mZ9N9LxbNA9QoKSMbxcMiQkdaQkfFqLeFB9_88e3_68,17843
|
|
29
29
|
tinybird/tb/modules/deployment.py,sha256=j-6zGvlAlr__ERRJg98-jEtwpR3ZbUJQeRJIj5YS94I,27070
|
|
30
30
|
tinybird/tb/modules/deprecations.py,sha256=rrszC1f_JJeJ8mUxGoCxckQTJFBCR8wREf4XXXN-PRc,4507
|
|
31
31
|
tinybird/tb/modules/dev_server.py,sha256=57FCKuWpErwYUYgHspYDkLWEm9F4pbvVOtMrFXX1fVU,10129
|
|
@@ -60,11 +60,11 @@ tinybird/tb/modules/datafile/build.py,sha256=d_h3pRFDPFrDKGhpFx2iejY25GuB2k8yfNo
|
|
|
60
60
|
tinybird/tb/modules/datafile/build_common.py,sha256=LU24kAQmxDJIyoIapDaYG-SU3P4FrMG9UBf8m9PgVSI,4565
|
|
61
61
|
tinybird/tb/modules/datafile/build_datasource.py,sha256=nXEQ0qHdq2ai7jJTv8H2d7eeDPBYzLn8VY7zMtOYb8M,17382
|
|
62
62
|
tinybird/tb/modules/datafile/build_pipe.py,sha256=6Cwjf3BKEF3-oQ9PipsQfK-Z43nSwtA4qJAUoysI7Uc,11385
|
|
63
|
-
tinybird/tb/modules/datafile/common.py,sha256=
|
|
63
|
+
tinybird/tb/modules/datafile/common.py,sha256=AYmU8IMKPEzdXNOtWcIrIn_voNncPADR_HzsxERi50g,92197
|
|
64
64
|
tinybird/tb/modules/datafile/diff.py,sha256=MTmj53RYjER4neLgWVjabn-FKVFgh8h8uYiBo55lFQg,6757
|
|
65
65
|
tinybird/tb/modules/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
|
|
66
66
|
tinybird/tb/modules/datafile/fixture.py,sha256=DrRWivcvo_1rn7LlVUnHcXccdgx9yVj63mzBkUwCzk8,1420
|
|
67
|
-
tinybird/tb/modules/datafile/format_common.py,sha256=
|
|
67
|
+
tinybird/tb/modules/datafile/format_common.py,sha256=1V1ZQuphp8EH2hT-IfZQEgz_0b9QqY177nwX8aMUte4,1962
|
|
68
68
|
tinybird/tb/modules/datafile/format_datasource.py,sha256=iWbeXruxC7OBmjNgurWt6ymcJlYzxfKwkGnhpcoSKEo,6190
|
|
69
69
|
tinybird/tb/modules/datafile/format_pipe.py,sha256=DUGdmlzI146YDqTwW-7kSIOXocz4AH-md_LFGUm9hrc,7436
|
|
70
70
|
tinybird/tb/modules/datafile/parse_datasource.py,sha256=p-qSdmDF7xbXt4PrQQc8q8aFa93kVbLpU4hIi6d3QH4,1764
|
|
@@ -72,7 +72,7 @@ tinybird/tb/modules/datafile/parse_pipe.py,sha256=WuQlYW51tflbcp2iFapJ7bxa9IkegD
|
|
|
72
72
|
tinybird/tb/modules/datafile/pipe_checker.py,sha256=xv7vyjN5dPc2hcw9RnLBq2VkR4nte-8bhYDT10qceQY,24620
|
|
73
73
|
tinybird/tb/modules/datafile/playground.py,sha256=94tOydeg5iQ3TQAdEWQWxLhx5Emz6xh0bEwLSao44-Y,56568
|
|
74
74
|
tinybird/tb/modules/datafile/pull.py,sha256=l6bIglY8b-tTIWgEYezf4kXjS0QHAVz4iOWLuNwe7Ps,5970
|
|
75
|
-
tinybird/tb/modules/tinyunit/tinyunit.py,sha256=
|
|
75
|
+
tinybird/tb/modules/tinyunit/tinyunit.py,sha256=qc3OHiXYSOv3TQCFRYrMnR47xJbUH0LnV4FBcBtWN1s,11713
|
|
76
76
|
tinybird/tb/modules/tinyunit/tinyunit_lib.py,sha256=hGh1ZaXC1af7rKnX7222urkj0QJMhMWclqMy59dOqwE,1922
|
|
77
77
|
tinybird/tb_cli_modules/cicd.py,sha256=0lMkb6CVOFZl5HOwgY8mK4T4mgI7O8335UngLXtCc-c,13851
|
|
78
78
|
tinybird/tb_cli_modules/common.py,sha256=G08f1_x5YSB6n-ncRj4tB2jhtjAjlWN-QD4xMWbTNQU,83033
|
|
@@ -80,8 +80,8 @@ tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4
|
|
|
80
80
|
tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
|
|
81
81
|
tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
|
|
82
82
|
tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
|
|
83
|
-
tinybird-0.0.1.
|
|
84
|
-
tinybird-0.0.1.
|
|
85
|
-
tinybird-0.0.1.
|
|
86
|
-
tinybird-0.0.1.
|
|
87
|
-
tinybird-0.0.1.
|
|
83
|
+
tinybird-0.0.1.dev175.dist-info/METADATA,sha256=eEO3ZslBJ4cRAUYq881Y5_TU1QyHEbAOC_QAdwYnpPo,1607
|
|
84
|
+
tinybird-0.0.1.dev175.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
85
|
+
tinybird-0.0.1.dev175.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
|
|
86
|
+
tinybird-0.0.1.dev175.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
|
|
87
|
+
tinybird-0.0.1.dev175.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|