From 09c3f536939e3a23b388a009a0fee6d41999e7b6 Mon Sep 17 00:00:00 2001 From: Beng Hee Eu Date: Mon, 30 Dec 2013 03:46:10 +0800 Subject: [PATCH] Fixes #368: Support functools.partial in scrapy.utils.python.get_func_args() --- scrapy/tests/test_utils_python.py | 3 +++ scrapy/utils/python.py | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scrapy/tests/test_utils_python.py b/scrapy/tests/test_utils_python.py index 24e962754..ca73bc5ac 100644 --- a/scrapy/tests/test_utils_python.py +++ b/scrapy/tests/test_utils_python.py @@ -1,3 +1,4 @@ +import functools import operator import unittest from itertools import count @@ -174,12 +175,14 @@ class UtilsPythonTestCase(unittest.TestCase): pass a = A(1, 2, 3) + partial_f1 = functools.partial(f1, None) cal = Callable() self.assertEqual(get_func_args(f1), ['a', 'b', 'c']) self.assertEqual(get_func_args(f2), ['a', 'b', 'c']) self.assertEqual(get_func_args(A), ['a', 'b', 'c']) self.assertEqual(get_func_args(a.method), ['a', 'b', 'c']) + self.assertEqual(get_func_args(partial_f1), ['a', 'b', 'c']) self.assertEqual(get_func_args(cal), ['a', 'b', 'c']) self.assertEqual(get_func_args(object), []) diff --git a/scrapy/utils/python.py b/scrapy/utils/python.py index 834773072..454f5a59f 100644 --- a/scrapy/utils/python.py +++ b/scrapy/utils/python.py @@ -10,7 +10,7 @@ import re import inspect import weakref import errno -from functools import wraps +from functools import partial, wraps from sgmllib import SGMLParser @@ -156,6 +156,8 @@ def get_func_args(func, stripself=False): return get_func_args(func.__func__, True) elif inspect.ismethoddescriptor(func): return [] + elif isinstance(func, partial): + return get_func_args(func.func) elif hasattr(func, '__call__'): if inspect.isroutine(func): return []