laketower 0.6.0__py3-none-any.whl → 0.6.2__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 laketower might be problematic. Click here for more details.
- laketower/__about__.py +1 -1
- laketower/cli.py +42 -6
- laketower/config.py +6 -0
- laketower/static/editor.bundle.js +27433 -0
- laketower/static/editor.js +74 -0
- laketower/static/vendor/bootstrap/bootstrap.bundle.min.js +7 -0
- laketower/static/vendor/bootstrap-icons/bootstrap-icons.min.css +5 -0
- laketower/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- laketower/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- laketower/static/vendor/halfmoon/halfmoon.min.css +22 -0
- laketower/static/vendor/halfmoon/halfmoon.modern.css +282 -0
- laketower/tables.py +19 -3
- laketower/templates/_base.html +22 -19
- laketower/templates/queries/view.html +18 -4
- laketower/templates/tables/query.html +25 -1
- laketower/web.py +75 -4
- {laketower-0.6.0.dist-info → laketower-0.6.2.dist-info}/METADATA +37 -1
- laketower-0.6.2.dist-info/RECORD +31 -0
- laketower-0.6.0.dist-info/RECORD +0 -23
- {laketower-0.6.0.dist-info → laketower-0.6.2.dist-info}/WHEEL +0 -0
- {laketower-0.6.0.dist-info → laketower-0.6.2.dist-info}/entry_points.txt +0 -0
- {laketower-0.6.0.dist-info → laketower-0.6.2.dist-info}/licenses/LICENSE +0 -0
laketower/__about__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.6.
|
|
1
|
+
__version__ = "0.6.2"
|
laketower/cli.py
CHANGED
|
@@ -15,6 +15,7 @@ from laketower.tables import (
|
|
|
15
15
|
ImportFileFormatEnum,
|
|
16
16
|
ImportModeEnum,
|
|
17
17
|
execute_query,
|
|
18
|
+
extract_query_parameter_names,
|
|
18
19
|
generate_table_query,
|
|
19
20
|
generate_table_statistics_query,
|
|
20
21
|
import_file_to_table,
|
|
@@ -180,13 +181,21 @@ def view_table(
|
|
|
180
181
|
|
|
181
182
|
|
|
182
183
|
def query_table(
|
|
183
|
-
config_path: Path,
|
|
184
|
+
config_path: Path,
|
|
185
|
+
sql_query: str,
|
|
186
|
+
sql_params: list[list[str]] = [],
|
|
187
|
+
output_path: Path | None = None,
|
|
184
188
|
) -> None:
|
|
185
189
|
out: rich.jupyter.JupyterMixin
|
|
186
190
|
try:
|
|
187
191
|
config = load_yaml_config(config_path)
|
|
188
192
|
tables_dataset = load_datasets(config.tables)
|
|
189
|
-
|
|
193
|
+
sql_params_dict = {param[0]: param[1] for param in sql_params}
|
|
194
|
+
query_param_names = extract_query_parameter_names(sql_query)
|
|
195
|
+
query_params = {
|
|
196
|
+
name: sql_params_dict.get(name) or "" for name in query_param_names
|
|
197
|
+
}
|
|
198
|
+
results = execute_query(tables_dataset, sql_query, sql_params=query_params)
|
|
190
199
|
|
|
191
200
|
out = rich.table.Table()
|
|
192
201
|
for column in results.columns:
|
|
@@ -243,14 +252,23 @@ def list_queries(config_path: Path) -> None:
|
|
|
243
252
|
console.print(tree)
|
|
244
253
|
|
|
245
254
|
|
|
246
|
-
def view_query(
|
|
255
|
+
def view_query(
|
|
256
|
+
config_path: Path, query_name: str, query_params: list[list[str]] = []
|
|
257
|
+
) -> None:
|
|
247
258
|
out: rich.jupyter.JupyterMixin
|
|
248
259
|
try:
|
|
249
260
|
config = load_yaml_config(config_path)
|
|
250
261
|
tables_dataset = load_datasets(config.tables)
|
|
251
262
|
query_config = next(filter(lambda x: x.name == query_name, config.queries))
|
|
263
|
+
default_parameters = {k: v.default for k, v in query_config.parameters.items()}
|
|
252
264
|
sql_query = query_config.sql
|
|
253
|
-
|
|
265
|
+
query_params_dict = {param[0]: param[1] for param in query_params}
|
|
266
|
+
sql_param_names = extract_query_parameter_names(sql_query)
|
|
267
|
+
sql_params = {
|
|
268
|
+
name: query_params_dict.get(name) or default_parameters.get(name) or ""
|
|
269
|
+
for name in sql_param_names
|
|
270
|
+
}
|
|
271
|
+
results = execute_query(tables_dataset, sql_query, sql_params=sql_params)
|
|
254
272
|
|
|
255
273
|
out = rich.table.Table()
|
|
256
274
|
for column in results.columns:
|
|
@@ -369,9 +387,17 @@ def cli() -> None:
|
|
|
369
387
|
parser_tables_query.add_argument(
|
|
370
388
|
"--output", help="Output query results to a file (default format: CSV)"
|
|
371
389
|
)
|
|
390
|
+
parser_tables_query.add_argument(
|
|
391
|
+
"--param",
|
|
392
|
+
"-p",
|
|
393
|
+
nargs=2,
|
|
394
|
+
action="append",
|
|
395
|
+
default=[],
|
|
396
|
+
help="Inject query named parameters values",
|
|
397
|
+
)
|
|
372
398
|
parser_tables_query.add_argument("sql", help="SQL query to execute")
|
|
373
399
|
parser_tables_query.set_defaults(
|
|
374
|
-
func=lambda x: query_table(x.config, x.sql, x.output)
|
|
400
|
+
func=lambda x: query_table(x.config, x.sql, x.param, x.output)
|
|
375
401
|
)
|
|
376
402
|
|
|
377
403
|
parser_tables_import = subsparsers_tables.add_parser(
|
|
@@ -419,7 +445,17 @@ def cli() -> None:
|
|
|
419
445
|
"view", help="View a given query"
|
|
420
446
|
)
|
|
421
447
|
parser_queries_view.add_argument("query", help="Name of the query")
|
|
422
|
-
parser_queries_view.
|
|
448
|
+
parser_queries_view.add_argument(
|
|
449
|
+
"--param",
|
|
450
|
+
"-p",
|
|
451
|
+
nargs=2,
|
|
452
|
+
action="append",
|
|
453
|
+
default=[],
|
|
454
|
+
help="Inject query named parameters values",
|
|
455
|
+
)
|
|
456
|
+
parser_queries_view.set_defaults(
|
|
457
|
+
func=lambda x: view_query(x.config, x.query, x.param)
|
|
458
|
+
)
|
|
423
459
|
|
|
424
460
|
args = parser.parse_args()
|
|
425
461
|
args.func(args)
|
laketower/config.py
CHANGED
|
@@ -96,9 +96,15 @@ class ConfigTable(pydantic.BaseModel):
|
|
|
96
96
|
connection: ConfigTableConnection | None = None
|
|
97
97
|
|
|
98
98
|
|
|
99
|
+
class ConfigQueryParameter(pydantic.BaseModel):
|
|
100
|
+
default: str
|
|
101
|
+
|
|
102
|
+
|
|
99
103
|
class ConfigQuery(pydantic.BaseModel):
|
|
100
104
|
name: str
|
|
101
105
|
title: str
|
|
106
|
+
description: str | None = None
|
|
107
|
+
parameters: dict[str, ConfigQueryParameter] = {}
|
|
102
108
|
sql: str
|
|
103
109
|
|
|
104
110
|
|