def prepare_dependencies_dir(logger, project, target_directory, excludes=None): """Get all dependencies from project and install them to given dir""" excludes = excludes or [] dependencies = ast.literal_eval(build_install_dependencies_string(project)) index_url = project.get_property("install_dependencies_index_url") if index_url: index_url = "--index-url {0}".format(index_url) else: index_url = "" pip_cmd = "pip install --target {0} {1} {2}" for dependency in dependencies: if dependency in excludes: logger.debug("Not installing dependency {0}.".format(dependency)) continue cmd = pip_cmd.format(target_directory, index_url, dependency) logger.debug("Installing dependency {0}: {1}".format(dependency, cmd)) process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) process.communicate() if process.returncode != 0: msg = "Command {0} failed to install dependency: {1}".format( cmd, process.returncode) raise Exception(msg)
def test_should_not_insert_url_dependency_into_install_requires(self): self.project.depends_on("spam") self.project.depends_on( "pyassert", url="https://github.com/downloads/halimath/pyassert/pyassert-0.2.2.tar.gz") self.assertEqual( "['spam']", build_install_dependencies_string(self.project))
def prepare_dependencies_dir(logger, project, target_directory, excludes=None): """Get all dependencies from project and install them to given dir""" excludes = excludes or [] dependencies = ast.literal_eval(build_install_dependencies_string(project)) index_url = project.get_property('install_dependencies_index_url') if index_url: index_url = "--index-url {0}".format(index_url) else: index_url = "" pip_cmd = 'pip install --target {0} {1} {2}' for dependency in dependencies: if dependency in excludes: logger.debug("Not installing dependency {0}.".format(dependency)) continue cmd = pip_cmd.format(target_directory, index_url, dependency) logger.debug("Installing dependency {0}: '{1}'".format(dependency, cmd)) process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) process.communicate() if process.returncode != 0: msg = "Command '{0}' failed to install dependency: {1}".format( cmd, process.returncode) raise Exception(msg)
def test_should_quote_requirements(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = ["foo", "bar"] self.project.depends_on_requirements("requirements.txt") self.assertEqual('install_requires = [ "foo", "bar" ],', build_install_dependencies_string(self.project))
def test_should_ignore_empty_requirement_lines(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = ["", "foo", "bar"] self.project.depends_on_requirements("requirements.txt") self.assertEqual("[\n 'foo',\n 'bar'\n ]", build_install_dependencies_string(self.project))
def test_should_ignore_empty_requirement_lines(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = ["", "foo", "bar"] self.project.depends_on_requirements("requirements.txt") self.assertEqual( "[\n 'foo',\n 'bar'\n ]", build_install_dependencies_string(self.project))
def test_should_ignore_comments_with_leading_space_from_requirements(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = [" # comment", "bar"] self.project.depends_on_requirements("requirements.txt") self.assertEqual( "['bar']", build_install_dependencies_string(self.project))
def test_should_quote_requirements(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = ["foo", "bar"] self.project.depends_on_requirements("requirements.txt") self.assertEqual( 'install_requires = [ "foo", "bar" ],', build_install_dependencies_string(self.project))
def test_should_ignore_expanded_editable_urls_from_requirements(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = ["foo", "--editable git+https://github.com/someuser/someproject.git#egg=some_package"] self.project.depends_on_requirements("requirements.txt") self.assertEqual( 'install_requires = [ "foo" ],', build_install_dependencies_string(self.project))
def test_should_ignore_comments_from_requirements(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = ["#comment", "bar"] self.project.depends_on_requirements("requirements.txt") self.assertEqual("['bar']", build_install_dependencies_string(self.project))
def test_should_ignore_expanded_editable_urls_from_requirements(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = [ "foo", "--editable git+https://github.com/someuser/someproject.git#egg=some_package"] self.project.depends_on_requirements("requirements.txt") self.assertEqual( "['foo']", build_install_dependencies_string(self.project))
def test_should_render_runtime_dependencies_when_requirements_file_used(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = ["", "foo", "bar"] self.project.depends_on_requirements("requirements.txt") actual_setup_script = build_install_dependencies_string(self.project) self.assertEquals("[\n" " 'sometool',\n" " 'foo',\n" " 'bar'\n" " ]", actual_setup_script)
def test_should_render_runtime_dependencies_when_requirements_file_used(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = ["", "foo", "bar"] self.project.depends_on_requirements("requirements.txt") actual_setup_script = build_install_dependencies_string(self.project) self.assertEqual("[\n" " 'sometool',\n" " 'foo',\n" " 'bar'\n" " ]", actual_setup_script)
def test_should_return_empty_string_when_no_dependency_is_given(self): self.assertEqual("[]", build_install_dependencies_string(self.project))
def test_should_return_single_dependency_string(self): self.project.depends_on("spam") self.assertEqual( 'install_requires = [ "spam" ],', build_install_dependencies_string(self.project))
def test_should_return_multiple_dependencies_string_with_versions(self): self.project.depends_on("spam", "0.7") self.project.depends_on("eggs") self.assertEqual( 'install_requires = [ "eggs", "spam>=0.7" ],', build_install_dependencies_string(self.project))
def test_should_not_insert_default_version_operator_when_project_contains_operator_in_version(self): self.project.depends_on("spam", "==0.7") self.assertEqual( "['spam==0.7']", build_install_dependencies_string(self.project))
def test_should_return_multiple_dependencies_string_with_versions(self): self.project.depends_on("spam", "0.7") self.project.depends_on("eggs") self.assertEqual( "[\n 'eggs',\n 'spam>=0.7'\n ]", build_install_dependencies_string(self.project))
def test_should_return_single_dependency_string_with_version(self): self.project.depends_on("spam", "0.7") self.assertEqual("['spam>=0.7']", build_install_dependencies_string(self.project))
def test_should_return_multiple_dependencies_string_with_versions(self): self.project.depends_on("spam", "0.7") self.project.depends_on("eggs") self.assertEqual('install_requires = [ "eggs", "spam>=0.7" ],', build_install_dependencies_string(self.project))
def test_should_return_single_dependency_string_with_version(self): self.project.depends_on("spam", "0.7") self.assertEqual( "['spam>=0.7']", build_install_dependencies_string(self.project))
def test_should_not_insert_default_version_operator_when_project_contains_operator_in_version( self): self.project.depends_on("spam", "==0.7") self.assertEqual("['spam==0.7']", build_install_dependencies_string(self.project))
def test_should_return_single_dependency_string(self): self.project.depends_on("spam") self.assertEqual( "['spam']", build_install_dependencies_string(self.project))
def test_should_return_single_dependency_string(self): self.project.depends_on("spam") self.assertEqual("['spam']", build_install_dependencies_string(self.project))
def test_should_return_single_dependency_string(self): self.project.depends_on("spam") self.assertEqual('install_requires = [ "spam" ],', build_install_dependencies_string(self.project))