1010)
1111from .fsutils import ensure_tree , rmtree , unlink
1212from .indexutils import Index
13- from .logging import LOGGER , ProgressPrinter
13+ from .logging import CONSOLE_MAX_WIDTH , LOGGER , ProgressPrinter
1414from .pathutils import Path , PurePath
1515from .tagutils import install_matches_any , tag_or_range
1616from .urlutils import (
2121)
2222
2323
24- # TODO: Consider reading the current console width
25- # Though there's a solid argument we should just pick one and stick with it
26- CONSOLE_WIDTH = 79
27-
28-
2924# In-process cache to save repeat downloads
3025DOWNLOAD_CACHE = {}
3126
@@ -404,7 +399,7 @@ def _download_one(cmd, source, install, download_dir, *, must_copy=False):
404399 if install ["url" ].casefold ().endswith (".nupkg" .casefold ()):
405400 package = package .with_suffix (".nupkg" )
406401
407- with ProgressPrinter ("Downloading" , maxwidth = CONSOLE_WIDTH ) as on_progress :
402+ with ProgressPrinter ("Downloading" , maxwidth = CONSOLE_MAX_WIDTH ) as on_progress :
408403 package = download_package (cmd , install , package , DOWNLOAD_CACHE , on_progress = on_progress )
409404 validate_package (install , package )
410405 if must_copy and package .parent != download_dir :
@@ -456,7 +451,7 @@ def _install_one(cmd, source, install, *, target=None):
456451 )
457452 raise
458453
459- with ProgressPrinter ("Extracting" , maxwidth = CONSOLE_WIDTH ) as on_progress :
454+ with ProgressPrinter ("Extracting" , maxwidth = CONSOLE_MAX_WIDTH ) as on_progress :
460455 extract_package (package , dest , on_progress = on_progress , repair = cmd .repair )
461456
462457 if target :
@@ -493,13 +488,13 @@ def _install_one(cmd, source, install, *, target=None):
493488 if s ["kind" ] not in cmd .disable_shortcut_kinds ]
494489 install ["shortcuts" ] = shortcuts
495490
491+ install ["url" ] = sanitise_url (install ["url" ])
492+ if source != cmd .fallback_source :
493+ install ["source" ] = sanitise_url (source )
494+
496495 LOGGER .debug ("Write __install__.json to %s" , dest )
497496 with open (dest / "__install__.json" , "w" , encoding = "utf-8" ) as f :
498- json .dump ({
499- ** install ,
500- "url" : sanitise_url (install ["url" ]),
501- "source" : sanitise_url (source ),
502- }, f , default = str )
497+ json .dump (install , f , default = str )
503498
504499 LOGGER .verbose ("Install complete" )
505500
@@ -510,13 +505,11 @@ def _fatal_install_error(cmd, ex):
510505 LOGGER .error ("An error occurred. Please check any output above, "
511506 "or the log file, and try again." )
512507 LOGGER .info ("Log file for this session: !Y!%s!W!" , logfile )
513- # TODO: Update issues URL to actual repository
514508 LOGGER .info ("If you cannot resolve it yourself, please report the error with "
515509 "your log file at https://github.com/python/pymanager" )
516510 else :
517511 LOGGER .error ("An error occurred. Please check any output above, "
518512 "and try again with -vv for more information." )
519- # TODO: Update issues URL to actual repository
520513 LOGGER .info ("If you cannot resolve it yourself, please report the error with "
521514 "verbose output file at https://github.com/python/pymanager" )
522515 LOGGER .debug ("TRACEBACK:" , exc_info = True )
@@ -546,7 +539,7 @@ def execute(cmd):
546539 if not cmd .automatic_install :
547540 LOGGER .debug ("automatic_install is not set - exiting" )
548541 raise AutomaticInstallDisabledError ()
549- LOGGER .info ("!B!" + "*" * CONSOLE_WIDTH + "!W!" )
542+ LOGGER .info ("!B!" + "*" * CONSOLE_MAX_WIDTH + "!W!" )
550543
551544 download_index = {"versions" : []}
552545
@@ -737,6 +730,6 @@ def execute(cmd):
737730 finally :
738731 if cmd .automatic :
739732 LOGGER .info ("To see all available commands, run '!G!py help!W!'" )
740- LOGGER .info ("!B!" + "*" * CONSOLE_WIDTH + "!W!" )
733+ LOGGER .info ("!B!" + "*" * CONSOLE_MAX_WIDTH + "!W!" )
741734
742735 LOGGER .debug ("END install_command.execute" )
0 commit comments