Ver Fonte

HTTP tasks: HttpDispatchTask renamed to "dispatch" is now a shared task.

Ask Solem há 11 anos atrás
pai
commit
bdb03b0e62
1 ficheiros alterados com 18 adições e 16 exclusões
  1. 18 16
      celery/task/http.py

+ 18 - 16
celery/task/http.py

@@ -17,13 +17,12 @@ except ImportError:  # pragma: no cover
     from urllib import urlencode              # noqa
     from urlparse import urlparse, parse_qsl  # noqa
 
-from celery import __version__ as celery_version
+from celery import shared_task, __version__ as celery_version
 from celery.five import items, reraise
 from celery.utils.log import get_task_logger
-from .base import Task as BaseTask
 
 __all__ = ['InvalidResponseError', 'RemoteExecuteError', 'UnknownStatusError',
-           'HttpDispatch', 'HttpDispatchTask', 'URL']
+           'HttpDispatch', 'dispatch', 'URL']
 
 GET_METHODS = frozenset(['GET', 'HEAD'])
 logger = get_task_logger(__name__)
@@ -163,7 +162,9 @@ class HttpDispatch(object):
         return headers
 
 
-class HttpDispatchTask(BaseTask):
+@shared_task(name='celery.http_dispatch', bind=True,
+             url=None, method=None, accept_magic_kwargs=False)
+def dispatch(self, url=None, method='GET', **kwargs):
     """Task dispatching to an URL.
 
     :keyword url: The URL location of the HTTP callback task.
@@ -184,15 +185,9 @@ class HttpDispatchTask(BaseTask):
         argument, as this attribute is intended for subclasses.
 
     """
-
-    url = None
-    method = None
-    accept_magic_kwargs = False
-
-    def run(self, url=None, method='GET', **kwargs):
-        url = url or self.url
-        method = method or self.method
-        return HttpDispatch(url, method, kwargs).dispatch()
+    return HttpDispatch(
+        url or self.url, method or self.method, kwargs,
+    ).dispatch()
 
 
 class URL(MutableURL):
@@ -202,14 +197,21 @@ class URL(MutableURL):
 
     :param url: URL to request.
     :keyword dispatcher: Class used to dispatch the request.
-        By default this is :class:`HttpDispatchTask`.
+        By default this is :func:`dispatch`.
 
     """
-    dispatcher = HttpDispatchTask
+    dispatcher = None
 
-    def __init__(self, url, dispatcher=None):
+    def __init__(self, url, dispatcher=None, app=None):
         super(URL, self).__init__(url)
+        self.app = app
         self.dispatcher = dispatcher or self.dispatcher
+        if self.dispatcher is None:
+            # Get default dispatcher
+            self.dispatcher = (
+                self.app.tasks['celery.http_dispatch'] if self.app
+                else dispatch
+            )
 
     def get_async(self, **kwargs):
         return self.dispatcher.delay(str(self), 'GET', **kwargs)