laketower 0.6.0__py3-none-any.whl → 0.6.1__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 CHANGED
@@ -1 +1 @@
1
- __version__ = "0.6.0"
1
+ __version__ = "0.6.1"
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, sql_query: str, output_path: Path | None = None
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
- results = execute_query(tables_dataset, sql_query)
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(config_path: Path, query_name: str) -> None:
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
- results = execute_query(tables_dataset, sql_query)
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.set_defaults(func=lambda x: view_query(x.config, x.query))
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