mirror of https://github.com/scrapy/scrapy.git
arg_to_iter: treat items the same way as dicts (ie. non iterables). fixes #248
This commit is contained in:
parent
7400ceb1ed
commit
2bbd92742b
|
|
@ -3,6 +3,7 @@ import os
|
|||
import unittest
|
||||
from cStringIO import StringIO
|
||||
|
||||
from scrapy.item import Item, Field
|
||||
from scrapy.utils.misc import load_object, arg_to_iter, walk_modules
|
||||
|
||||
__doctests__ = ['scrapy.utils.misc']
|
||||
|
|
@ -56,6 +57,10 @@ class UtilsMiscTestCase(unittest.TestCase):
|
|||
sys.path.remove(egg)
|
||||
|
||||
def test_arg_to_iter(self):
|
||||
|
||||
class TestItem(Item):
|
||||
name = Field()
|
||||
|
||||
assert hasattr(arg_to_iter(None), '__iter__')
|
||||
assert hasattr(arg_to_iter(100), '__iter__')
|
||||
assert hasattr(arg_to_iter('lala'), '__iter__')
|
||||
|
|
@ -68,6 +73,7 @@ class UtilsMiscTestCase(unittest.TestCase):
|
|||
self.assertEqual(list(arg_to_iter(l for l in 'abc')), ['a', 'b', 'c'])
|
||||
self.assertEqual(list(arg_to_iter([1,2,3])), [1,2,3])
|
||||
self.assertEqual(list(arg_to_iter({'a':1})), [{'a': 1}])
|
||||
self.assertEqual(list(arg_to_iter(TestItem(name="john"))), [TestItem(name="john")])
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ from pkgutil import iter_modules
|
|||
|
||||
from w3lib.html import remove_entities
|
||||
from scrapy.utils.python import flatten
|
||||
from scrapy.item import BaseItem
|
||||
|
||||
def arg_to_iter(arg):
|
||||
"""Convert an argument to an iterable. The argument can be a None, single
|
||||
|
|
@ -15,7 +16,7 @@ def arg_to_iter(arg):
|
|||
"""
|
||||
if arg is None:
|
||||
return []
|
||||
elif not isinstance(arg, dict) and hasattr(arg, '__iter__'):
|
||||
elif not isinstance(arg, dict) and not isinstance(arg, BaseItem) and hasattr(arg, '__iter__'):
|
||||
return arg
|
||||
else:
|
||||
return [arg]
|
||||
|
|
|
|||
Loading…
Reference in New Issue