|
@@ -6,60 +6,60 @@ from types import ModuleType
|
|
|
|
|
|
from .local import Proxy
|
|
|
|
|
|
-compat_modules = {
|
|
|
- "messaging": {
|
|
|
- "TaskPublisher": "amqp.TaskPublisher",
|
|
|
- "ConsumerSet": "amqp.ConsumerSet",
|
|
|
- "TaskConsumer": "amqp.TaskConsumer",
|
|
|
- "establish_connection": "broker_connection",
|
|
|
- "with_connection": "with_default_connection",
|
|
|
- "get_consumer_set": "amqp.get_task_consumer"
|
|
|
- },
|
|
|
- "log": {
|
|
|
- "get_default_logger": "log.get_default_logger",
|
|
|
- "setup_logger": "log.setup_logger",
|
|
|
- "setup_task_logger": "log.setup_task_logger",
|
|
|
- "get_task_logger": "log.get_task_logger",
|
|
|
- "setup_loggig_subsystem": "log.setup_logging_subsystem",
|
|
|
- "redirect_stdouts_to_logger": "log.redirect_stdouts_to_logger",
|
|
|
- },
|
|
|
-}
|
|
|
|
|
|
-def rgetattr(obj, path):
|
|
|
- for part in path:
|
|
|
- obj = getattr(obj, part)
|
|
|
- return obj
|
|
|
+def _compat_task_decorator(*args, **kwargs):
|
|
|
+ from celery import current_app
|
|
|
+ kwargs.setdefault("accept_magic_kwargs", True)
|
|
|
+ return current_app.task(*args, **kwargs)
|
|
|
|
|
|
-def _module(g, name, attrs):
|
|
|
- attrs = dict((name, Proxy(rgetattr, (g.current_app, attr.split('.'))))
|
|
|
- for name, attr in attrs.iteritems())
|
|
|
- return type(name, (ModuleType, ), attrs)('.'.join(["celery", name]))
|
|
|
|
|
|
|
|
|
-def install_compat_modules(g):
|
|
|
- from types import ModuleType
|
|
|
- mods = sys.modules
|
|
|
+def _compat_periodic_task_decorator(*args, **kwargs):
|
|
|
+ from celery.task import periodic_task
|
|
|
+ kwargs.setdefault("accept_magic_kwargs", True)
|
|
|
+ return periodic_task(*args, **kwargs)
|
|
|
|
|
|
- current_app = g.current_app
|
|
|
|
|
|
- for name, attrs in compat_modules.iteritems():
|
|
|
- print("CREATE MODULE: %r %r" % (name, attrs))
|
|
|
- module = _module(g, name, attrs)
|
|
|
- setattr(g, name, module)
|
|
|
- sys.modules[module.__name__] = module
|
|
|
+modules = {
|
|
|
+ "celery": {
|
|
|
+ "decorators": {
|
|
|
+ "task": _compat_task_decorator,
|
|
|
+ "periodic_task": _compat_periodic_task_decorator,
|
|
|
+ },
|
|
|
+ "log": {
|
|
|
+ "get_default_logger": "log.get_default_logger",
|
|
|
+ "setup_logger": "log.setup_logger",
|
|
|
+ "setup_task_logger": "log.setup_task_logger",
|
|
|
+ "get_task_logger": "log.get_task_logger",
|
|
|
+ "setup_loggig_subsystem": "log.setup_logging_subsystem",
|
|
|
+ "redirect_stdouts_to_logger": "log.redirect_stdouts_to_logger",
|
|
|
+ },
|
|
|
+ "messaging": {
|
|
|
+ "TaskPublisher": "amqp.TaskPublisher",
|
|
|
+ "ConsumerSet": "amqp.ConsumerSet",
|
|
|
+ "TaskConsumer": "amqp.TaskConsumer",
|
|
|
+ "establish_connection": "broker_connection",
|
|
|
+ "with_connection": "with_default_connection",
|
|
|
+ "get_consumer_set": "amqp.get_task_consumer"
|
|
|
+ },
|
|
|
+ "registry": {
|
|
|
+ "tasks": "tasks",
|
|
|
+ },
|
|
|
+ },
|
|
|
+}
|
|
|
|
|
|
- class registry(ModuleType):
|
|
|
- tasks = Proxy(lambda: current_app.tasks)
|
|
|
- g.registry = mods["celery.registry"] = registry("celery.registry")
|
|
|
|
|
|
- class decorators(ModuleType):
|
|
|
- def task(*args, **kwargs):
|
|
|
- kwargs.setdefault("accept_magic_kwargs", True)
|
|
|
- return current_app.task(*args, **kwargs)
|
|
|
+def rgetattr(obj, path):
|
|
|
+ return reduce(lambda a, b: getattr(a, b), [obj] + path)
|
|
|
+
|
|
|
|
|
|
- def periodic_task(*args, **kwargs):
|
|
|
- from celery.task import periodic_task
|
|
|
- kwargs.setdefault("accept_magic_kwargs", True)
|
|
|
- return periodic_task(*args, **kwargs)
|
|
|
- g.decorators = mods["celery.decorators"] \
|
|
|
- = decorators("celery.decorators")
|
|
|
+def get_compat(app, pkg, name, bases=(ModuleType, )):
|
|
|
+ fqdn = '.'.join([pkg.__name__, name])
|
|
|
+ def build_attr(attr):
|
|
|
+ if isinstance(attr, basestring):
|
|
|
+ return Proxy(rgetattr, (app, attr.split('.')))
|
|
|
+ return attr
|
|
|
+ attrs = dict((name, build_attr(attr))
|
|
|
+ for name, attr in modules[pkg.__name__][name].iteritems())
|
|
|
+ sys.modules[fqdn] = module = type(name, bases, attrs)(fqdn)
|
|
|
+ return module
|