11import typer
22import os
33import json
4+ import ast
45from typer import Exit
56from devolv .iam .validator .core import validate_policy_file
67from devolv .iam .validator .folder import validate_policy_folder
@@ -17,6 +18,7 @@ def validate(
1718 typer .secho (f"❌ File not found: { path } " , fg = typer .colors .RED )
1819 raise Exit (code = 1 )
1920
21+ findings = []
2022 if os .path .isfile (path ):
2123 findings = validate_policy_file (path )
2224 elif os .path .isdir (path ):
@@ -38,10 +40,25 @@ def validate(
3840 typer .echo (json .dumps (findings , indent = 2 ))
3941 else :
4042 for finding in findings :
41- typer .secho (
42- f"❌ { finding .get ('level' , '' ).upper ()} : { finding .get ('message' , '' )} " ,
43- fg = typer .colors .RED
44- )
43+ msg = finding .get ('message' , '' )
44+ try :
45+ inner_findings = ast .literal_eval (msg ) if isinstance (msg , str ) else msg
46+ if isinstance (inner_findings , list ):
47+ for inner in inner_findings :
48+ typer .secho (
49+ f"❌ { inner .get ('level' , '' ).upper ()} : { inner .get ('message' , '' )} " ,
50+ fg = typer .colors .RED
51+ )
52+ else :
53+ typer .secho (
54+ f"❌ { finding .get ('level' , '' ).upper ()} : { msg } " ,
55+ fg = typer .colors .RED
56+ )
57+ except Exception :
58+ typer .secho (
59+ f"❌ { finding .get ('level' , '' ).upper ()} : { msg } " ,
60+ fg = typer .colors .RED
61+ )
4562
4663 if any (f .get ("level" , "" ).lower () in ("error" , "high" ) for f in findings ):
4764 raise Exit (code = 1 )
0 commit comments