@@ -278,6 +278,13 @@ def check_permission(self, input_data: dict, policy_name: str, rule_name: str) -
278
278
279
279
return self .__check (input_data , policy_name , rule_name )
280
280
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
+
281
288
def __get_opa_raw_data (self , data_name : str ):
282
289
url = self .__data_root .format (self .__root_url , data_name )
283
290
@@ -476,6 +483,25 @@ def __check(self, input_data: dict, policy_name: str, rule_name: str) -> dict:
476
483
data = json .loads (response .data .decode ("utf-8" ))
477
484
return data
478
485
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
+
479
505
raise CheckPermissionError (
480
506
f"{ rule_name } rule not found" , "policy or rule name not correct"
481
507
)
0 commit comments