def test_ignore_broken_distributions_loads_good_distributions(self):
        # Make sure that the distributions from eggs are already in the working
        # set. This includes acme.foo, with version 0.1a1.
        for dist in pkg_resources.find_distributions(self.eggs_dir):
            pkg_resources.working_set.add(dist)

        data = {"count": 0}

        def on_broken_distribution(dist, exc):
            data["count"] += 1
            data["distribution"] = dist
            data["exc"] = exc

        plugin_manager = EggBasketPluginManager(
            plugin_path=[
                self.eggs_dir,
                self._create_broken_distribution_eggdir("acme.foo*.egg"),
            ],
            on_broken_distribution=on_broken_distribution,
        )

        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 3)
        self.assertIn("acme.foo", ids)
        self.assertIn("acme.bar", ids)
        self.assertIn("acme.baz", ids)

        self.assertEqual(data["count"], 1)
        self.assertEqual(data["distribution"].project_name, "acme.foo")
        exc = data["exc"]
        self.assertTrue(isinstance(exc, pkg_resources.VersionConflict))
    def test_ignore_broken_distributions_loads_good_distributions(self):
        data = {'count': 0}

        def on_broken_distribution(dist, exc):
            data['count'] += 1
            data['distribution'] = dist
            data['exc'] = exc

        plugin_manager = EggBasketPluginManager(
            plugin_path=[
                self.eggs_dir,
                self._create_broken_distribution_eggdir('acme.foo*.egg')
            ],
            on_broken_distribution=on_broken_distribution,
        )

        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 3)
        self.assertIn('acme.foo', ids)
        self.assertIn('acme.bar', ids)
        self.assertIn('acme.baz', ids)

        self.assertEqual(data['count'], 1)
        self.assertEqual(data['distribution'].project_name, 'acme.foo')
        exc = data['exc']
        self.assertTrue(isinstance(exc, pkg_resources.VersionConflict))

        return
    def test_ignore_broken_plugins_loads_good_plugins(self):
        data = {'count': 0}

        def on_broken_plugin(ep, exc):
            data['count'] += 1
            data['entry_point'] = ep
            data['exc'] = exc

        plugin_manager = EggBasketPluginManager(
            plugin_path=[self.bad_eggs_dir, self.eggs_dir],
            on_broken_plugin=on_broken_plugin,
        )

        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 3)
        self.assertIn('acme.foo', ids)
        self.assertIn('acme.bar', ids)
        self.assertIn('acme.baz', ids)

        self.assertEqual(data['count'], 1)
        self.assertEqual(data['entry_point'].name, 'acme.bad')
        exc = data['exc']
        self.assertTrue(isinstance(exc, ImportError))

        return
 def test_ignore_broken_distributions_raises_exceptions_by_default(self):
     plugin_manager = EggBasketPluginManager(
         plugin_path = [self.bad_eggs_dir,
             self._create_broken_distribution_eggdir('acme.foo*.egg')],
     )
     with self.assertRaises(SystemError):
         iter(plugin_manager)
    def test_ignore_broken_distributions_loads_good_distributions(self):
        data = {"count": 0}

        def on_broken_distribution(dist, exc):
            data["count"] += 1
            data["distribution"] = dist
            data["exc"] = exc

        plugin_manager = EggBasketPluginManager(
            plugin_path=[
                self.eggs_dir,
                self._create_broken_distribution_eggdir("acme.foo*.egg"),
            ],
            on_broken_distribution=on_broken_distribution,
        )

        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 3)
        self.assertIn("acme.foo", ids)
        self.assertIn("acme.bar", ids)
        self.assertIn("acme.baz", ids)

        self.assertEqual(data["count"], 1)
        self.assertEqual(data["distribution"].project_name, "acme.foo")
        exc = data["exc"]
        self.assertTrue(isinstance(exc, pkg_resources.VersionConflict))
    def test_find_plugins_in_eggs_on_the_plugin_path(self):

        plugin_manager = EggBasketPluginManager(plugin_path=[self.eggs_dir])

        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 3)
        self.assertIn("acme.foo", ids)
        self.assertIn("acme.bar", ids)
        self.assertIn("acme.baz", ids)
    def test_ignore_broken_distributions_raises_exceptions_by_default(self):
        # Make sure that the distributions from eggs are already in the working
        # set. This includes acme.foo, with version 0.1a1.
        for dist in pkg_resources.find_distributions(self.eggs_dir):
            pkg_resources.working_set.add(dist)

        plugin_manager = EggBasketPluginManager(
            plugin_path=[
                # Attempt to add acme.foo, with conflicting version 0.1a11
                self._create_broken_distribution_eggdir("acme.foo*.egg"),
            ], )
        with self.assertRaises(SystemError):
            iter(plugin_manager)
    def test_only_find_plugins_whose_ids_are_in_the_include_list(self):

        # Note that the items in the list use the 'fnmatch' syntax for matching
        # plugins Ids.
        include = ["acme.foo", "acme.bar"]

        plugin_manager = EggBasketPluginManager(plugin_path=[self.eggs_dir],
                                                include=include)

        # The Ids of the plugins that we expect the plugin manager to find.
        expected = ["acme.foo", "acme.bar"]

        # Make sure the plugin manager found only the required plugins and that
        # it starts and stops them correctly..
        self._test_start_and_stop(plugin_manager, expected)
    def test_reflect_changes_to_the_plugin_path(self):
        plugin_manager = EggBasketPluginManager()
        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 0)

        plugin_manager.plugin_path.append(self.eggs_dir)
        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 3)
        self.assertIn("acme.foo", ids)
        self.assertIn("acme.bar", ids)
        self.assertIn("acme.baz", ids)

        del plugin_manager.plugin_path[0]
        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 0)
    def test_ignore_plugins_matching_a_wildcard_in_the_exclude_list(self):

        # Note that the items in the list use the 'fnmatch' syntax for matching
        # plugins Ids.
        exclude = ['acme.b*']

        plugin_manager = EggBasketPluginManager(plugin_path=[self.eggs_dir],
                                                exclude=exclude)

        # The Ids of the plugins that we expect the plugin manager to find.
        expected = ['acme.foo']

        # Make sure the plugin manager found only the required plugins and that
        # it starts and stops them correctly..
        self._test_start_and_stop(plugin_manager, expected)

        return
    def test_ignore_broken_plugins_loads_good_plugins(self):
        data = {"count": 0}

        def on_broken_plugin(ep, exc):
            data["count"] += 1
            data["entry_point"] = ep
            data["exc"] = exc

        plugin_manager = EggBasketPluginManager(
            plugin_path=[self.bad_eggs_dir, self.eggs_dir],
            on_broken_plugin=on_broken_plugin,
        )

        ids = [plugin.id for plugin in plugin_manager]
        self.assertEqual(len(ids), 3)
        self.assertIn("acme.foo", ids)
        self.assertIn("acme.bar", ids)
        self.assertIn("acme.baz", ids)

        self.assertEqual(data["count"], 1)
        self.assertEqual(data["entry_point"].name, "acme.bad")
        exc = data["exc"]
        self.assertTrue(isinstance(exc, ImportError))
 def test_ignore_broken_plugins_raises_exceptions_by_default(self):
     plugin_manager = EggBasketPluginManager(
         plugin_path=[self.bad_eggs_dir, self.eggs_dir], )
     with self.assertRaises(ImportError):
         list(plugin_manager)