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)