8000 Implement query rules endpoint for ArangoDB version 3.10 (#216) · arangodb/python-arango@eba6517 · GitHub
[go: up one dir, main page]

Skip to content

Commit eba6517

Browse files
authored
Implement query rules endpoint for ArangoDB version 3.10 (#216)
1 parent 17f4e49 commit eba6517

File tree

3 files changed

+71
-0
lines changed

3 files changed

+71
-0
lines changed

arango/aql.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
AQLQueryExplainError,
2020
AQLQueryKillError,
2121
AQLQueryListError,
22+
AQLQueryRulesGetError,
2223
AQLQueryTrackingGetError,
2324
AQLQueryTrackingSetError,
2425
AQLQueryValidateError,
@@ -30,6 +31,7 @@
3031
format_aql_tracking,
3132
format_body,
3233
format_query_cache_entry,
34+
format_query_rule_item,
3335
)
3436
from arango.request import Request
3537
from arango.response import Response
@@ -632,3 +634,24 @@ def response_handler(resp: Response) -> Union[bool, Json]:
632634
return {"deleted": resp.body["deletedCount"]}
633635

634636
return self._execute(request, response_handler)
637+
638+
def query_rules(self) -> Result[Jsons]:
639+
"""Return the available optimizer rules for AQL queries
640+
641+
:return: The available optimizer rules for AQL queries
642+
:rtype: dict
643+
:raise arango.exceptions.AQLQueryRulesGetError: If retrieval fails.
644+
"""
645+
request = Request(method="get", endpoint="/_api/query/rules")
646+
647+
def response_handler(resp: Response) -> Jsons:
648+
if not resp.is_success:
649+
raise AQLQueryRulesGetError(resp, request)
650+
651+
rules: Jsons = resp.body
652+
items: Jsons = []
653+
for rule in rules:
654+
items.append(format_query_rule_item(rule))
655+
return items
656+
657+
return self._execute(request, response_handler)

arango/exceptions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,10 @@ class AQLFunctionDeleteError(ArangoServerError):
153153
"""Failed to delete AQL user function."""
154154

155155

156+
class AQLQueryRulesGetError(ArangoServerError):
157+
"""Failed to retrieve AQL query rules."""
158+
159+
156160
##############################
157161
# Async Execution Exceptions #
158162
##############################

arango/formatter.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,3 +1147,47 @@ def format_query_cache_entry(body: Json) -> Json:
11471147
result["data_sources"] = body["dataSources"]
11481148

11491149
return verify_format(body, result)
1150+
1151+
1152+
def format_query_rule_item(body: Json) -> Json:
1153+
"""Format AQL query rule item.
1154+
1155+
:param body: Input body.
1156+
:type body: dict
1157+
:return: Formatted body.
1158+
:rtype: dict
1159+
"""
1160+
result = {}
1161+
1162+
if "name" in body:
1163+
result["name"] = body["name"]
1164+
if "flags" in body:
1165+
result["flags"] = format_query_rule_item_flags(body["flags"])
1166+
1167+
return verify_format(body, result)
1168+
1169+
1170+
def format_query_rule_item_flags(body: Json) -> Json:
1171+
"""Format AQL query rule item flags.
1172+
1173+
:param body: Input body.
1174+
:type body: dict
1175+
:return: Formatted body.
1176+
:rtype: dict
1177+
"""
1178+
result = {}
1179+
1180+
if "hidden" in body:
1181+
result["hidden"] = body["hidden"]
1182+
if "clusterOnly" in body:
1183+
result["clusterOnly"] = body["clusterOnly"]
1184+
if "canBeDisabled" in body:
1185+
result["canBeDisabled"] = body["canBeDisabled"]
1186+
if "canCreateAdditionalPlans" in body:
1187+
result["canCreateAdditionalPlans"] = body["canCreateAdditionalPlans"]
1188+
if "disabledByDefault" in body:
1189+
result["disabledByDefault"] = body["disabledByDefault"]
1190+
if "enterpriseOnly" in body:
1191+
result["enterpriseOnly"] = body["enterpriseOnly"]
1192+
1193+
return verify_format(body, result)

0 commit comments

Comments
 (0)
0