Skip to content

Commit dbddc08

Browse files
committed
get_queries: remove GetQueriesOptions, convert to kwargs, use transform_options
1 parent 229ff7c commit dbddc08

File tree

2 files changed

+67
-25
lines changed

2 files changed

+67
-25
lines changed

labkey/query.py

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
from typing import List, Literal, NotRequired, TextIO, TypedDict
4747

4848
from .server_context import ServerContext
49-
from .utils import waf_encode
49+
from .utils import waf_encode, transform_options
5050

5151
_default_timeout = 60 * 5 # 5 minutes
5252

@@ -706,38 +706,49 @@ def move_rows(
706706
)
707707

708708

709-
@dataclass
710-
class GetQueriesOptions:
711-
include_columns: bool
712-
include_system_queries: bool
713-
include_title: bool
714-
include_user_queries: bool
715-
include_view_data_url: bool
716-
query_detail_columns: bool
717-
718-
def as_dict(self):
719-
return {
720-
"includeColumns": self.include_columns,
721-
"includeSystemQueries": self.include_system_queries,
722-
"includeTitle": self.include_title,
723-
"includeUserQueries": self.include_user_queries,
724-
"includeViewDataUrl": self.include_view_data_url,
725-
"queryDetailColumns": self.query_detail_columns,
726-
}
709+
get_queries_fields = [
710+
"schema_name",
711+
"include_columns",
712+
"include_system_queries",
713+
"include_title",
714+
"include_user_queries",
715+
"include_view_data_url",
716+
"query_detail_columns",
717+
]
727718

728719

729720
def get_queries(
730721
server_context: ServerContext,
731722
schema_name: str,
732723
container_path: str = None,
733-
options: GetQueriesOptions = None,
734724
timeout=_default_timeout,
725+
**kwargs,
735726
) -> dict:
727+
"""
728+
:param server_context: A LabKey server context. See utils.create_server_context.
729+
:param schema_name: schema of table
730+
:param container_path: folder path if not already part of server_context
731+
:param timeout: Request timeout in seconds (defaults to 300s)
732+
:param kwargs: Optional parameters supported by this API:
733+
include_columns: boolean, if set to False, information about the available columns in this query will not be
734+
included in the results. Default is True.
735+
include_system_queries: boolean, if set to false, system-defined queries will not be included in the results.
736+
Default is True.
737+
include_title: boolean, if set to False, no custom query titles will be included. Instead, titles will be
738+
identical to names. Default is True.
739+
include_user_queries: boolean, if set to False, user-defined queries will not be included in the results.
740+
Default is True.
741+
include_view_data_url: boolean, if set to False, view data URLs will not be included in the results.
742+
Default is True.
743+
query_detail_columns: boolean, if set to True, and includeColumns is set to True, information about the
744+
available columns will be the same details as specified by getQueryDetails for columns. Defaults to False.
745+
:return: dict
746+
"""
736747
url = server_context.build_url("query", "getQueries.api", container_path=container_path)
737748
payload = {"schemaName": schema_name}
738749

739-
if options is not None:
740-
payload = {*payload, *options.as_dict()}
750+
if len(kwargs) > 0:
751+
payload = {**payload, **transform_options(kwargs, get_queries_fields)}
741752

742753
return server_context.make_request(url, payload, timeout=timeout)
743754

@@ -983,7 +994,23 @@ def get_queries(
983994
self,
984995
schema_name: str,
985996
container_path: str = None,
986-
options: GetQueriesOptions = None,
997+
include_columns: bool = None,
998+
include_system_queries: bool = None,
999+
include_title: bool = None,
1000+
include_user_queries: bool = None,
1001+
include_view_data_url: bool = None,
1002+
query_detail_columns: bool = None,
9871003
timeout=_default_timeout,
9881004
):
989-
return get_queries(self.server_context, schema_name, container_path, options, timeout)
1005+
return get_queries(
1006+
self.server_context,
1007+
schema_name,
1008+
container_path,
1009+
timeout,
1010+
include_columns=include_columns,
1011+
include_system_queries=include_system_queries,
1012+
include_title=include_title,
1013+
include_user_queries=include_user_queries,
1014+
include_view_data_url=include_view_data_url,
1015+
query_detail_columns=query_detail_columns,
1016+
)

test/integration/test_query.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,22 @@ def test_api_save_rows(api: APIWrapper, blood_sample_type_fixture, tissue_sample
434434
def test_get_queries(api: APIWrapper):
435435
resp = api.query.get_queries("core")
436436

437+
all_queries_count = len(resp["queries"])
437438
assert set(resp.keys()) == {"schemaName", "queries"}
438439
assert resp["schemaName"] == "core"
439-
assert len(resp["queries"]) > 0
440+
assert all_queries_count > 0
440441
assert set(resp["queries"][0].keys()) == set(expected_fields)
442+
443+
resp = api.query.get_queries("core", include_system_queries=False, include_user_queries=False)
444+
445+
assert set(resp.keys()) == {"schemaName", "queries"}
446+
assert resp["schemaName"] == "core"
447+
# By excluding system queries, and user queries, we should have no queries
448+
assert len(resp["queries"]) == 0
449+
450+
resp = api.query.get_queries("core", include_columns=False, include_view_data_url=False)
451+
452+
assert set(resp["queries"][0].keys()) == expected_fields - {
453+
"columns",
454+
"viewDataUrl",
455+
}

0 commit comments

Comments
 (0)