Skip to content

Commit

Permalink
tests pass
Browse files Browse the repository at this point in the history
A project file without an env_spec or packages is valid if
there is an environment.yml file.
  • Loading branch information
AlbertDeFusco committed Jul 29, 2020
1 parent af0ab47 commit 06af3d0
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 44 deletions.
2 changes: 1 addition & 1 deletion anaconda_project/internal/cli/test/test_prepare.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def _mock_prepare_do_not_keep_going(project,

def main_redis_url(dirname):
project_dir_disable_dedicated_env(dirname)
code = main(Args(directory=dirname, all=False, refresh=False))
code = main(Args(directory=dirname, all=False, refresh=False, python=None))
assert 1 == code

with_directory_contents_completing_project_file({DEFAULT_PROJECT_FILENAME: """
Expand Down
57 changes: 30 additions & 27 deletions anaconda_project/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -829,33 +829,36 @@ def set_env_spec_platforms(project):
importable_spec = None

if importable_spec is not None:
project_file.set_value(['env_specs', importable_spec.name], importable_spec.to_json())
project_file.use_changes_without_saving()
# print(project_file._yaml)
# if old is None:
# text = "Environment spec '%s' from %s is not in %s." % (importable_spec.name, importable_filename,
# os.path.basename(project_file.filename))
# prompt = "Add env spec %s to %s?" % (importable_spec.name, os.path.basename(project_file.filename))
# else:
# text = "Environment spec '%s' from %s is out of sync with %s. Diff:\n%s" % (
# importable_spec.name, importable_filename, os.path.basename(project_file.filename),
# importable_spec.diff_from(old))
# prompt = "Overwrite env spec %s with the changes from %s?" % (importable_spec.name, importable_filename)

# def overwrite_env_spec_from_importable(project):
# project.project_file.set_value(['env_specs', importable_spec.name], importable_spec.to_json())

# def remember_no_import_importable(project):
# project.project_file.set_value(['skip_imports', 'environment'], importable_spec.logical_hash)

# # we don't set the filename here because it isn't really an error in the
# # file, it ends up reading strangely.
# problems.append(
# ProjectProblem(
# text=text,
# fix_prompt=prompt,
# fix_function=overwrite_env_spec_from_importable,
# no_fix_function=remember_no_import_importable))
env_specs = project_file.get_value('env_specs', {})
if not env_specs:
project_file.set_value(['env_specs', importable_spec.name], importable_spec.to_json())
project_file.use_changes_without_saving()
else:
if old is None:
text = "Environment spec '%s' from %s is not in %s." % (importable_spec.name, importable_filename,
os.path.basename(project_file.filename))
prompt = "Add env spec %s to %s?" % (importable_spec.name, os.path.basename(project_file.filename))
else:
text = "Environment spec '%s' from %s is out of sync with %s. Diff:\n%s" % (
importable_spec.name, importable_filename, os.path.basename(project_file.filename),
importable_spec.diff_from(old))
prompt = "Overwrite env spec %s with the changes from %s?" % (importable_spec.name, importable_filename)

def overwrite_env_spec_from_importable(project):
project.project_file.set_value(['env_specs', importable_spec.name], importable_spec.to_json())
project.save()

def remember_no_import_importable(project):
project.project_file.set_value(['skip_imports', 'environment'], importable_spec.logical_hash)

# we don't set the filename here because it isn't really an error in the
# file, it ends up reading strangely.
problems.append(
ProjectProblem(
text=text,
fix_prompt=prompt,
fix_function=overwrite_env_spec_from_importable,
no_fix_function=remember_no_import_importable))
if env_specs_is_empty or env_specs_is_missing:
# we do NOT want to add this problem if we merely
# failed to parse individual env specs; it must be
Expand Down
30 changes: 16 additions & 14 deletions anaconda_project/test/test_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -2783,14 +2783,15 @@ def check(dirname):
def test_auto_fix_env_spec_import():
def check(dirname):
project = project_no_dedicated_env(dirname)
assert len(project.problems) == 1
assert len(project.problem_objects) == 1
assert len(project.fixable_problems) == 1
problem = project.problem_objects[0]
assert problem.text == "Environment spec 'stuff' from environment.yml is not in anaconda-project.yml."
assert problem.can_fix

problem.fix(project)
assert len(project.problems) == 0
assert len(project.problem_objects) == 0
assert len(project.fixable_problems) == 0
# problem = project.problem_objects[0]
# assert problem.text == "Environment spec 'stuff' from environment.yml is not in anaconda-project.yml."
# assert problem.can_fix

# problem.fix(project)
project.project_file.save()

assert project.problems == []
Expand Down Expand Up @@ -2819,14 +2820,15 @@ def check(dirname):
def test_auto_fix_requirements_txt_import():
def check(dirname):
project = project_no_dedicated_env(dirname)
assert len(project.problems) == 1
assert len(project.problem_objects) == 1
assert len(project.fixable_problems) == 1
problem = project.problem_objects[0]
assert problem.text == "Environment spec 'default' from requirements.txt is not in anaconda-project.yml."
assert problem.can_fix

problem.fix(project)
assert len(project.problems) == 0
assert len(project.problem_objects) == 0
assert len(project.fixable_problems) == 0
# problem = project.problem_objects[0]
# assert problem.text == "Environment spec 'default' from requirements.txt is not in anaconda-project.yml."
# assert problem.can_fix

# problem.fix(project)
project.project_file.save()

assert project.problems == []
Expand Down
5 changes: 3 additions & 2 deletions anaconda_project/test/test_project_ops.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,15 +176,16 @@ def check_create(dirname):
}, check_create)


def test_create_no_import_environment_yml_when_not_fix_problems():
def test_create_no_import_environment_yml_no_problems():
def check_create(dirname):
project = project_ops.create(dirname,
make_directory=False,
name='hello',
icon='something.png',
description="Hello World",
fix_problems=False)
assert ["Environment spec 'stuff' from environment.yml is not in anaconda-project.yml."] == project.problems
#assert ["Environment spec 'stuff' from environment.yml is not in anaconda-project.yml."] == project.problems
assert not project.problems

with_directory_contents(
{
Expand Down

0 comments on commit 06af3d0

Please sign in to comment.