class InstallRuntimeDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project("unittest", ".") self.project.set_property("dir_install_logs", "any_directory") self.logger = mock(Logger) initialize_install_dependencies_plugin(self.project) when(pybuilder.plugins.python.install_dependencies_plugin ).execute_command(any_value(), any_value(), shell=False).thenReturn(0) def tearDown(self): unstub() def test_should_install_multiple_dependencies(self): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on_requirements("requirements.txt") install_runtime_dependencies(self.logger, self.project) verify(pybuilder.plugins.python.install_dependencies_plugin ).execute_command([PIP_EXECUTABLE, "install", 'spam'], any_value(), shell=False) verify(pybuilder.plugins.python.install_dependencies_plugin ).execute_command([PIP_EXECUTABLE, "install", 'eggs'], any_value(), shell=False) verify(pybuilder.plugins.python.install_dependencies_plugin ).execute_command( [PIP_EXECUTABLE, "install", '-r', 'requirements.txt'], any_value(), shell=False) def test_should_install_multiple_dependencies_locally(self): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on("foo") self.project.set_property("install_dependencies_local_mapping", { "spam": "any-dir", "eggs": "any-other-dir" }) install_runtime_dependencies(self.logger, self.project) verify(pybuilder.plugins.python.install_dependencies_plugin ).execute_command( [PIP_EXECUTABLE, "install", "-t", "any-dir", 'spam'], any_value(), shell=False) verify( pybuilder.plugins.python.install_dependencies_plugin ).execute_command( [PIP_EXECUTABLE, "install", "-t", "any-other-dir", 'eggs'], any_value(), shell=False) verify(pybuilder.plugins.python.install_dependencies_plugin ).execute_command([PIP_EXECUTABLE, "install", 'foo'], any_value(), shell=False)
class InstallRuntimeDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project("unittest", ".") self.project.set_property("dir_install_logs", "any_directory") self.logger = Mock(Logger) initialize_install_dependencies_plugin(self.project) @patch("pybuilder.plugins.python.install_dependencies_plugin.execute_command", return_value=0) def test_should_install_multiple_dependencies(self, exec_command, get_package_version): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on_requirements("requirements.txt") install_runtime_dependencies(self.logger, self.project) exec_command(PIP_EXEC_STANZA + ["install", 'spam'], ANY, shell=False) exec_command(PIP_EXEC_STANZA + ["install", 'eggs'], ANY, shell=False) exec_command(PIP_EXEC_STANZA + ["install", '-r', 'requirements.txt'], ANY, shell=False) @patch("pybuilder.plugins.python.install_dependencies_plugin.execute_command", return_value=0) def test_should_install_multiple_dependencies_locally(self, exec_command, get_package_version): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on("foo") self.project.set_property("install_dependencies_local_mapping", { "spam": "any-dir", "eggs": "any-other-dir" }) install_runtime_dependencies(self.logger, self.project) exec_command(PIP_EXEC_STANZA + ["install", "-t", "any-dir", 'spam'], ANY, shell=False) exec_command(PIP_EXEC_STANZA + ["install", "-t", "any-other-dir", 'eggs'], ANY, shell=False) exec_command(PIP_EXEC_STANZA + ["install", 'foo'], ANY, shell=False)
class InstallRuntimeDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project("unittest", ".") self.project.set_property("dir_install_logs", "any_directory") self.logger = mock(Logger) when(pybuilder.plugins.python.install_dependencies_plugin ).execute_command(any_value(), any_value(), shell=True).thenReturn(0) def tearDown(self): unstub() def test_should_install_multiple_dependencies(self): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on_requirements("requirements.txt") install_runtime_dependencies(self.logger, self.project) verify(pybuilder.plugins.python.install_dependencies_plugin ).execute_command("pip install 'spam'", any_value(), shell=True) verify(pybuilder.plugins.python.install_dependencies_plugin ).execute_command("pip install 'eggs'", any_value(), shell=True) verify(pybuilder.plugins.python.install_dependencies_plugin ).execute_command("pip install '-rrequirements.txt'", any_value(), shell=True)
class InstallRuntimeDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project("unittest", ".") self.project.set_property("dir_install_logs", "any_directory") self.logger = mock(Logger) when( pybuilder.plugins.python.install_dependencies_plugin).execute_command(any_value(), any_value(), shell=True).thenReturn(0) def tearDown(self): unstub() def test_should_install_multiple_dependencies(self): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on_requirements("requirements.txt") install_runtime_dependencies(self.logger, self.project) verify( pybuilder.plugins.python.install_dependencies_plugin).execute_command("pip install 'spam'", any_value(), shell=True) verify( pybuilder.plugins.python.install_dependencies_plugin).execute_command("pip install 'eggs'", any_value(), shell=True) verify( pybuilder.plugins.python.install_dependencies_plugin).execute_command("pip install '-rrequirements.txt'", any_value(), shell=True)
class InstallRuntimeDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project("unittest", ".") self.project.set_property("dir_install_logs", "any_directory") self.logger = mock(Logger) initialize_install_dependencies_plugin(self.project) when( pybuilder.plugins.python.install_dependencies_plugin).execute_command(any_value(), any_value(), shell=False).thenReturn(0) def tearDown(self): unstub() def test_should_install_multiple_dependencies(self): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on_requirements("requirements.txt") install_runtime_dependencies(self.logger, self.project) verify(pybuilder.plugins.python.install_dependencies_plugin).execute_command( [PIP_EXECUTABLE, "install", 'spam'], any_value(), shell=False) verify(pybuilder.plugins.python.install_dependencies_plugin).execute_command( [PIP_EXECUTABLE, "install", 'eggs'], any_value(), shell=False) verify(pybuilder.plugins.python.install_dependencies_plugin).execute_command( [PIP_EXECUTABLE, "install", '-r', 'requirements.txt'], any_value(), shell=False) def test_should_install_multiple_dependencies_locally(self): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on("foo") self.project.set_property("install_dependencies_local_mapping", { "spam": "any-dir", "eggs": "any-other-dir" }) install_runtime_dependencies(self.logger, self.project) verify(pybuilder.plugins.python.install_dependencies_plugin).execute_command( [PIP_EXECUTABLE, "install", "-t", "any-dir", 'spam'], any_value(), shell=False) verify(pybuilder.plugins.python.install_dependencies_plugin).execute_command( [PIP_EXECUTABLE, "install", "-t", "any-other-dir", 'eggs'], any_value(), shell=False) verify(pybuilder.plugins.python.install_dependencies_plugin).execute_command( [PIP_EXECUTABLE, "install", 'foo'], any_value(), shell=False)
class InstallDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project(".") def test_should_leave_user_specified_properties_when_initializing_plugin(self): expected_properties = { "distutils_commands": ["foo", "bar"], "distutils_issue8876_workaround_enabled": True, "distutils_classifiers": [ "Development Status :: 3 - Beta", "Programming Language :: Rust" ], "distutils_use_setuptools": False } for property_name, property_value in expected_properties.items(): self.project.set_property(property_name, property_value) initialize_distutils_plugin(self.project) for property_name, property_value in expected_properties.items(): self.assertEquals( self.project.get_property("distutils_commands"), ["foo", "bar"]) self.assertEquals( self.project.get_property("distutils_issue8876_workaround_enabled"), True) self.assertEquals( self.project.get_property("distutils_classifiers"), ["Development Status :: 3 - Beta", "Programming Language :: Rust"]) self.assertEquals( self.project.get_property("distutils_use_setuptools"), False) 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( "['spam']", 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( "[\n 'eggs',\n 'spam>=0.7'\n ]", build_install_dependencies_string(self.project)) 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 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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( "[\n 'foo',\n 'bar'\n ]", build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_ignore_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", "-e 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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))
class DependencyLinksTest(unittest.TestCase): def setUp(self): self.project = Project(".") def test_should_return_empty_string_when_no_link_dependency_is_given(self): self.assertEqual("[]", build_dependency_links_string(self.project)) def test_should_return_dependency_link(self): self.project.depends_on( "pyassert", url="https://github.com/downloads/halimath/pyassert/pyassert-0.2.2.tar.gz") self.assertEqual( "['https://github.com/downloads/halimath/pyassert/pyassert-0.2.2.tar.gz']", build_dependency_links_string(self.project)) def test_should_return_dependency_links(self): self.project.depends_on("pyassert1", url="https://github.com/downloads/halimath/pyassert/pyassert1-0.2.2.tar.gz") self.project.depends_on("pyassert2", url="https://github.com/downloads/halimath/pyassert/pyassert2-0.2.2.tar.gz") self.assertEqual("[\n 'https://github.com/downloads/halimath/pyassert/pyassert1-0.2.2.tar.gz',\n" " 'https://github.com/downloads/halimath/pyassert/pyassert2-0.2.2.tar.gz'\n" " ]", build_dependency_links_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_use_editable_urls_from_requirements_as_dependency_links(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = [ "-e git+https://github.com/someuser/someproject.git#egg=some_package", "-e svn+https://github.com/someuser/someproject#egg=some_package"] self.project.depends_on_requirements("requirements.txt") self.assertEqual( "[\n 'git+https://github.com/someuser/someproject.git#egg=some_package',\n" " 'svn+https://github.com/someuser/someproject#egg=some_package'\n" " ]", build_dependency_links_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_use_expanded_editable_urls_from_requirements_as_dependency_links(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = [ "--editable git+https://github.com/someuser/someproject.git#egg=some_package", "--editable svn+https://github.com/someuser/someproject#egg=some_package"] self.project.depends_on_requirements("requirements.txt") self.assertEqual( "[\n 'git+https://github.com/someuser/someproject.git#egg=some_package',\n" " 'svn+https://github.com/someuser/someproject#egg=some_package'\n" " ]", build_dependency_links_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_use_editable_urls_from_requirements_combined_with_url_dependencies(self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = [ "-e svn+https://github.com/someuser/someproject#egg=some_package"] self.project.depends_on( "jedi", url="git+https://github.com/davidhalter/jedi") self.project.depends_on_requirements("requirements.txt") self.assertEqual( "[\n 'git+https://github.com/davidhalter/jedi',\n" " 'svn+https://github.com/someuser/someproject#egg=some_package'\n" " ]", build_dependency_links_string(self.project))
class InstallDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project(".") def test_should_leave_user_specified_properties_when_initializing_plugin( self): expected_properties = { "distutils_commands": ["foo", "bar"], "distutils_issue8876_workaround_enabled": True, "distutils_classifiers": ["Development Status :: 3 - Beta", "Programming Language :: Rust"], "distutils_use_setuptools": False } for property_name, property_value in expected_properties.items(): self.project.set_property(property_name, property_value) initialize_distutils_plugin(self.project) for property_name, property_value in expected_properties.items(): self.assertEqual(self.project.get_property("distutils_commands"), ["foo", "bar"]) self.assertEqual( self.project.get_property( "distutils_issue8876_workaround_enabled"), True) self.assertEqual( self.project.get_property("distutils_classifiers"), [ "Development Status :: 3 - Beta", "Programming Language :: Rust" ]) self.assertEqual( self.project.get_property("distutils_use_setuptools"), False) 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("['spam']", 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( "[\n 'eggs',\n 'spam>=0.7'\n ]", build_install_dependencies_string(self.project)) 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 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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("[\n 'foo',\n 'bar'\n ]", build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_ignore_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", "-e 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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))
class DependencyLinksTest(unittest.TestCase): def setUp(self): self.project = Project(".") def test_should_return_empty_string_when_no_link_dependency_is_given(self): self.assertEqual("[]", build_dependency_links_string(self.project)) def test_should_return_dependency_link(self): self.project.depends_on( "pyassert", url= "https://github.com/downloads/halimath/pyassert/pyassert-0.2.2.tar.gz" ) self.assertEqual( "['https://github.com/downloads/halimath/pyassert/pyassert-0.2.2.tar.gz']", build_dependency_links_string(self.project)) def test_should_return_dependency_links(self): self.project.depends_on( "pyassert1", url= "https://github.com/downloads/halimath/pyassert/pyassert1-0.2.2.tar.gz" ) self.project.depends_on( "pyassert2", url= "https://github.com/downloads/halimath/pyassert/pyassert2-0.2.2.tar.gz" ) self.assertEqual( "[\n 'https://github.com/downloads/halimath/pyassert/pyassert1-0.2.2.tar.gz',\n" " 'https://github.com/downloads/halimath/pyassert/pyassert2-0.2.2.tar.gz'\n" " ]", build_dependency_links_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_use_editable_urls_from_requirements_as_dependency_links( self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = [ "-e git+https://github.com/someuser/someproject.git#egg=some_package", "-e svn+https://github.com/someuser/someproject#egg=some_package" ] self.project.depends_on_requirements("requirements.txt") self.assertEqual( "[\n 'git+https://github.com/someuser/someproject.git#egg=some_package',\n" " 'svn+https://github.com/someuser/someproject#egg=some_package'\n" " ]", build_dependency_links_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_use_expanded_editable_urls_from_requirements_as_dependency_links( self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = [ "--editable git+https://github.com/someuser/someproject.git#egg=some_package", "--editable svn+https://github.com/someuser/someproject#egg=some_package" ] self.project.depends_on_requirements("requirements.txt") self.assertEqual( "[\n 'git+https://github.com/someuser/someproject.git#egg=some_package',\n" " 'svn+https://github.com/someuser/someproject#egg=some_package'\n" " ]", build_dependency_links_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_use_editable_urls_from_requirements_combined_with_url_dependencies( self, mock_open): mock_open.return_value = MagicMock(spec=TYPE_FILE) handle = mock_open.return_value.__enter__.return_value handle.readlines.return_value = [ "-e svn+https://github.com/someuser/someproject#egg=some_package" ] self.project.depends_on("jedi", url="git+https://github.com/davidhalter/jedi") self.project.depends_on_requirements("requirements.txt") self.assertEqual( "[\n 'git+https://github.com/davidhalter/jedi',\n" " 'svn+https://github.com/someuser/someproject#egg=some_package'\n" " ]", build_dependency_links_string(self.project))
class InstallDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project(".") 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_single_dependency_string_with_version(self): self.project.depends_on("spam", "0.7") self.assertEqual( 'install_requires = [ "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_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( 'install_requires = [ "spam" ],', 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( 'install_requires = [ "spam==0.7" ],', build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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( 'install_requires = [ "foo", "bar" ],', build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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( 'install_requires = [ "bar" ],', build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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( 'install_requires = [ "bar" ],', build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) def test_should_ignore_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", "-e 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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 dependencies(project: Project): project.depends_on_requirements('requirements.txt') project.build_depends_on_requirements('requirements-dev.txt')
class InstallDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project(".") 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_single_dependency_string_with_version(self): self.project.depends_on("spam", "0.7") self.assertEqual( 'install_requires = [ "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_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( 'install_requires = [ "spam" ],', 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( 'install_requires = [ "spam==0.7" ],', build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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( 'install_requires = [ "foo", "bar" ],', build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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( 'install_requires = [ "bar" ],', build_install_dependencies_string(self.project)) @patch("pybuilder.plugins.python.distutils_plugin.open", create=True) 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( 'install_requires = [ "bar" ],', build_install_dependencies_string(self.project))
class InstallRuntimeDependenciesTest(unittest.TestCase): def setUp(self): self.project = Project("unittest", ".") self.project.set_property("install_env", "whatever") self.project.set_property("dir_install_logs", "any_directory") self.project.set_property("dir_target", "/any_target_directory") self.logger = Mock(Logger) self.reactor = Mock() self.pyb_env = Mock() self.pyb_env.executable = ["a/b"] self.pyb_env.env_dir = "a" self.pyb_env.execute_command.return_value = 0 self.reactor.python_env_registry = {"whatever": self.pyb_env} initialize_install_dependencies_plugin(self.project) @patch("pybuilder.install_utils.tail_log") @patch("pybuilder.install_utils.open") @patch("pybuilder.install_utils.create_constraint_file") @patch("pybuilder.install_utils.get_packages_info", return_value={}) def test_should_install_multiple_dependencies(self, *_): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on_requirements("requirements.txt") install_runtime_dependencies(self.logger, self.project, self.reactor) exec_cmd = self.pyb_env.execute_command call_stanza = self.pyb_env.executable + PIP_MODULE_STANZA + [ "install", "-c", ANY ] exec_cmd.assert_called_with(call_stanza + ["eggs", "spam", "-r", "requirements.txt"], outfile_name=ANY, error_file_name=ANY, env=ANY, cwd=None, shell=False, no_path_search=True) @patch("pybuilder.install_utils.tail_log") @patch("pybuilder.install_utils.open") @patch("pybuilder.install_utils.create_constraint_file") @patch("pybuilder.install_utils.get_packages_info", return_value={}) def test_should_install_multiple_dependencies_locally(self, *_): self.project.depends_on("spam") self.project.depends_on("eggs") self.project.depends_on("foo") self.project.set_property("install_dependencies_local_mapping", { "spam": "any-dir", "eggs": "any-other-dir" }) install_runtime_dependencies(self.logger, self.project, self.reactor) exec_cmd = self.pyb_env.execute_command call_stanza = self.pyb_env.executable + PIP_MODULE_STANZA + [ "install", "-c", ANY ] exec_cmd.assert_has_calls([ call(call_stanza + ["-t", "any-other-dir", "eggs"], outfile_name=ANY, error_file_name=ANY, env=ANY, cwd=None, shell=False, no_path_search=True), call(call_stanza + ["-t", "any-dir", "spam"], outfile_name=ANY, error_file_name=ANY, env=ANY, cwd=None, shell=False, no_path_search=True), call(call_stanza + ["foo"], outfile_name=ANY, error_file_name=ANY, env=ANY, cwd=None, shell=False, no_path_search=True) ], any_order=True)
def set_properties(project: Project): project.depends_on_requirements('requirements.txt') project.set_property('coverage_threshold_warn', 0)