8000 Implemented query rules endpoint · arangodb/python-arango@f24bf6b · GitHub
[go: up one dir, main page]

Skip to content

Commit f24bf6b

Browse files
committed
Implemented query rules endpoint
1 parent 6da57e0 commit f24bf6b

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
@@ -22,6 +22,7 @@
2222
AQLQueryTrackingGetError,
2323
AQLQueryTrackingSetError,
2424
AQLQueryValidateError,
25+
AQLQueryRulesGetError,
2526
)
2627
from arango.executor import ApiExecutor
2728
from arango.formatter import (
@@ -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
@@ -1141,3 +1141,47 @@ def format_query_cache_entry(body: Json) -> Json:
11411141
result["data_sources"] = body["dataSources"]
11421142

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

0 commit comments

Comments
 (0)
0