Example #1
0
    def test_should_not_load_module_after_downloading_when_download_fails(self, install, load):
        install.side_effect = MissingPluginException("BOOM")
        downloader = DownloadingPluginLoader(Mock())
        plugin = downloader.load_plugin(Mock(), "pypi:external_plugin")

        self.assertFalse(load.called)
        self.assertEquals(plugin, None)
Example #2
0
    def test_should_load_module_after_downloading_when_download_succeeds(self, _, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        plugin = downloader.load_plugin(project, "pypi:external_plugin")

        load.assert_called_with(downloader, project, "pypi:external_plugin")
        self.assertEquals(plugin, load.return_value)
    def test_should_load_module_after_downloading_with_vcs_when_download_succeeds(self, _, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        plugin = downloader.load_plugin(project, "vcs:external_plugin URL", plugin_module_name="external_plugin_module")

        load.assert_called_with("external_plugin_module", "vcs:external_plugin URL")
        self.assertEquals(plugin, load.return_value)
Example #4
0
    def test_should_load_module_after_downloading_with_vcs_when_download_succeeds(self, _, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        plugin = downloader.load_plugin(project, "vcs:external_plugin URL", plugin_module_name="external_plugin_module")

        load.assert_called_with("external_plugin_module", "vcs:external_plugin URL")
        self.assertEqual(plugin, load.return_value)
    def test_should_update_pypi_plugin_with_non_exact_version_before_first_loading_attempt(self, install, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        load.return_value = Mock()

        self.assertEquals(load.return_value, downloader.load_plugin(project, "pypi:spam", ">1.2"))

        install.assert_called_with(project, "pypi:spam", ">1.2", downloader.logger, None, True, False)
        self.assertEquals(install.call_count, 1)
    def test_should_force_reinstall_vcs_plugin_before_first_loading_attempt(self, install, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        load.return_value = Mock()

        self.assertEquals(load.return_value, downloader.load_plugin(project, "vcs:spam", plugin_module_name="spam"))

        install.assert_called_with(project, "vcs:spam", None, downloader.logger, "spam", False, True)
        self.assertEquals(install.call_count, 1)
    def test_should_import_plugin_when_requiring_plugin_and_plugin_is_found_as_third_party(self, install, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        load.return_value = Mock()

        self.assertEquals(load.return_value, downloader.load_plugin(project, "spam"))

        install.assert_not_called()
        self.assertEquals(install.call_count, 0)
Example #8
0
    def test_should_update_pypi_plugin_with_non_exact_version_before_first_loading_attempt(self, install, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        load.return_value = Mock()

        self.assertEqual(load.return_value, downloader.load_plugin(project, "pypi:spam", ">1.2"))

        install.assert_called_with(project, "pypi:spam", ">1.2", downloader.logger, None, True, False)
        self.assertEqual(install.call_count, 1)
Example #9
0
    def test_should_force_reinstall_vcs_plugin_before_first_loading_attempt(self, install, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        load.return_value = Mock()

        self.assertEqual(load.return_value, downloader.load_plugin(project, "vcs:spam", plugin_module_name="spam"))

        install.assert_called_with(project, "vcs:spam", None, downloader.logger, "spam", False, True)
        self.assertEqual(install.call_count, 1)
Example #10
0
    def test_should_import_plugin_when_requiring_plugin_and_plugin_is_found_as_third_party(self, install, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        load.return_value = Mock()

        self.assertEqual(load.return_value, downloader.load_plugin(project, "spam"))

        install.assert_not_called()
        self.assertEqual(install.call_count, 0)
    def test_should_not_update_pypi_plugin_with_exact_version_before_first_loading_attempt(self, install, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        plugin = Mock()
        load.side_effect = (MissingPluginException("no spam installed"), plugin)

        self.assertEquals(plugin, downloader.load_plugin(project, "pypi:spam", "===1.4"))

        install.assert_called_with(project, "pypi:spam", "===1.4", downloader.logger, None)
        self.assertEquals(install.call_count, 1)
Example #12
0
    def test_should_not_update_pypi_plugin_with_exact_version_before_first_loading_attempt(self, install, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        plugin = Mock()
        load.side_effect = (MissingPluginException("no spam installed"), plugin)

        self.assertEqual(plugin, downloader.load_plugin(project, "pypi:spam", "===1.4"))

        install.assert_called_with(project, "pypi:spam", "===1.4", downloader.logger, None)
        self.assertEqual(install.call_count, 1)
    def test_should_install_upgrade_plugin_with_non_exact_version(self):
        logger = Mock()
        reactor = Mock()
        pyb_env = Mock()
        reactor.python_env_registry = {"pybuilder": pyb_env}
        reactor.pybuilder_venv = pyb_env

        pd = PluginDef("pypi:some-plugin", "~=1.2.3")
        downloader = DownloadingPluginLoader(logger)
        downloader.install_plugin(reactor, pd)

        pyb_env.install_dependencies.assert_called_with([pd.dependency],
                                                        package_type="plugin")
    def test_should_install_plugin_with_vcs_and_version(self):
        logger = Mock()
        reactor = Mock()
        pyb_env = Mock()
        reactor.python_env_registry = {"pybuilder": pyb_env}
        reactor.pybuilder_venv = pyb_env

        pd = PluginDef("vcs:some-plugin URL", "===1.2.3", "module_name")
        downloader = DownloadingPluginLoader(logger)
        downloader.install_plugin(reactor, pd)

        pyb_env.install_dependencies.assert_called_with([pd.dependency],
                                                        package_type="plugin")
    def test_should_download_module_from_pypi(self, load):
        logger = Mock()
        reactor = Mock()
        pyb_env = Mock()
        reactor.python_env_registry = {"pybuilder": pyb_env}
        reactor.pybuilder_venv = pyb_env

        pd = PluginDef("pypi:external_plugin")
        pl = DownloadingPluginLoader(logger)
        pl.install_plugin(reactor, pd)

        pyb_env.install_dependencies.assert_called_with(
            [Dependency("external_plugin")], package_type="plugin")
    def test_should_load_module_after_downloading_with_pypi_when_download_succeeds(
            self, load):
        logger = Mock()
        reactor = Mock()
        pyb_env = Mock()
        reactor.python_env_registry = {"pybuilder": pyb_env}
        reactor.pybuilder_venv = pyb_env

        downloader = DownloadingPluginLoader(logger)
        pd = PluginDef("pypi:external_plugin")
        plugin = downloader.load_plugin(reactor, pd)

        load.assert_called_with("external_plugin", pd.name)
        self.assertEqual(plugin, load.return_value)
    def test_should_import_plugin_when_requiring_plugin_and_plugin_is_found_as_third_party(
            self, load):
        logger = Mock()
        reactor = Mock()
        pyb_env = Mock()
        reactor.python_env_registry = {"pybuilder": pyb_env}
        reactor.pybuilder_venv = pyb_env
        load.return_value = Mock()

        downloader = DownloadingPluginLoader(logger)

        self.assertEqual(load.return_value,
                         downloader.load_plugin(reactor, PluginDef("spam")))
        pyb_env.install_dependencies.assert_not_called()
        self.assertEqual(pyb_env.install_dependencies.call_count, 0)
Example #18
0
    def __init__(self, logger, execution_manager, plugin_loader=None):
        self.logger = logger
        self.execution_manager = execution_manager
        if not plugin_loader:
            self.plugin_loader = DispatchingPluginLoader(
                self.logger, BuiltinPluginLoader(self.logger),
                DownloadingPluginLoader(self.logger))
        else:
            self.plugin_loader = plugin_loader

        self._plugins = []

        self._pending_plugin_installs = []
        self._plugins_imported = set()

        self._deferred_plugins = ModuleTraversalTree()

        self._deferred_import = False

        self.project = None
        self.project_module = None

        self._tools = []

        python_env_registry = self._python_env_registry = PythonEnvRegistry(
            self)
        system_pyenv = PythonEnv(sys.exec_prefix, self).populate()
        python_env_registry["system"] = system_pyenv

        self._sys_path_original = list(sys.path)
Example #19
0
    def test_should_not_load_module_twice_after_downloading_when_pypi_download_fails(self, install, load):
        install.side_effect = MissingPluginException("PyPI Install Boom")
        load.side_effect = MissingPluginException("PyPI Load Boom")
        downloader = DownloadingPluginLoader(Mock())
        self.assertRaises(MissingPluginException, downloader.load_plugin, Mock(), "pypi:external_plugin")

        self.assertEqual(load.call_count, 1)
Example #20
0
 def test_should_not_load_module_twice_after_downloading_when_vcs_download_fails(self, install, load):
     install.side_effect = MissingPluginException("VCS Install BOOM")
     load.side_effect = MissingPluginException("VCS Load Boom")
     downloader = DownloadingPluginLoader(Mock())
     self.assertRaises(MissingPluginException, downloader.load_plugin, Mock(), "vcs:external_plugin URL",
                       plugin_module_name="vcs_module_name")
     self.assertEqual(load.call_count, 1)
Example #21
0
    def test_should_raise_exception_when_requiring_plugin_and_plugin_is_not_found(self, _, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())
        load.side_effect = MissingPluginException("Load boom")

        self.assertRaises(MissingPluginException, downloader.load_plugin, project, "spam")

        load.assert_called_with("spam", "spam")
Example #22
0
    def test_should_fail_with_vcs_when_no_plugin_module_specified(
            self, _, load):
        project = Mock()
        downloader = DownloadingPluginLoader(Mock())

        self.assertRaises(UnspecifiedPluginNameException,
                          downloader.load_plugin, project,
                          "vcs:external_plugin URL")
Example #23
0
    def test_should_download_module_from_pypi(self, install, load):
        logger = Mock()
        project = Mock()
        project.get_property.side_effect = lambda x: "index_url" if x == "install_dependencies_index_url" \
            else "extra_index_url" if x == "install_dependencies_extra_index_url" else None
        load.side_effect = (MissingPluginException("external_plugin"), Mock())
        DownloadingPluginLoader(logger).load_plugin(project, "pypi:external_plugin")

        install.assert_called_with(project, "pypi:external_plugin", None, logger, None)
    def test_should_raise_error_when_protocol_is_invalid(self):
        logger = Mock()
        reactor = Mock()
        pyb_env = Mock()
        reactor.python_env_registry = {"pybuilder": pyb_env}
        reactor.pybuilder_venv = pyb_env
        downloader = DownloadingPluginLoader(logger)

        self.assertRaises(MissingPluginException, downloader.install_plugin,
                          reactor, PluginDef("some-plugin"))
Example #25
0
 def __init__(self, logger, execution_manager, plugin_loader=None):
     self.logger = logger
     self.execution_manager = execution_manager
     if not plugin_loader:
         self.plugin_loader = DispatchingPluginLoader(self.logger,
                                                      BuiltinPluginLoader(self.logger),
                                                      DownloadingPluginLoader(self.logger))
     else:
         self.plugin_loader = plugin_loader
     self._plugins = []
     self.project = None
Example #26
0
 def __init__(self, logger, execution_manager, plugin_loader=None):
     self.logger = logger
     self.execution_manager = execution_manager
     if not plugin_loader:
         builtin_plugin_loader = BuiltinPluginLoader(self.logger)
         installed_thirdparty_plugin_loader = ThirdPartyPluginLoader(
             self.logger)
         downloading_thirdparty_plugin_loader = DownloadingPluginLoader(
             self.logger)
         self.plugin_loader = DispatchingPluginLoader(
             self.logger, builtin_plugin_loader,
             installed_thirdparty_plugin_loader,
             downloading_thirdparty_plugin_loader)
     else:
         self.plugin_loader = plugin_loader
     self._plugins = []
     self.project = None
    def test_should_not_load_module_twice_after_downloading_when_pypi_download_fails(
            self, load):
        logger = Mock()
        reactor = Mock()
        pyb_env = Mock()
        reactor.python_env_registry = {"pybuilder": pyb_env}
        reactor.pybuilder_venv = pyb_env

        pyb_env.install_dependencies.side_effect = MissingPluginException(
            "PyPI Install Boom")
        load.side_effect = MissingPluginException("PyPI Load Boom")
        downloader = DownloadingPluginLoader(logger)
        pd = PluginDef("pypi:external_plugin")
        self.assertRaises(MissingPluginException, downloader.load_plugin,
                          Mock(), pd)

        self.assertEqual(load.call_count, 1)
    def test_should_download_module_from_pypi(self, install, _):
        logger = Mock()
        DownloadingPluginLoader(logger).load_plugin(Mock(),
                                                    "pypi:external_plugin")

        install.assert_called_with("pypi:external_plugin", None, logger)
Example #29
0
 def test_should_fail_with_vcs_and_no_module_name(self, install, load):
     install.side_effect = MissingPluginException("VCS BOOM")
     downloader = DownloadingPluginLoader(Mock())
     self.assertRaises(UnspecifiedPluginNameException,
                       downloader.load_plugin, Mock(),
                       "vcs:external_plugin URL")