Browse Source

Task: Decorator now takes __qualname__ from underlying function. Closes #3216

Ask Solem 8 years ago
parent
commit
ac0d9d5ab7
2 changed files with 13 additions and 0 deletions
  1. 6 0
      celery/app/base.py
  2. 7 0
      celery/local.py

+ 6 - 0
celery/app/base.py

@@ -406,6 +406,12 @@ class Celery(object):
                 '__module__': fun.__module__,
                 '__header__': staticmethod(head_from_fun(fun, bound=bind)),
                 '__wrapped__': run}, **options))()
+            # for some reason __qualname__ cannot be set in type()
+            # so we have to set it here.
+            try:
+                task.__qualname__ = fun.__qualname__
+            except AttributeError:
+                pass
             self._tasks[task.name] = task
             task.bind(self)  # connects task to this app
 

+ 7 - 0
celery/local.py

@@ -76,6 +76,13 @@ class Proxy(object):
         except AttributeError:
             return self._get_current_object().__name__
 
+    @_default_cls_attr('qualname', str, __name__)
+    def __qualname__(self):
+        try:
+            return self.__custom_name__
+        except AttributeError:
+            return self._get_current_object().__qualname__
+
     @_default_cls_attr('module', str, __module__)
     def __module__(self):
         return self._get_current_object().__module__