@@ -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