Move MutableChain to scrapy.utils.python

This commit is contained in:
Eugenio Lacuesta 2018-10-11 11:23:12 -03:00
parent 2396356a82
commit 58f5565357
2 changed files with 22 additions and 20 deletions

View File

@ -11,32 +11,13 @@ from scrapy.exceptions import _InvalidOutput
from scrapy.middleware import MiddlewareManager
from scrapy.utils.defer import mustbe_deferred
from scrapy.utils.conf import build_component_list
from scrapy.utils.python import MutableChain
def _isiterable(possible_iterator):
return hasattr(possible_iterator, '__iter__')
class MutableChain:
"""
Thin wrapper around itertools.chain, allowing to add iterables "in-place"
"""
def __init__(self, *args):
self.data = chain(*args)
def extend(self, *iterables):
self.data = chain(self.data, *iterables)
def __iter__(self):
return self.data.__iter__()
def __next__(self): # py3
return self.data.__next__()
def next(self): # py2
return self.data.next()
class SpiderMiddlewareManager(MiddlewareManager):
component_name = 'spider middleware'

View File

@ -9,6 +9,7 @@ import weakref
import errno
import six
from functools import partial, wraps
from itertools import chain
import sys
from scrapy.utils.decorators import deprecated
@ -387,3 +388,23 @@ if hasattr(sys, "pypy_version_info"):
else:
def garbage_collect():
gc.collect()
class MutableChain(object):
"""
Thin wrapper around itertools.chain, allowing to add iterables "in-place"
"""
def __init__(self, *args):
self.data = chain(*args)
def extend(self, *iterables):
self.data = chain(self.data, *iterables)
def __iter__(self):
return self.data.__iter__()
def __next__(self): # py3
return self.data.__next__()
def next(self): # py2
return self.data.next()