Esempio n. 1
0
    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()
Esempio n. 2
0
File: env.py Progetto: cpenv/cpenv
    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,
        )
Esempio n. 3
0
    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()
Esempio n. 4
0
    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.')
Esempio n. 5
0
    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.")
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
File: env.py Progetto: cpenv/cpenv
    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()
Esempio n. 9
0
    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()
Esempio n. 10
0
    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()
Esempio n. 11
0
File: clone.py Progetto: cpenv/cpenv
    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"')
Esempio n. 12
0
    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)
Esempio n. 13
0
    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()
Esempio n. 14
0
    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