def _package_is_installed(prefix, spec): spec = MatchSpec(spec) prefix_recs = tuple(PrefixData(prefix).query(spec)) if len(prefix_recs) > 1: raise AssertionError("Multiple packages installed.%s" % (dashlist(prec.dist_str() for prec in prefix_recs))) return bool(len(prefix_recs))
def merge(cls, match_specs): match_specs = tuple(cls(s) for s in match_specs if s) name_groups = groupby(attrgetter('name'), match_specs) unmergeable = name_groups.pop('*', []) + name_groups.pop(None, []) merged_specs = [] mergeable_groups = tuple(concat( itervalues(groupby(lambda s: s.optional, group)) for group in itervalues(name_groups) )) for group in mergeable_groups: target_groups = groupby(attrgetter('target'), group) target_groups.pop(None, None) if len(target_groups) > 1: raise ValueError("Incompatible MatchSpec merge:%s" % dashlist(group)) merged_specs.append( reduce(lambda x, y: x._merge(y), group) if len(group) > 1 else group[0] ) return tuple(concatv(merged_specs, unmergeable))
def package_is_installed(prefix, spec, pip=None): spec = MatchSpec(spec) prefix_recs = tuple(PrefixData(prefix, pip_interop_enabled=pip).query(spec)) if len(prefix_recs) > 1: raise AssertionError("Multiple packages installed.%s" % (dashlist(prec.dist_str() for prec in prefix_recs))) is_installed = bool(len(prefix_recs)) if is_installed and pip is True: assert prefix_recs[0].package_type in ( PackageType.VIRTUAL_PYTHON_WHEEL, PackageType.VIRTUAL_PYTHON_EGG_MANAGEABLE, PackageType.VIRTUAL_PYTHON_EGG_UNMANAGEABLE, PackageType.VIRTUAL_PYTHON_EGG_LINK, ) if is_installed and pip is False: assert prefix_recs[0].package_type in ( None, PackageType.NOARCH_GENERIC, PackageType.NOARCH_PYTHON, ) return is_installed
def package_is_installed(prefix, spec, pip=None): spec = MatchSpec(spec) prefix_recs = tuple(PrefixData(prefix).query(spec)) if len(prefix_recs) > 1: raise AssertionError("Multiple packages installed.%s" % (dashlist(prec.dist_str() for prec in prefix_recs))) is_installed = bool(len(prefix_recs)) if is_installed and pip is True: assert prefix_recs[0].package_type in ( PackageType.SHADOW_PYTHON_DIST_INFO, PackageType.SHADOW_PYTHON_EGG_INFO_DIR, PackageType.SHADOW_PYTHON_EGG_INFO_FILE, PackageType.SHADOW_PYTHON_EGG_LINK, ) if is_installed and pip is False: assert prefix_recs[0].package_type in ( None, PackageType.NOARCH_GENERIC, PackageType.NOARCH_PYTHON, ) return is_installed