Beispiel #1
0
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,
                                )
Beispiel #2
0
 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)