Drop BaseSettings.get_addon() prefix magic

This commit is contained in:
Jakob de Maeyer 2015-11-07 19:56:47 +01:00
parent b10caf91a1
commit 8e5d067af1
10 changed files with 4 additions and 85 deletions

View File

@ -7,11 +7,9 @@ from pkg_resources import WorkingSet, Distribution, Requirement
import zope.interface
from zope.interface.verify import verifyObject
from scrapy.exceptions import NotConfigured
from scrapy.interfaces import IAddon
from scrapy.utils.conf import build_component_list
from scrapy.utils.misc import load_module_or_object
from scrapy.utils.project import get_project_path
@zope.interface.implementer(IAddon)
@ -244,14 +242,8 @@ class AddonManager(Mapping):
"""Get an add-on object by its Python or file path.
``path`` is assumed to be either a Python or a file path of a Scrapy
add-on. If no object is found at ``path``, it is tried again first with
``projectname.addons`` prepended (pointing to the current project's
``addons`` folder), then with ``scrapy.addons`` prepended (poiting to
Scrapy's built-in add-ons). These convenience shortcuts will only work
with Python paths, not file paths.
If the object or module pointed to by ``path`` has an attribute named
``_addon`` that attribute will be assumed to be the add-on.
add-on. If the object or module pointed to by ``path`` has an attribute
named ``_addon`` that attribute will be assumed to be the add-on.
:meth:`get_addon` will keep following ``_addon`` attributes until it
finds an object that does not have an attribute named ``_addon``.
@ -259,20 +251,9 @@ class AddonManager(Mapping):
:type path: ``str``
"""
if isinstance(path, six.string_types):
prefixes = ['', 'scrapy.addons.']
try:
prefixes.insert(1, get_project_path() + '.addons.')
except NotConfigured:
warnings.warn("Unable to locate project Python path")
for prefix in prefixes:
fullpath = prefix + path
try:
obj = load_module_or_object(fullpath)
except NameError:
pass
else:
break
else:
obj = load_module_or_object(path)
except NameError:
raise NameError("Could not find add-on '%s'" % path)
else:
obj = path

View File

@ -11,7 +11,6 @@ import zope.interface
from zope.interface.verify import verifyObject
from zope.interface.exceptions import BrokenImplementation
import scrapy.addons
from scrapy.addons import Addon, AddonManager
from scrapy.crawler import Crawler
from scrapy.interfaces import IAddon
@ -187,32 +186,6 @@ class AddonManagerTest(unittest.TestCase):
x._addon._addon = addons.GoodAddon('inner')
self.assertIs(self.manager.get_addon(x), x._addon._addon)
@mock.patch.object(scrapy.addons, 'get_project_path',
return_value='tests.test_addons.project')
def test_get_addon_prefixes(self, get_project_path_mock):
# From python path
self.assertEqual(self.manager.get_addon('addonmod').FROM,
'test_addons.addonmod')
# From project 'addons' folder
self.assertEqual(self.manager.get_addon('addonmod2').FROM,
'test_addons.project.addons.addonmod2')
# Assert prefix priority '' > 'project.addons'
self.assertEqual(self.manager.get_addon('addonmod').FROM,
'test_addons.addonmod')
# From scrapy's 'addons'
from . import scrapy_addons
with mock.patch.dict('sys.modules', {'scrapy.addons': scrapy_addons}):
self.assertEqual(self.manager.get_addon('addonmod3').FROM,
'test_addons.scrapy_addons.addonmod3')
# Assert prefix priority 'project.addons' > 'scrapy.addons'
self.assertEqual(self.manager.get_addon('addonmod2').FROM,
'test_addons.project.addons.addonmod2')
# Assert prefix priority '' > 'scrapy.addons.'
self.assertEqual(self.manager.get_addon('addonmod').FROM,
'test_addons.addonmod')
def test_load_dict_load_settings(self):
def _test_load_method(func, *args, **kwargs):
manager = AddonManager()

View File

@ -1,7 +0,0 @@
import zope.interface
from scrapy.interfaces import IAddon
zope.interface.moduleProvides(IAddon)
FROM = 'test_addons.project.addons.addonmod'

View File

@ -1,7 +0,0 @@
import zope.interface
from scrapy.interfaces import IAddon
zope.interface.moduleProvides(IAddon)
FROM = 'test_addons.project.addons.addonmod2'

View File

@ -1,7 +0,0 @@
import zope.interface
from scrapy.interfaces import IAddon
zope.interface.moduleProvides(IAddon)
FROM = 'test_addons.scrapy_addons.addonmod'

View File

@ -1,7 +0,0 @@
import zope.interface
from scrapy.interfaces import IAddon
zope.interface.moduleProvides(IAddon)
FROM = 'test_addons.scrapy_addons.addonmod2'

View File

@ -1,7 +0,0 @@
import zope.interface
from scrapy.interfaces import IAddon
zope.interface.moduleProvides(IAddon)
FROM = 'test_addons.scrapy_addons.addonmod3'