#!/usr/bin/env python3 __package__ = 'archivebox.cli' __command__ = 'archivebox version' __description__ = 'Print the ArchiveBox version and dependency information' import os import re import sys import argparse from ..legacy.util import reject_stdin from ..legacy.config import ( ANSI, VERSION, CODE_LOCATIONS, CONFIG_LOCATIONS, DATA_LOCATIONS, DEPENDENCIES, check_dependencies, ) def main(args=None): args = sys.argv[1:] if args is None else args parser = argparse.ArgumentParser( prog=__command__, description=__description__, add_help=True, ) parser.add_argument( '--quiet', '-q', action='store_true', help='Only print ArchiveBox version number and nothing else.', ) command = parser.parse_args(args) reject_stdin(__command__) if command.quiet: print(VERSION) else: print('ArchiveBox v{}'.format(VERSION)) print() print('{white}[i] Dependency versions:{reset}'.format(**ANSI)) for name, dependency in DEPENDENCIES.items(): print_dependency_version(name, dependency) print() print('{white}[i] Code locations:{reset}'.format(**ANSI)) for name, folder in CODE_LOCATIONS.items(): print_folder_status(name, folder) print() print('{white}[i] Config locations:{reset}'.format(**ANSI)) for name, folder in CONFIG_LOCATIONS.items(): print_folder_status(name, folder) print() print('{white}[i] Data locations:{reset}'.format(**ANSI)) for name, folder in DATA_LOCATIONS.items(): print_folder_status(name, folder) print() check_dependencies() def print_folder_status(name, folder): if folder['enabled']: if folder['is_valid']: color, symbol, note = 'green', '√', 'valid' else: color, symbol, note, num_files = 'red', 'X', 'invalid', '?' else: color, symbol, note, num_files = 'lightyellow', '-', 'disabled', '-' if folder['path']: if os.path.exists(folder['path']): num_files = ( f'{len(os.listdir(folder["path"]))} files' if os.path.isdir(folder['path']) else 'exists' ) else: num_files = '?' print( ANSI[color], symbol, ANSI['reset'], name.ljust(24), (folder["path"] or '').ljust(70), num_files.ljust(14), ANSI[color], note, ANSI['reset'], ) def print_dependency_version(name, dependency): if dependency['enabled']: if dependency['is_valid']: color, symbol, note = 'green', '√', 'valid' version = 'v' + re.search(r'[\d\.]+', dependency['version'])[0] else: color, symbol, note, version = 'red', 'X', 'invalid', '?' else: color, symbol, note, version = 'lightyellow', '-', 'disabled', '-' print( ANSI[color], symbol, ANSI['reset'], name.ljust(24), (dependency["path"] or '').ljust(70), version.ljust(14), ANSI[color], note, ANSI['reset'], ) if __name__ == '__main__': main()