4949
5050from requests .exceptions import SSLError
5151from labkey .utils import build_url , handle_response
52+ from labkey .exceptions import ServerContextError
5253
5354
5455_query_headers = {
5960
6061
6162class Pagination :
63+ """
64+ Enum of paging styles
65+ """
6266 PAGINATED = 'paginated'
6367 SELECTED = 'selected'
6468 UNSELECTED = 'unselected'
6569 ALL = 'all'
6670 NONE = 'none'
6771
6872
69- def delete_rows (server_context , schema_name , query_name , rows , container_path = None , transacted = None , timeout = _default_timeout ):
73+ def delete_rows (server_context , schema_name , query_name , rows , container_path = None , timeout = _default_timeout ):
74+ """
75+ Delete a set of rows from the schema.query
76+ :param server_context: A LabKey server context. See utils.create_server_context.
77+ :param schema_name: schema of table
78+ :param query_name: table name to delete from
79+ :param rows: Set of rows to delete
80+ :param container_path: labkey container path if not already set in context
81+ :param timeout: timeout of request in seconds (defaults to 30s)
82+ :return:
83+ """
7084 url = build_url (server_context , 'query' , 'deleteRows.api' , container_path = container_path )
7185
7286 payload = {
@@ -76,7 +90,8 @@ def delete_rows(server_context, schema_name, query_name, rows, container_path=No
7690 }
7791
7892 # explicit json payload and headers required for form generation
79- delete_rows_response = _make_request (server_context , url , json .dumps (payload ), headers = _query_headers , timeout = timeout )
93+ delete_rows_response = _make_request (server_context , url , json .dumps (payload , sort_keys = True ),
94+ headers = _query_headers , timeout = timeout )
8095 return delete_rows_response
8196
8297
@@ -89,6 +104,24 @@ def execute_sql(server_context, schema_name, sql, container_path=None,
89104 parameters = None ,
90105 required_version = None ,
91106 timeout = _default_timeout ):
107+ """
108+ Execute a string a labkey sql against a LabKey server.
109+
110+ :param server_context: A LabKey server context. See utils.create_server_context.
111+ :param schema_name: schema of table
112+ :param sql: String of labkey sql to execute
113+ :param container_path: labkey container path if not already set in context
114+ :param max_rows: max number of rows to return
115+ :param sort: comma separated list of column names to sort by
116+ :param offset: number of rows to offset results by
117+ :param container_filter: enumeration of the various container filters available. See:
118+ https://www.labkey.org/download/clientapi_docs/javascript-api/symbols/LABKEY.Query.html#.containerFilter
119+ :param save_in_session: save query result as a named view to the session
120+ :param parameters: parameter values to pass through to a parameterized query
121+ :param required_version: Api version of response
122+ :param timeout: timeout of request in seconds (defaults to 30s)
123+ :return:
124+ """
92125 url = build_url (server_context , 'query' , 'executeSql.api' , container_path = container_path )
93126
94127 payload = {
@@ -122,6 +155,16 @@ def execute_sql(server_context, schema_name, sql, container_path=None,
122155
123156
124157def insert_rows (server_context , schema_name , query_name , rows , container_path = None , timeout = _default_timeout ):
158+ """
159+ Insert row(s) into table
160+ :param server_context: A LabKey server context. See utils.create_server_context.
161+ :param schema_name: schema of table
162+ :param query_name: table name to insert into
163+ :param rows: set of rows to insert
164+ :param container_path: labkey container path if not already set in context
165+ :param timeout: timeout of request in seconds (defaults to 30s)
166+ :return:
167+ """
125168 url = build_url (server_context , 'query' , 'insertRows.api' , container_path = container_path )
126169
127170 payload = {
@@ -131,7 +174,8 @@ def insert_rows(server_context, schema_name, query_name, rows, container_path=No
131174 }
132175
133176 # explicit json payload and headers required for form generation
134- insert_rows_response = _make_request (server_context , url , json .dumps (payload ), headers = _query_headers , timeout = timeout )
177+ insert_rows_response = _make_request (server_context , url , json .dumps (payload , sort_keys = True ),
178+ headers = _query_headers , timeout = timeout )
135179 return insert_rows_response
136180
137181
@@ -152,6 +196,30 @@ def select_rows(server_context, schema_name, query_name, view_name=None,
152196 required_version = None ,
153197 timeout = _default_timeout
154198 ):
199+ """
200+ Query data from a labkey server
201+ :param server_context: A LabKey server context. See utils.create_server_context.
202+ :param schema_name: schema of table
203+ :param query_name: table name to select from
204+ :param view_name: pre-existing named view
205+ :param filter_array: set of filter objects to apply
206+ :param container_path: folder path if not already part of server_context
207+ :param columns: set of columns to retrieve
208+ :param max_rows: max number of rows to retrieve
209+ :param sort: comma separated list of column names to sort by, prefix a column with '-' to sort descending
210+ :param offset: number of rows to offset results by
211+ :param container_filter: enumeration of the various container filters available. See:
212+ https://www.labkey.org/download/clientapi_docs/javascript-api/symbols/LABKEY.Query.html#.containerFilter
213+ :param parameters: Set of parameters to pass along to a parameterized query
214+ :param show_rows: An enumeration of various paging styles
215+ :param include_total_count: Boolean value that indicates whether to include a total count value in response
216+ :param include_details_column: Boolean value that indicates whether to include a Details link column in results
217+ :param include_update_column: Boolean value that indicates whether to include an Update link column in results
218+ :param selection_key:
219+ :param required_version: decimal value that indicates the response version of the api
220+ :param timeout: Request timeout in seconds (defaults to 30s)
221+ :return:
222+ """
155223 # TODO: Support data_region_name
156224 url = build_url (server_context , 'query' , 'getQuery.api' , container_path = container_path )
157225
@@ -210,6 +278,17 @@ def select_rows(server_context, schema_name, query_name, view_name=None,
210278
211279
212280def update_rows (server_context , schema_name , query_name , rows , container_path = None , timeout = _default_timeout ):
281+ """
282+ Update a set of rows
283+
284+ :param server_context: A LabKey server context. See utils.create_server_context.
285+ :param schema_name: schema of table
286+ :param query_name: table name to update
287+ :param rows: Set of rows to update
288+ :param container_path: labkey container path if not already set in context
289+ :param timeout: timeout of request in seconds (defaults to 30s)
290+ :return:
291+ """
213292 url = build_url (server_context , 'query' , 'updateRows.api' , container_path = container_path )
214293
215294 payload = {
@@ -219,7 +298,8 @@ def update_rows(server_context, schema_name, query_name, rows, container_path=No
219298 }
220299
221300 # explicit json payload and headers required for form generation
222- update_rows_response = _make_request (server_context , url , json .dumps (payload ), headers = _query_headers , timeout = timeout )
301+ update_rows_response = _make_request (server_context , url , json .dumps (payload , sort_keys = True ),
302+ headers = _query_headers , timeout = timeout )
223303 return update_rows_response
224304
225305
@@ -229,7 +309,7 @@ def _make_request(server_context, url, payload, headers=None, timeout=_default_t
229309 raw_response = session .post (url , data = payload , headers = headers , timeout = timeout )
230310 return handle_response (raw_response )
231311 except SSLError as e :
232- raise Exception ( 'Failed to match server SSL configuration. Ensure the server_context is configured correctly.' )
312+ raise ServerContextError ( e )
233313
234314
235315# TODO: Provide filter generators.
@@ -240,8 +320,13 @@ def _make_request(server_context, url, payload, headers=None, timeout=_default_t
240320#
241321# https://www.labkey.org/download/clientapi_docs/javascript-api/symbols/LABKEY.Filter.html
242322class QueryFilter :
243-
323+ """
324+ Filter object to simplify generation of query filters
325+ """
244326 class Types :
327+ """
328+ Enumeration of acceptable filter types
329+ """
245330 HAS_ANY_VALUE = '' ,
246331
247332 EQUAL = 'eq' ,
0 commit comments