Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_strictness(self):
assert MatchSpec('foo').strictness == 1
assert MatchSpec('foo 1.2').strictness == 2
assert MatchSpec('foo 1.2 3').strictness == 3
assert MatchSpec('foo 1.2 3 [channel=burg]').strictness == 3
# Seems odd, but this is needed for compatibility
assert MatchSpec('test* 1.2').strictness == 3
assert MatchSpec('foo', build_number=2).strictness == 3
a = MatchSpec(dst)
b = MatchSpec(a)
c = MatchSpec(dst, optional=True, target='burg')
d = MatchSpec(a, build='5')
assert a == b
assert hash(a) == hash(b)
assert a is b
assert a != c
assert hash(a) != hash(c)
assert a != d
assert hash(a) != hash(d)
p = MatchSpec(channel='defaults',name='python',version=VersionSpec('3.5*'))
assert p.match(Dist(channel='defaults', dist_name='python-3.5.3-1', name='python',
version='3.5.3', build_string='1', build_number=1, base_url=None,
platform=None))
assert not p.match(Dist(channel='defaults', dist_name='python-3.6.0-0', name='python',
version='3.6.0', build_string='0', build_number=0, base_url=None,
platform=None))
assert p.match(Dist(channel='defaults', dist_name='python-3.5.1-0', name='python',
version='3.5.1', build_string='0', build_number=0, base_url=None,
platform=None))
assert p.match(PackageRecord(name='python', version='3.5.1', build='0', build_number=0,
depends=('openssl 1.0.2*', 'readline 6.2*', 'sqlite',
'tk 8.5*', 'xz 5.0.5', 'zlib 1.2*', 'pip'),
channel=Channel(scheme='https', auth=None,
location='repo.anaconda.com', token=None,
('numpy >=1,*.8.*', False), ('numpy >=2,*.7.*', False),
('numpy 1.6*|1.7*', True), ('numpy 1.6*|1.8*', False),
('numpy 1.6.2|1.7*', True), ('numpy 1.6.2|1.7.1', True),
('numpy 1.6.2|1.7.0', False), ('numpy 1.7.1 py27_0', True),
('numpy 1.7.1 py26_0', False), ('numpy >1.7.1a', True),
('python', False),
]:
m = MatchSpec(spec)
assert m.match(DPkg('numpy-1.7.1-py27_0.tar.bz2')) == result
assert 'name' in m
assert m.name == 'python' or 'version' in m
# both version numbers conforming to PEP 440
assert not MatchSpec('numpy >=1.0.1').match(DPkg('numpy-1.0.1a-0.tar.bz2'))
# both version numbers non-conforming to PEP 440
assert not MatchSpec('numpy >=1.0.1.vc11').match(DPkg('numpy-1.0.1a.vc11-0.tar.bz2'))
assert MatchSpec('numpy >=1.0.1*.vc11').match(DPkg('numpy-1.0.1a.vc11-0.tar.bz2'))
# one conforming, other non-conforming to PEP 440
assert MatchSpec('numpy <1.0.1').match(DPkg('numpy-1.0.1.vc11-0.tar.bz2'))
assert MatchSpec('numpy <1.0.1').match(DPkg('numpy-1.0.1a.vc11-0.tar.bz2'))
assert not MatchSpec('numpy >=1.0.1.vc11').match(DPkg('numpy-1.0.1a-0.tar.bz2'))
assert MatchSpec('numpy >=1.0.1a').match(DPkg('numpy-1.0.1z-0.tar.bz2'))
assert MatchSpec('numpy >=1.0.1a py27*').match(DPkg('numpy-1.0.1z-py27_1.tar.bz2'))
assert MatchSpec('blas * openblas_0').match(DPkg('blas-1.0-openblas_0.tar.bz2'))
assert MatchSpec('blas')._is_simple()
assert not MatchSpec('blas 1.0')._is_simple()
assert not MatchSpec('blas 1.0 1')._is_simple()
m = MatchSpec('blas 1.0', optional=True)
m2 = MatchSpec(m, optional=False)
m3 = MatchSpec(m2, target='blas-1.0-0.tar.bz2')
def get_windows_conda_build_record_set():
specs = (MatchSpec("conda"), MatchSpec("conda-build"), MatchSpec("affine"),
MatchSpec("colour"), MatchSpec("uses-spiffy-test-app"),)
with get_solver_5(specs) as solver:
final_state = solver.solve_final_state()
return final_state, frozenset(specs)
def test_build_number_merge(self):
specs = (MatchSpec('python[build_number=1]'), MatchSpec('python=1.2.3=py27_7'), MatchSpec('conda-forge::python<=8[build_number=1]'))
merged = MatchSpec.merge(specs)
assert len(merged) == 1
assert str(merged[0]) == "conda-forge::python[version='1.2.3,<=8',build=py27_7,build_number=1]"
specs = (MatchSpec('python[build_number=2]'), MatchSpec('python=1.2.3=py27_7'), MatchSpec('python<=8[build_number=1]'))
with pytest.raises(ValueError):
MatchSpec.merge(specs)
def query(self, package_ref_or_match_spec):
# returns a generator
param = package_ref_or_match_spec
if isinstance(param, string_types):
param = MatchSpec(param)
if isinstance(param, MatchSpec):
return (prefix_rec for prefix_rec in self.iter_records()
if param.match(prefix_rec))
else:
assert isinstance(param, PackageRef)
return (prefix_rec for prefix_rec in self.iter_records() if prefix_rec == param)
for spec in context.aggressive_update_packages:
if spec.name in specs_map:
old_spec = specs_map[spec.name]
specs_map[spec.name] = MatchSpec(old_spec, target=None)
if (context.auto_update_conda and paths_equal(self.prefix, context.root_prefix)
and any(dist.name == "conda" for dist in solution)):
specs_map["conda"] = MatchSpec("conda")
# add in explicitly requested specs from specs_to_add
# this overrides any name-matching spec already in the spec map
specs_map.update((s.name, s) for s in specs_to_add)
# collect additional specs to add to the solution
track_features_specs = pinned_specs = ()
if context.track_features:
track_features_specs = tuple(MatchSpec(x + '@') for x in context.track_features)
if not ignore_pinned:
pinned_specs = get_pinned_specs(self.prefix)
final_environment_specs = IndexedSet(concatv(
itervalues(specs_map),
track_features_specs,
pinned_specs,
))
# We've previously checked `solution` for consistency (which at that point was the
# pre-solve state of the environment). Now we check our compiled set of
# `final_environment_specs` for the possibility of a solution. If there are conflicts,
# we can often avoid them by neutering specs that have a target (e.g. removing version
# constraint) and also making them optional. The result here will be less cases of
# `UnsatisfiableError` handed to users, at the cost of more packages being modified
# or removed from the environment.
def _create_env_conda_44(prefix, full_list_of_packages):
assert CONDA_VERSION_MAJOR_MINOR >= (4, 4)
from conda.models.match_spec import MatchSpec
from conda.core.solve import Solver
matched_list_of_packages = (MatchSpec(d) for d in full_list_of_packages)
m = Solver(prefix, (), specs_to_add=matched_list_of_packages)
txn = m.solve_for_transaction()
txn.execute()
# https://github.com/conda/constructor/issues/138. Until that issue is resolved,
# and for the foreseeable future, it's best to be more conservative with --update-all.
# Start with empty specs map for UPDATE_ALL because we're optimizing the update
# only for specs the user has requested; it's ok to remove dependencies.
specs_map = odict()
# However, because of https://github.com/conda/constructor/issues/138, we need
# to hard-code keeping conda, conda-build, and anaconda, if they're already in
# the environment.
solution_pkg_names = set(d.name for d in solution)
ensure_these = (pkg_name for pkg_name in {
'anaconda', 'conda', 'conda-build',
} if pkg_name not in specs_from_history_map and pkg_name in solution_pkg_names)
for pkg_name in ensure_these:
specs_from_history_map[pkg_name] = MatchSpec(pkg_name)
else:
specs_map = odict((d.name, MatchSpec(d.name)) for d in solution)
# add in historically-requested specs
specs_map.update(specs_from_history_map)
# let's pretend for now that this is the right place to build the index
prepared_specs = set(concatv(
specs_to_remove,
specs_to_add,
itervalues(specs_from_history_map),
))
index, r = self._prepare(prepared_specs)
if specs_to_remove: