diff --git a/scrapy/tests/test_utils_misc.py b/scrapy/tests/test_utils_misc.py index abad3f3a9..806225c7c 100644 --- a/scrapy/tests/test_utils_misc.py +++ b/scrapy/tests/test_utils_misc.py @@ -23,6 +23,7 @@ class UtilsMiscTestCase(unittest.TestCase): self.assertEqual(list(arg_to_iter(100)), [100]) 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}]) if __name__ == "__main__": unittest.main() diff --git a/scrapy/utils/misc.py b/scrapy/utils/misc.py index 098bfdfa6..ac24591c2 100644 --- a/scrapy/utils/misc.py +++ b/scrapy/utils/misc.py @@ -9,10 +9,12 @@ from scrapy.utils.markup import remove_entities def arg_to_iter(arg): """Convert an argument to an iterable. The argument can be a None, single value, or an iterable. + + Exception: if arg is a dict, [arg] will be returned """ if arg is None: return [] - elif hasattr(arg, '__iter__'): + elif not isinstance(arg, dict) and hasattr(arg, '__iter__'): return arg else: return [arg]