44
55from .lint import Linter
66from .logo import logo
7+ from .utilities import format_verbose_error
78
89
910def link_asset_message (
@@ -88,15 +89,18 @@ def intro_message(linter: Linter) -> None:
8889 click .secho ()
8990
9091 click .secho (
91- f"Validator: stac-validator { linter .validator_version } " , bg = "blue" , fg = "white"
92+ f"\n Validator: stac-validator { linter .validator_version } " ,
93+ bold = True ,
94+ bg = "black" ,
95+ fg = "white" ,
9296 )
9397
9498 # Always show validation method
9599 validation_method = (
96100 "Pydantic" if hasattr (linter , "pydantic" ) and linter .pydantic else "JSONSchema"
97101 )
98102 click .secho ()
99- click .secho (f"Validation method: { validation_method } " , bg = "yellow " , fg = "black " )
103+ click .secho (f"\n Validation method: { validation_method } " , bg = "black " , fg = "white " )
100104
101105 click .secho ()
102106
@@ -137,7 +141,7 @@ def cli_message(linter: Linter) -> None:
137141 click .secho ()
138142 for message in linter .best_practices_msg :
139143 if message == linter .best_practices_msg [0 ]:
140- click .secho (message , bg = "blue" )
144+ click .secho (" \n " + message , bg = "blue" )
141145 else :
142146 click .secho (message , fg = "red" )
143147
@@ -146,7 +150,7 @@ def cli_message(linter: Linter) -> None:
146150 click .secho ()
147151 for message in linter .geometry_errors_msg :
148152 if message == linter .geometry_errors_msg [0 ]:
149- click .secho (message , bg = "yellow" , fg = "black" )
153+ click .secho (" \n " + message , bg = "yellow" , fg = "black" )
150154 else :
151155 click .secho (message , fg = "red" )
152156
@@ -176,14 +180,36 @@ def cli_message(linter: Linter) -> None:
176180 link_asset_message (linter .invalid_link_request , "link" , "request" , True )
177181
178182 if linter .error_type != "" :
183+ click .secho ()
184+ click .secho ("\n Validation Errors: " , fg = "white" , bold = True , bg = "black" )
179185 click .secho ("Validation error type: " , fg = "red" )
180186 click .secho (f" { linter .error_type } " )
187+ click .secho ()
181188
182189 if linter .error_msg != "" :
183190 click .secho ("Validation error message: " , fg = "red" )
184191 click .secho (f" { linter .error_msg } " )
192+ click .secho ()
193+
194+ if linter .error_msg != "" and linter .verbose_error_msg == "" :
195+ click .secho ("Refer to --verbose for more details." , fg = "blue" )
196+ click .secho ()
197+
198+ if linter .verbose_error_msg :
199+ click .secho ()
200+ click .secho ("\n Verbose Validation Output: " , fg = "white" , bg = "red" )
185201
186- click .secho (f"This object has { len (linter .data ['links' ])} links" )
202+ if isinstance (linter .verbose_error_msg , dict ):
203+ formatted_error = format_verbose_error (linter .verbose_error_msg )
204+ else :
205+ formatted_error = str (linter .verbose_error_msg )
206+
207+ click .secho (formatted_error )
208+
209+ click .secho ()
210+ click .secho ()
211+ click .secho ("\n Additional Information: " , bg = "green" , fg = "white" )
212+ click .secho (f"This object has { len (linter .data ['links' ])} links" , bold = True )
187213
188214 click .secho ()
189215
@@ -225,10 +251,18 @@ def cli_message(linter: Linter) -> None:
225251 is_flag = True ,
226252 help = "Use pydantic validation (requires stac-pydantic to be installed)." ,
227253)
254+ @click .option (
255+ "--verbose" ,
256+ "-v" ,
257+ is_flag = True ,
258+ help = "Enable verbose output." ,
259+ )
228260@click .command ()
229261@click .argument ("file" )
230262@click .version_option (version = importlib .metadata .distribution ("stac-check" ).version )
231- def main (file , recursive , max_depth , assets , links , no_assets_urls , header , pydantic ):
263+ def main (
264+ file , recursive , max_depth , assets , links , no_assets_urls , header , pydantic , verbose
265+ ):
232266 # Check if pydantic validation is requested but not installed
233267 if pydantic :
234268 try :
@@ -250,6 +284,7 @@ def main(file, recursive, max_depth, assets, links, no_assets_urls, header, pyda
250284 assets_open_urls = not no_assets_urls ,
251285 headers = dict (header ),
252286 pydantic = pydantic ,
287+ verbose = verbose ,
253288 )
254289 intro_message (linter )
255290 if recursive > 0 :
0 commit comments