mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #8285: signal handlers that aren't functions work under DEBUG. This slightly loosens the sanity check, but things that are valid under production shouldn't fail under debug.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8546 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -63,10 +63,26 @@ class Signal(object): | ||||
|         """ | ||||
|         from django.conf import settings | ||||
|          | ||||
|         # If DEBUG is on, check that we got a good receiver | ||||
|         if settings.DEBUG: | ||||
|             import inspect | ||||
|             assert inspect.getargspec(receiver)[2] is not None, \ | ||||
|                 "Signal receivers must accept keyword arguments (**kwargs)." | ||||
|             assert callable(receiver), "Signal receivers must be callable." | ||||
|              | ||||
|             # Check for **kwargs | ||||
|             # Not all callables are inspectable with getargspec, so we'll | ||||
|             # try a couple different ways but in the end fall back on assuming | ||||
|             # it is -- we don't want to prevent registration of valid but weird | ||||
|             # callables. | ||||
|             try: | ||||
|                 argspec = inspect.getargspec(receiver) | ||||
|             except TypeError: | ||||
|                 try: | ||||
|                     argspec = inspect.getargspec(receiver.__call__) | ||||
|                 except (TypeError, AttributeError): | ||||
|                     argspec = None | ||||
|             if argspec: | ||||
|                 assert argspec[2] is not None, \ | ||||
|                     "Signal receivers must accept keyword arguments (**kwargs)." | ||||
|          | ||||
|         if dispatch_uid: | ||||
|             lookup_key = (dispatch_uid, _make_id(sender)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user