@@ -96,13 +96,13 @@ async def execute(self, targets: list[str], **options: Any) -> list[dict[str, An
9696 if not targets :
9797 raise ValidationError ("No installation targets provided" )
9898
99- logger .info (f "🚀 Starting installation of { len ( targets ) } target(s)" )
99+ logger .info ("🚀 Starting installation of %d target(s)" , len ( targets ) )
100100
101101 # Separate targets into URLs and catalog apps
102102 url_targets , catalog_targets = self ._separate_targets (targets )
103103
104104 # Prepare options with defaults
105- #TODO: use the global setting for the concurrent option
105+ # TODO: use the global setting for the concurrent option
106106 install_options = {
107107 "concurrent" : options .get ("concurrent" , 3 ),
108108 "show_progress" : options .get ("show_progress" , True ),
@@ -115,12 +115,12 @@ async def execute(self, targets: list[str], **options: Any) -> list[dict[str, An
115115 results = []
116116
117117 if url_targets :
118- logger .info (f "📡 Installing { len ( url_targets ) } URL(s)" )
118+ logger .info ("📡 Installing %d URL(s)" , len ( url_targets ) )
119119 url_results = await self .url_strategy .install (url_targets , ** install_options )
120120 results .extend (url_results )
121121
122122 if catalog_targets :
123- logger .info (f "📚 Installing { len ( catalog_targets ) } catalog app(s)" )
123+ logger .info ("📚 Installing %d catalog app(s)" , len ( catalog_targets ) )
124124 catalog_results = await self .catalog_strategy .install (
125125 catalog_targets , ** install_options
126126 )
@@ -195,7 +195,7 @@ def _print_installation_summary(self, results: list[dict[str, Any]]) -> None:
195195 logger .info ("=" * 60 )
196196
197197 if successful :
198- logger .info (f "✅ Successfully installed ({ len (successful )} ):" )
198+ logger .info ("✅ Successfully installed (%d):" , len (successful ))
199199 for result in successful :
200200 target = result .get ("target" , "Unknown" )
201201 path = result .get ("path" , "Unknown" )
@@ -209,14 +209,16 @@ def _print_installation_summary(self, results: list[dict[str, Any]]) -> None:
209209
210210 version_info = f" v{ version } " if version else ""
211211 source_info = f" [{ source } ]" if source != "unknown" else ""
212- logger .info (f" • { target } { version_info } → { path } { source_info } { status_info } " )
212+ logger .info (
213+ " • %s%s → %s%s%s" , target , version_info , path , source_info , status_info
214+ )
213215
214216 if failed :
215- logger .info (f "\n ❌ Failed installations ({ len (failed )} ):" )
217+ logger .info ("\n ❌ Failed installations (%d):" , len (failed ))
216218 for result in failed :
217219 target = result .get ("target" , "Unknown" )
218220 error = result .get ("error" , "Unknown error" )
219- logger .info (f " • { target } : { error } " )
221+ logger .info (" • %s: %s" , target , error )
220222
221223 logger .info ("=" * 60 )
222224
@@ -235,7 +237,7 @@ def validate_targets(self, targets: list[str]) -> None:
235237 except ValidationError :
236238 raise
237239
238- logger .debug (f "✅ Validated { len ( targets ) } target(s)" )
240+ logger .debug ("✅ Validated %d target(s)" , len ( targets ) )
239241
240242 async def cleanup_failed_installations (self , results : list [dict [str , Any ]]) -> None :
241243 """Clean up any failed installations.
@@ -250,7 +252,7 @@ async def cleanup_failed_installations(self, results: list[dict[str, Any]]) -> N
250252 if path := result .get ("path" ):
251253 file_path = Path (path )
252254 if file_path .exists ():
253- logger .debug (f "🧹 Cleaning up failed installation: { file_path } " )
255+ logger .debug ("🧹 Cleaning up failed installation: %s" , file_path )
254256 self .storage_service .remove_file (file_path )
255257
256258 def get_installation_stats (self , results : list [dict [str , Any ]]) -> dict [str , int ]:
@@ -349,10 +351,10 @@ async def execute(self, args: Namespace) -> None:
349351 )
350352
351353 except ValidationError as e :
352- logger .error (f "❌ Validation error: { e } " )
354+ logger .error ("❌ Validation error: %s" , e )
353355 logger .info ("💡 Use 'list --available' to see available catalog apps." )
354356 except Exception as e :
355- logger .error (f "❌ Installation failed: { e } " )
357+ logger .error ("❌ Installation failed: %s" , e )
356358
357359 def _expand_comma_separated_targets (self , targets : list [str ]) -> list [str ]:
358360 """Expand comma-separated targets into individual targets.
0 commit comments