def run(self, args): core.echo() # Get repo if args.to_repo: to_repo = api.get_repo(name=args.to_repo) else: to_repo = core.prompt_for_repo( api.get_repos(), "Choose a repo to publish to", default_repo_name="home", ) # Resolve module resolver = Resolver(api.get_repos()) module_spec = resolver.resolve([args.module])[0] core.echo() # Confirm publication choice = core.prompt("Publish module to %s?[y/n] " % to_repo.name) if choice.lower() not in ["y", "yes", "yup"]: core.echo("Aborted.") sys.exit(1) # Publish module = Module(module_spec.path) published = to_repo.upload(module, args.overwrite) core.echo() core.echo("Activate your module:") core.echo(" cpenv activate %s" % published.real_name) core.echo()
def run(self, args): extra_data = self.parse_data(args.data) repo = api.get_repo(args.repo) requires = api.get_active_modules() if not requires: core.echo("Activate some modules before you save an Environment.") return if args.no_versions: requires = [m.name for m in requires] else: requires = [m.qual_name for m in requires] data = { "name": args.name, "requires": requires, } data.update(extra_data) repo.save_environment( name=data["name"], data=data, force=args.force, )
def run(self, args): cli.echo() # Get repo if args.to_repo: to_repo = api.get_repo(name=args.to_repo) else: to_repo = prompt_for_repo( api.get_repos(), 'Choose a repo to publish to', default_repo_name='home', ) # Resolve module resolver = Resolver(api.get_repos()) module_spec = resolver.resolve([args.module])[0] cli.echo() # Confirm publication choice = cli.prompt('Publish module to %s?[y/n] ' % to_repo.name) if choice.lower() not in ['y', 'yes', 'yup']: cli.echo('Aborted.') sys.exit(1) # Publish module = Module(module_spec.path) published = to_repo.upload(module, args.overwrite) cli.echo() cli.echo('Activate your module:') cli.echo(' cpenv activate %s' % published.real_name) cli.echo()
def run(self, args): found_modules = False cli.echo() active_modules = api.get_active_modules() if args.requirement: active_modules = [ m for m in active_modules if is_partial_match(args.requirement, m) ] if active_modules: found_modules = True cli.echo( cli.format_columns( '[*] Active', [m.real_name for m in sort_modules(active_modules)], )) cli.echo() repos = api.get_repos() if args.repo: repos = [api.get_repo(args.repo)] for repo in repos: if args.requirement: repo_modules = repo.find(args.requirement) else: repo_modules = repo.list() module_names = [] for module in sort_modules(repo_modules): if module in active_modules: module_names.append('* ' + module.real_name) else: module_names.append(' ' + module.real_name) if module_names: found_modules = True if repo.name != repo.path: header = repo.name + ' - ' + repo.path else: header = repo.name cli.echo( cli.format_columns( '[ ] ' + header, module_names, indent=' ', )) cli.echo() if not found_modules: cli.echo('No modules are available.')
def run(self, args): found_modules = False core.echo() active_modules = api.get_active_modules() if args.requirement: active_modules = [ m for m in active_modules if is_partial_match(args.requirement, m) ] if active_modules: found_modules = True core.echo( core.format_columns( "[*] Active", [m.real_name for m in sort_modules(active_modules)], )) core.echo() repos = api.get_repos() if args.repo: repos = [api.get_repo(args.repo)] for repo in repos: if args.requirement: repo_modules = repo.find(args.requirement) else: repo_modules = repo.list() module_names = [] for module in sort_modules(repo_modules): if module in active_modules: module_names.append("* " + module.real_name) else: module_names.append(" " + module.real_name) if module_names: found_modules = True if repo.name != repo.path: header = repo.name + " - " + repo.path else: header = repo.name core.echo( core.format_columns( "[ ] " + header, module_names, indent=" ", )) core.echo() if not found_modules: core.echo("No modules are available.")
def run(self, args): cli.echo() if args.from_repo: from_repo = api.get_repo(args.from_repo) else: from_repo = prompt_for_repo( api.get_repos(), 'Download from', default_repo_name='home', ) if args.to_repo: to_repo = api.get_repo(args.to_repo) else: repos = api.get_repos() repos.remove(from_repo) to_repo = prompt_for_repo( repos, 'Upload to', default_repo_name='home', ) resolver = Resolver([from_repo]) module_specs = resolver.resolve(args.modules) cli.echo() choice = cli.prompt('Copy these modules to %s?[y/n] ' % to_repo.name) if choice.lower() not in ['y', 'yes', 'yup']: cli.echo('Aborted.') sys.exit(1) cli.echo() copier = Copier(to_repo) copier.copy(module_specs, args.overwrite)
def run(self, args): core.echo() if args.from_repo: from_repo = api.get_repo(args.from_repo) else: from_repo = core.prompt_for_repo( api.get_repos(), "Download from", default_repo_name="home", ) if args.to_repo: to_repo = api.get_repo(args.to_repo) else: repos = api.get_repos() repos.remove(from_repo) to_repo = core.prompt_for_repo( repos, "Upload to", default_repo_name="home", ) resolver = Resolver([from_repo]) module_specs = resolver.resolve(args.modules) core.echo() choice = core.prompt("Copy these modules to %s?[y/n] " % to_repo.name) if choice.lower() not in ["y", "yes", "yup"]: core.echo("Aborted.") core.exit(1) core.echo() copier = Copier(to_repo) copier.copy(module_specs, args.overwrite)
def run(self, args): name = args.name from_repo = api.get_repo(name=args.from_repo) core.echo() core.echo("- Removing Environment from %s..." % from_repo.name) core.echo() env_removed = False for env in from_repo.list_environments(): if env.name == name: env_removed = True from_repo.remove_environment(env.name) if env_removed: core.echo("Successfully removed %s." % name) else: core.echo('Could not find Environment "%s".' % name) core.echo()
def run(self, args): core.echo() if args.from_repo: from_repo = api.get_repo(name=args.from_repo) else: from_repo = core.prompt_for_repo( api.get_repos(), "Choose a repo to remove module from", default_repo_name="home", ) core.echo("- Finding modules in %s..." % from_repo.name) core.echo() modules_to_remove = [] for requirement in args.modules: module = best_match(requirement, from_repo.find(requirement)) if not module: core.echo("Error: %s not found..." % requirement) core.exit(1) core.echo(" %s - %s" % (module.real_name, module.path)) modules_to_remove.append(module) core.echo() choice = core.prompt("Delete these modules?[y/n] ") if choice.lower() not in ["y", "yes", "yup"]: core.echo("Aborted.") core.exit(1) core.echo() core.echo("- Removing modules...") core.echo() for module in modules_to_remove: core.echo(" " + module.real_name) api.remove(module, from_repo) core.echo() core.echo("Successfully removed modules.") core.echo()
def run(self, args): cli.echo() if args.from_repo: from_repo = api.get_repo(name=args.from_repo) else: from_repo = prompt_for_repo( api.get_repos(), 'Choose a repo to remove module from', default_repo_name='home', ) cli.echo('- Finding modules in %s...' % from_repo.name) cli.echo() modules_to_remove = [] for requirement in args.modules: module = best_match(requirement, from_repo.find(requirement)) if not module: cli.echo('Error: %s not found...' % requirement) sys.exit(1) cli.echo(' %s - %s' % (module.real_name, module.path)) modules_to_remove.append(module) cli.echo() choice = cli.prompt('Delete these modules?[y/n] ') if choice.lower() not in ['y', 'yes', 'yup']: cli.echo('Aborted.') sys.exit(1) cli.echo() cli.echo('- Removing modules...') cli.echo() for module in modules_to_remove: cli.echo(' ' + module.real_name) api.remove(module, from_repo) cli.echo() cli.echo('Successfully removed modules.') cli.echo()
def run(self, args): try: if not args.from_repo: module_spec = api.resolve([args.module])[0] else: from_repo = api.get_repo(args.from_repo) module_spec = from_repo.find(args.module)[0] except Exception: core.echo() core.echo("Error: Failed to resolve " + args.module) core.exit(1) where = paths.normalize(args.where or ".", module_spec.real_name) if os.path.isdir(where): core.echo("Error: Directory already exists - " + where) core.exit(1) core.echo("- Cloning %s..." % module_spec.real_name) core.echo() try: module = module_spec.repo.download( module_spec, where=where, overwrite=args.overwrite, ) except Exception as e: core.echo() core.echo("Error: " + str(e)) core.exit(1) core.echo() core.echo("Navigate to the following folder to make changes:") core.echo(" " + module.path) core.echo() core.echo("Use one of the following commands to publish your changes:") core.echo(" cpenv publish .") core.echo(' cpenv publish . --to_repo="repo_name"')
def run(self, args): cli.echo() if args.to_repo: to_repo = api.get_repo(name=args.to_repo) else: repos = [r for r in api.get_repos() if isinstance(r, LocalRepo)] to_repo = prompt_for_repo( repos, 'Choose a repo to localize to', default_repo_name='home', ) # Resolve modules try: resolved = api.resolve(args.modules) except ResolveError: sys.exit(1) # Localize modules from remote repos remote_modules = [ spec for spec in resolved if not isinstance(spec.repo, LocalRepo) ] if not len(remote_modules): cli.echo('All modules are already local...') sys.exit() try: localizer = Localizer(to_repo) localizer.localize( remote_modules, overwrite=args.overwrite, ) except Exception as e: cli.echo('Error: ' + str(e)) sys.exit(1)
def run(self, args): # Parse type_args or args that are specific to a given Repo type repo_kwargs = self.parse_type_args(args.type_args) repo_type = repo_kwargs.pop("type", args.type) core.echo() if repo_type not in repos.registry: core.echo("Error: %s is not a registered repo type." % args.type) core.echo("Choose from: " + ", ".join(repos.registry.keys())) core.exit(1) if api.get_repo(args.name): core.echo("Error: Repo named %s already exists." % args.name) core.exit(1) repo_cls = repos.registry[repo_type] repo_kwargs["name"] = args.name repo_kwargs["priority"] = args.priority core.echo("- Checking %s args..." % repo_cls.__name__, end="") try: repo_cls(**repo_kwargs) except Exception as e: core.echo("OOPS!") core.echo() core.echo("Error: Failed to initialize %s" % repo_cls.__name__) core.echo(str(e)) core.exit(1) core.echo("OK!") core.echo() core.echo("- Adding repo to config...", end="") repo_kwargs["type"] = repo_type repo_config = api.read_config("repos", {}) repo_config[args.name] = repo_kwargs api.write_config("repos", repo_config) core.echo("OK!") core.echo()
def run(self, args): if args.home: cli.echo(cpenv.get_home_path()) return if args.cache: cli.echo(cpenv.get_cache_path()) return # Key mode - print a key's value of a module or repo. if args.key: cpenv.set_reporter(Reporter()) if args.repo: objects = [] for repo_name in args.modules: repo = api.get_repo(repo_name) if repo is None: cli.echo('Could not find repo %s' % repo_name) sys.exit(1) objects.append(repo) else: try: objects = api.resolve(args.modules) except ResolveError: sys.exit(1) value = self._get_key(objects[0], args.key) cli.echo(value) return # Normal mode - resolve repos or modules and show info. cli.echo() if args.repo: repos = [] for repo_name in args.modules: repo = api.get_repo(repo_name) if repo is None: cli.echo('Could not find repo %s' % repo_name) sys.exit(1) repos.append(repo) for repo in repos: cli.echo( cli.format_section(repo.name, [ ('name', repo.name), ('path', repo.path), ('type', str(type(repo))), ('type_name', repo.type_name), ])) cli.echo() return else: try: module_specs = api.resolve(args.modules) except ResolveError: sys.exit(1) cli.echo() for spec in module_specs: cli.echo( cli.format_section( spec.qual_name, [(k, str(v)) for k, v in sorted(spec._asdict().items())], )) cli.echo() return