瀏覽代碼

New syntax to apply http callback tasks: URL(url).get_async(**kwargs) / URL(url).post_async(**kwargs)

Ask Solem 15 年之前
父節點
當前提交
4b429628f3
共有 1 個文件被更改,包括 12 次插入3 次删除
  1. 12 3
      celery/task/http.py

+ 12 - 3
celery/task/http.py

@@ -7,6 +7,7 @@ from urllib import urlencode
 from urlparse import urlparse
 
 from anyjson import serialize, deserialize
+from billiard.utils.functional import wraps
 
 from celery import __version__ as celery_version
 from celery.task.base import Task as BaseTask
@@ -79,6 +80,12 @@ class URL(object):
     def _set_query(self, query):
         self._query = query
 
+    def get_async(self, **kwargs):
+        return HttpDispatchTask.delay(str(self), "GET", **kwargs)
+
+    def post_async(self, **kwargs):
+        return HttpDispatchTask.delay(str(self), "POST", **kwargs)
+
     query = property(_get_query, _set_query)
 
 
@@ -86,14 +93,16 @@ class HttpDispatch(object):
     user_agent = "celery/%s" % celery_version
     timeout = 5
 
-    def __init__(self, url, task_kwargs, logger):
+    def __init__(self, url, method, task_kwargs, logger):
         self.url = url
+        self.method = method
         self.task_kwargs = task_kwargs
         self.logger = logger
 
     def _create_request(self):
         url = URL(self.url)
         url.query.update(self.task_kwargs)
+        print("URL: %s" % str(url))
         req = urllib2.Request(str(url))
         req.headers.update(self.http_headers)
         return req
@@ -132,9 +141,9 @@ class HttpDispatch(object):
 
 class HttpDispatchTask(BaseTask):
 
-    def run(self, url, **kwargs):
+    def run(self, url, method="GET", **kwargs):
         logger = self.get_logger(**kwargs)
-        return HttpDispatch(url, kwargs, logger).execute()
+        return HttpDispatch(url, method, kwargs, logger).execute()
 
 
 def http_task_response(fun, *args, **kwargs):