提交 4fc4df2f 编辑于 作者: Ian Cordasco's avatar Ian Cordasco
浏览文件

Merge branch 'raise_exception_when_plugin_entry_point_is_not_callable' into 'master'

Raise exception when entry_point not callable

Raise exception when entry_point not callable

E.g.:

```
$ .tox/flake8/bin/flake8 mobileweb
Traceback (most recent call last):
  File ".tox/flake8/bin/flake8", line 9, in <module>
    load_entry_point('flake8', 'console_scripts', 'flake8')()
  File "/Users/marca/dev/git-repos/flake8/src/flake8/main/cli.py", line 16, in main
    app.run(argv)
  File "/Users/marca/dev/git-repos/flake8/src/flake8/main/application.py", line 316, in run
    self._run(argv)
  File "/Users/marca/dev/git-repos/flake8/src/flake8/main/application.py", line 299, in _run
    self.initialize(argv)
  File "/Users/marca/dev/git-repos/flake8/src/flake8/main/application.py", line 289, in initialize
    self.find_plugins()
  File "/Users/marca/dev/git-repos/flake8/src/flake8/main/application.py", line 143, in find_plugins
    self.check_plugins.load_plugins()
  File "/Users/marca/dev/git-repos/flake8/src/flake8/plugins/manager.py", line 375, in load_plugins
    plugins = list(self.manager.map(load_plugin))
  File "/Users/marca/dev/git-repos/flake8/src/flake8/plugins/manager.py", line 267, in map
    yield func(self.plugins[name], *args, **kwargs)
  File "/Users/marca/dev/git-repos/flake8/src/flake8/plugins/manager.py", line 373, in load_plugin
    return plugin.load_plugin()
  File "/Users/marca/dev/git-repos/flake8/src/flake8/plugins/manager.py", line 173, in load_plugin
    raise failed_to_load
flake8.exceptions.FailedToLoadPlugin: Flake8 failed to load plugin "P999" due to Plugin <module 'teamcity.flake8_plugin' from '/Users/marca/dev/git-repos/teamcity-messages/teamcity/flake8_plugin.pyc'> is not a callable. It might be written for an older version of flake8 and might not work with this version.
```

This is nicer than the previous behavior of raising an obscure `PicklingError` and then hanging.

```
$ .tox/flake8/bin/flake8 mobileweb
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/queues.py", line 268, in _feed
    send(obj)
PicklingError: Can't pickle <type 'module'>: attribute lookup __builtin__.module failed
```

*Related to:*  164

See merge request !101
显示 6 个添加0 个删除
+6 -0
......@@ -139,6 +139,12 @@ class Plugin(object):
self._plugin = self.entry_point.load(
require=verify_requirements
)
if not callable(self._plugin):
msg = ('Plugin %r is not a callable. It might be written for an'
' older version of flake8 and might not work with this'
' version' % self._plugin)
LOG.critical(msg)
raise TypeError(msg)
def load_plugin(self, verify_requirements=False):
"""Retrieve the plugin for this entry-point.
......
支持 Markdown
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册