Kaynağa Gözat

Hack for PyDev/PyCharm/pylint etc to work with our dynamically generated modules

Ask Solem 12 yıl önce
ebeveyn
işleme
463a38f45f
2 değiştirilmiş dosya ile 25 ekleme ve 27 silme
  1. 14 15
      celery/__init__.py
  2. 11 12
      celery/task/__init__.py

+ 14 - 15
celery/__init__.py

@@ -24,21 +24,20 @@ VERSION_BANNER = '%s (%s)' % (__version__, SERIES)
 
 
 # -eof meta-
 # -eof meta-
 
 
-# This is for static analyzers
-Celery = object
-bugreport = lambda *a, **kw: None
-shared_task = lambda *a, **kw: None
-Task = object
-current_app = object()
-current_task = object()
-chain = lambda *a, **kw: None
-chord = lambda *a, **kw: None
-chunks = lambda *a, **kw: None
-group = lambda *a, **kw: None
-subtask = lambda *a, **kw: None
-xmap = lambda *a, **kw: None
-xstarmap = lambda *a, **kw: None
-uuid = lambda: None
+STATICA_HACK = True
+globals()['kcah_acitats'[::-1].upper()] = False
+if STATICA_HACK:
+    # This is never executed, but tricks static analyzers (PyDev, PyCharm,
+    # pylint, etc.) into knowing the types of these symbols, and what
+    # they contain.
+    from celery.app.base import Celery
+    from celery.app.utils import bugreport
+    from celery.app.task import Task
+    from celery._state import current_app, current_task
+    from celery.canvas import (
+        chain, chord, chunks, group, subtask, xmap, xstarmap,
+    )
+    from celery.utils import uuid
 
 
 # Lazy loading
 # Lazy loading
 from .__compat__ import recreate_module
 from .__compat__ import recreate_module

+ 11 - 12
celery/task/__init__.py

@@ -16,21 +16,20 @@ from celery.__compat__ import MagicModule, recreate_module
 from celery.local import Proxy
 from celery.local import Proxy
 
 
 __all__ = [
 __all__ = [
-    'BaseTask', 'Task', 'PeriodicTask',
-    'task', 'periodic_task',
+    'BaseTask', 'Task', 'PeriodicTask', 'task', 'periodic_task',
     'group', 'chord', 'subtask', 'TaskSet',
     'group', 'chord', 'subtask', 'TaskSet',
 ]
 ]
 
 
-# This is for static analyzers
-BaseTask = object
-Task = object
-PeriodicTask = object
-task = lambda *a, **kw: None
-periodic_task = lambda *a, **kw: None
-group = lambda *a, **kw: None
-chord = lambda *a, **kw: None
-subtask = lambda *a, **kw: None
-TaskSet = object
+
+STATICA_HACK = True
+globals()['kcah_acitats'[::-1].upper()] = False
+if STATICA_HACK:
+    # This is never executed, but tricks static analyzers (PyDev, PyCharm,
+    # pylint, etc.) into knowing the types of these symbols, and what
+    # they contain.
+    from celery.canvas import chain, group, chord, subtask
+    from .base import BaseTask, Task, PeriodicTask, task, periodic_task
+    from .sets import TaskSet
 
 
 
 
 class module(MagicModule):
 class module(MagicModule):