def check_file(dirname): filename = os.path.join(dirname, DEFAULT_PROJECT_LOCK_FILENAME) assert os.path.exists(filename) lock_file = ProjectLockFile.load_for_directory(dirname) # we have the global enabled flag off; individual # env spec settings override that; foo has no setting. foo_lock_set = _get_lock_set(lock_file, 'foo') assert lock_file.get_value(['env_specs', 'foo', 'locked'], None) is None assert foo_lock_set.disabled bar_lock_set = _get_lock_set(lock_file, 'bar') assert bar_lock_set.disabled all_names = ['foo', 'bar'] lock_set = CondaLockSet( {'all': ['something=3.0=0']}, platforms=['linux-32', 'linux-64', 'osx-64', 'win-32', 'win-64']) lock_set.env_spec_hash = "hash-hash-hash" lock_file._set_lock_set('bar', lock_set, all_names=all_names) # "foo" should have been DISABLED since we had to # enable the global flag in order to enable "bar" foo_lock_set = _get_lock_set(lock_file, 'foo') assert lock_file.get_value(['env_specs', 'foo', 'locked']) is False assert foo_lock_set.disabled assert foo_lock_set.env_spec_hash is None bar_lock_set = _get_lock_set(lock_file, 'bar') assert bar_lock_set.enabled assert ('something=3.0=0', ) == bar_lock_set.package_specs_for_current_platform assert "hash-hash-hash" == bar_lock_set.env_spec_hash # and now we should enable "foo" when we set it to something lock_file._set_lock_set('foo', lock_set, all_names=all_names) foo_lock_set = _get_lock_set(lock_file, 'foo') assert foo_lock_set.enabled assert ('something=3.0=0', ) == foo_lock_set.package_specs_for_current_platform # be sure we can save lock_file.save() reloaded = ProjectLockFile.load_for_directory(dirname) assert ('something=3.0=0', ) == _get_lock_set( reloaded, 'bar').package_specs_for_current_platform assert ('something=3.0=0', ) == _get_lock_set( reloaded, 'foo').package_specs_for_current_platform # Check _set_lock_set_hash lock_file._set_lock_set_hash('bar', 'hash2.0') lock_file.save() reloaded = ProjectLockFile.load_for_directory(dirname) bar_lock_set = _get_lock_set(reloaded, 'bar') assert bar_lock_set.env_spec_hash == 'hash2.0'
def _get_lock_set(lock_file, env_spec_name): """Library-internal method.""" # TODO no validation here, we'll do that by moving this # into project.py soon enabled = _get_locking_enabled(lock_file, env_spec_name) packages = lock_file.get_value(['env_specs', env_spec_name, 'packages'], {}) platforms = lock_file.get_value(['env_specs', env_spec_name, 'platforms'], []) env_spec_hash = lock_file.get_value( ['env_specs', env_spec_name, 'env_spec_hash'], None) lock_set = CondaLockSet(packages, platforms, enabled=enabled) lock_set.env_spec_hash = env_spec_hash return lock_set