def run_command(command, env_fname, packages, run=1): # Run the command if run > 3: return log('Executing:\n' + command + "\n") install_task = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE) # Extract the error (if any) _, error_string = install_task.communicate() error_string = error_string.decode('utf8', errors='ignore') if error_string: print(error_string, file=stderr) # Check for errors error, pkgs = check_error(error_string, packages=packages) pip_failed = check_pip_failed(error_string) if error: log('Installation failed!', error=True) log('Ignoring ' + error + ' dependencies and trying again...\n') sleep(1) sanitize_envfile(env_fname=env_fname, pkgs=pkgs) return run_command(command=command, env_fname=env_fname, packages=packages, run=run+1) elif pip_failed: # TODO: Extract env details and run pip sub-command. # pip_packages = extract_pip_packages(env_fname=env_fname) return False else: # Print beta warning and github link log(ISSUES_MSG) return True
def test_check_error_no_packages(self): error_str = '''ResolvePackageNotFound: - mixpanel=1.11.0''' packages = [] error, pkgs = check_error(error_str=error_str, packages=packages) self.assertEqual(error, 'unresolved') self.assertListEqual(pkgs, [])
def test_check_error(self): packages = extract_env_packages(env_fname='environment-test.yml') error_str = '''ResolvePackageNotFound: - mixpanel=1.11.0''' error_str2 = '''UnsatisfiableError: - sigmasix=1.91.0''' error_str3 = '''AnyOtherException: - sigmasix=1.91.0''' error, pkgs = check_error(error_str=error_str, packages=packages) error2, pkgs2 = check_error(error_str=error_str2, packages=packages) error3, pkgs3 = check_error(error_str=error_str3, packages=packages) self.assertEqual(error, 'unresolved') self.assertListEqual(pkgs, ['mixpanel=1.11.0']) self.assertEqual(error2, 'unsatisfiable') self.assertListEqual(pkgs2, ['sigmasix=1.91.0']) self.assertIsNone(error3) self.assertListEqual(pkgs3, [])
def test_check_error_no_packages(): error_str = '''ResolvePackageNotFound: - mixpanel=1.11.0''' packages = [] assert check_error(error_str=error_str, packages=[]) == ('unresolved', [])
def test_check_error(error_str, expected_result): with fake_envfile(): packages = extract_env_packages(env_fname='environment.yml') assert check_error(error_str=error_str, packages=packages) == expected_result