Skip to content

Commit f339649

Browse files
authored
Merge pull request #6 from bytesnz/add-check-policy-rule
WIP: Add check_policy_rule function
2 parents eca808a + ee74bd9 commit f339649

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
@@ -284,6 +284,13 @@ def check_permission(self, input_data: dict, policy_name: str, rule_name: str) -
284284

285285
return self.__check(input_data, policy_name, rule_name)
286286

287+
def check_policy_rule(self, input_data: dict, package_path: str, rule_name: str = None) -> dict:
288+
"""
289+
Queries a package rule with the given input data
290+
"""
291+
292+
return self.__query(input_data, package_path, rule_name)
293+
287294
def __get_opa_raw_data(self, data_name: str):
288295
url = self.__data_root.format(self.__root_url, data_name)
289296

@@ -482,6 +489,25 @@ def __check(self, input_data: dict, policy_name: str, rule_name: str) -> dict:
482489
data = json.loads(response.data.decode("utf-8"))
483490
return data
484491

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

0 commit comments

Comments
 (0)