def install_modules(args): matching_names = au.search_remote(*args.modules) if len(matching_names) > 1 and args.version is not None: sys.exit('Version filter cannot be applied to multiple modules') selected_install = {} for module_name in matching_names: remote_info = au.get_remote_module_info(module_name) if args.version is None: local_info = au.get_local_module_info(module_name) if local_info is not None: local_ver = local_info.version remote_ver = remote_info.latest_version if not args.force and LooseVersion(local_ver) >= LooseVersion(remote_ver): print(f'{module_name}: latest is already installed. ({local_ver})') continue selected_install[module_name] = remote_info.latest_version elif remote_info.has_version(args.version): selected_install[module_name] = args.version else: continue if args.private: if args.version is None: sys.exit('--include-private cannot be used without specifying a version using -v/--version') for module_name in args.modules: if au.module_exists_remote(module_name, version=args.version, private=True): selected_install[module_name] = args.version # Add dependencies of selected modules dep_install = {} if not args.skip_dependencies: for module_name, version in selected_install.items(): deps = au.get_install_deps(module_name, version=version) dep_install.update(deps) # If overlap between selected modules and dependency modules, use the dependency version to_install = selected_install to_install.update(dep_install) if len(to_install) == 0: print('No modules to install found') else: print('Installing: {:}'\ .format(', '.join([name+':'+version for name, version in sorted(to_install.items())])) ) if not(args.yes): while True: resp = input('Proceed? (y/n) > ') if resp == 'y': break if resp == 'n': exit() else: print('Your response (\'{:}\') was not one of the expected responses: y, n'.format(resp)) continue for module_name, module_version in sorted(to_install.items()): stage_handler = InstallProgressStdout(module_name, module_version) au.install_module(module_name, version=module_version, force_data=args.force_data, stage_handler=stage_handler, force=args.force, skip_data=args.skip_data, )
def update_modules(args): if len(args.modules) == 0: requested_modules = au.list_local() else: requested_modules = au.search_local(*args.modules) print('Checking status') needs_update = [] status_table = [['Name', 'Status']] for module_name in requested_modules: local_info = au.get_local_module_info(module_name) version = local_info.conf['version'] if au.module_exists_remote(module_name): latest_version = au.get_remote_latest_version(module_name) if version == latest_version: status = 'Up to date' else: status = 'Requires update' needs_update.append(module_name) else: status = 'No remote version' status_table.append([module_name, status]) print_tabular_lines(status_table) if len(needs_update) == 0: print('All modules are up to date') exit() else: user_cont = input('Continue to update the following modules:\n%s\n<y/n>: '\ %','.join(needs_update)) if user_cont.lower() not in ['y', 'yes']: print('Cancelling update') exit() args.modules = needs_update args.force_data = False args.version = None args.yes = True install_modules(args)