Deprecate scrapy.utils.datatypes.MergeDict in favor of collections.ChainMap

This commit is contained in:
Eugenio Lacuesta 2019-07-13 22:44:57 -03:00
parent fa6a0d799b
commit 62f3e22481
No known key found for this signature in database
GPG Key ID: DA3EF2D0913E9810
2 changed files with 14 additions and 4 deletions

View File

@ -3,10 +3,13 @@ This module provides some commonly used processors for Item Loaders.
See documentation in docs/topics/loaders.rst
"""
try:
from collections import ChainMap
except ImportError:
from scrapy.utils.datatypes import MergeDict as ChainMap
from scrapy.utils.misc import arg_to_iter
from scrapy.utils.datatypes import MergeDict
from .common import wrap_loader_context
from scrapy.loader.common import wrap_loader_context
class MapCompose(object):
@ -18,7 +21,7 @@ class MapCompose(object):
def __call__(self, value, loader_context=None):
values = arg_to_iter(value)
if loader_context:
context = MergeDict(loader_context, self.default_loader_context)
context = ChainMap(loader_context, self.default_loader_context)
else:
context = self.default_loader_context
wrapped_funcs = [wrap_loader_context(f, context) for f in self.functions]
@ -45,7 +48,7 @@ class Compose(object):
def __call__(self, value, loader_context=None):
if loader_context:
context = MergeDict(loader_context, self.default_loader_context)
context = ChainMap(loader_context, self.default_loader_context)
else:
context = self.default_loader_context
wrapped_funcs = [wrap_loader_context(f, context) for f in self.functions]

View File

@ -245,6 +245,13 @@ class MergeDict(object):
first occurrence will be used.
"""
def __init__(self, *dicts):
if six.PY3:
warnings.warn(
"scrapy.utils.datatypes.MergeDict is deprecated in favor "
"of collections.ChainMap (introduced in Python 3.3)",
category=ScrapyDeprecationWarning,
stacklevel=2,
)
self.dicts = dicts
def __getitem__(self, key):