class PrefixDatarUnitTests(TestCase):

    def setUp(self):
        tempdirdir = gettempdir()
        dirname = str(uuid4())[:8]
        self.prefix = join(tempdirdir, dirname)
        mkdir_p(self.prefix)
        assert isdir(self.prefix)
        mkdir_p(join(self.prefix, 'conda-meta'))
        activate_env_vars = join(self.prefix, PREFIX_STATE_FILE)
        with open(activate_env_vars, 'w') as f:
            f.write(ENV_VARS_FILE)
        self.pd = PrefixData(self.prefix)

    def tearDown(self):
        rm_rf(self.prefix)
        assert not lexists(self.prefix)

    def test_get_environment_env_vars(self):
        ex_env_vars = {
            "ENV_ONE": "one",
            "ENV_TWO": "you",
            "ENV_THREE": "me"
        }
        env_vars = self.pd.get_environment_env_vars()
        assert ex_env_vars == env_vars

    def test_set_unset_environment_env_vars(self):
        env_vars_one = {
            "ENV_ONE": "one",
            "ENV_TWO": "you",
            "ENV_THREE": "me",
        }
        env_vars_add = {
            "ENV_ONE": "one",
            "ENV_TWO": "you",
            "ENV_THREE": "me",
            "WOAH": "dude"
        }
        self.pd.set_environment_env_vars({"WOAH":"dude"})
        env_vars = self.pd.get_environment_env_vars()
        assert env_vars_add == env_vars

        self.pd.unset_environment_env_vars(['WOAH'])
        env_vars = self.pd.get_environment_env_vars()
        assert env_vars_one == env_vars

    def test_set_unset_environment_env_vars_no_exist(self):
        env_vars_one = {
            "ENV_ONE": "one",
            "ENV_TWO": "you",
            "ENV_THREE": "me",
        }
        self.pd.unset_environment_env_vars(['WOAH'])
        env_vars = self.pd.get_environment_env_vars()
        assert env_vars_one == env_vars
Example #2
0
def execute_list(args, parser):
    prefix = get_prefix(args, search=False) or context.active_prefix
    if not lexists(prefix):
        raise EnvironmentLocationNotFound(prefix)

    pd = PrefixData(prefix)

    env_vars = pd.get_environment_env_vars()
    if args.json:
        common.stdout_json(env_vars)
    else:
        for k, v in env_vars.items():
            print('%s = %s' % (k, v))
Example #3
0
def from_environment(name,
                     prefix,
                     no_builds=False,
                     ignore_channels=False,
                     from_history=False):
    """
        Get environment object from prefix
    Args:
        name: The name of environment
        prefix: The path of prefix
        no_builds: Whether has build requirement
        ignore_channels: whether ignore_channels
        from_history: Whether environment file should be based on explicit specs in history

    Returns:     Environment object
    """
    # requested_specs_map = History(prefix).get_requested_specs_map()
    pd = PrefixData(prefix, pip_interop_enabled=True)
    variables = pd.get_environment_env_vars()

    if from_history:
        history = History(prefix).get_requested_specs_map()
        deps = [str(package) for package in history.values()]
        return Environment(name=name,
                           dependencies=deps,
                           channels=list(context.channels),
                           prefix=prefix,
                           variables=variables)

    precs = tuple(PrefixGraph(pd.iter_records()).graph)
    grouped_precs = groupby(lambda x: x.package_type, precs)
    conda_precs = sorted(concatv(
        grouped_precs.get(None, ()),
        grouped_precs.get(PackageType.NOARCH_GENERIC, ()),
        grouped_precs.get(PackageType.NOARCH_PYTHON, ()),
    ),
                         key=lambda x: x.name)

    pip_precs = sorted(
        concatv(
            grouped_precs.get(PackageType.VIRTUAL_PYTHON_WHEEL, ()),
            grouped_precs.get(PackageType.VIRTUAL_PYTHON_EGG_MANAGEABLE, ()),
            grouped_precs.get(PackageType.VIRTUAL_PYTHON_EGG_UNMANAGEABLE, ()),
            # grouped_precs.get(PackageType.SHADOW_PYTHON_EGG_LINK, ()),
        ),
        key=lambda x: x.name)

    if no_builds:
        dependencies = ['='.join((a.name, a.version)) for a in conda_precs]
    else:
        dependencies = [
            '='.join((a.name, a.version, a.build)) for a in conda_precs
        ]
    if pip_precs:
        dependencies.append(
            {'pip': ["%s==%s" % (a.name, a.version) for a in pip_precs]})

    channels = list(context.channels)
    if not ignore_channels:
        for prec in conda_precs:
            canonical_name = prec.channel.canonical_name
            if canonical_name not in channels:
                channels.insert(0, canonical_name)
    return Environment(name=name,
                       dependencies=dependencies,
                       channels=channels,
                       prefix=prefix,
                       variables=variables)
Example #4
0
def get_env_vars(prefix):
    pd = PrefixData(prefix)

    env_vars = pd.get_environment_env_vars()

    return env_vars