@@ -284,6 +284,13 @@ def check_permission(self, input_data: dict, policy_name: str, rule_name: str) -
284
284
285
285
return self .__check (input_data , policy_name , rule_name )
286
286
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
+
287
294
def __get_opa_raw_data (self , data_name : str ):
288
295
url = self .__data_root .format (self .__root_url , data_name )
289
296
@@ -482,6 +489,25 @@ def __check(self, input_data: dict, policy_name: str, rule_name: str) -> dict:
482
489
data = json .loads (response .data .decode ("utf-8" ))
483
490
return data
484
491
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
+
485
511
raise CheckPermissionError (
486
512
f"{ rule_name } rule not found" , "policy or rule name not correct"
487
513
)
0 commit comments