Skip to content

Commit ee74bd9

Browse files
committed
Add check_policy_rule function
1 parent b9b19b6 commit ee74bd9

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

opa_client/opa.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,13 @@ def check_permission(self, input_data: dict, policy_name: str, rule_name: str) -
278278

279279
return self.__check(input_data, policy_name, rule_name)
280280

281+
def check_policy_rule(self, input_data: dict, package_path: str, rule_name: str = None) -> dict:
282+
"""
283+
Queries a package rule with the given input data
284+
"""
285+
286+
return self.__query(input_data, package_path, rule_name)
287+
281288
def __get_opa_raw_data(self, data_name: str):
282289
url = self.__data_root.format(self.__root_url, data_name)
283290

@@ -476,6 +483,25 @@ def __check(self, input_data: dict, policy_name: str, rule_name: str) -> dict:
476483
data = json.loads(response.data.decode("utf-8"))
477484
return data
478485

486+
raise CheckPermissionError(
487+
f"{rule_name} rule not found", "path or rule name not correct"
488+
)
489+
490+
def __query(self, input_data: dict, package_path: str, rule_name: str = None) -> dict:
491+
if '.' in package_path:
492+
package_path = package_path.replace('.', '/')
493+
if rule_name:
494+
package_path = package_path + '/' + rule_name
495+
url = self.__data_root.format(self.__root_url, package_path)
496+
497+
encoded_json = json.dumps({ 'input': input_data }).encode("utf-8")
498+
response = self.__session(
499+
"POST", url, body=encoded_json, retries=2, timeout=1.5
500+
)
501+
if response.data:
502+
data = json.loads(response.data.decode("utf-8"))
503+
return data
504+
479505
raise CheckPermissionError(
480506
f"{rule_name} rule not found", "policy or rule name not correct"
481507
)

0 commit comments

Comments
 (0)