From 58ee4790515e99f1486f63ff30dcbf6fe0ce11c2 Mon Sep 17 00:00:00 2001 From: Josh Roesslein Date: Mon, 13 Jul 2009 18:05:15 -0500 Subject: [PATCH] Added support for callbacks. --- binder.py | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/binder.py b/binder.py index 80bd8d3..f41ef11 100644 --- a/binder.py +++ b/binder.py @@ -1,34 +1,19 @@ import httplib import urllib +from threading import Thread from parsers import parse_error from error import TweepError def bind_api(path, parser, allowed_param=None, method='GET', require_auth=False): - def _call(api, *args, **kargs): - # If require auth, throw exception if credentials not provided - if require_auth and not api._b64up: - raise TweepError('Authentication required!') - - # Filter out unallowed parameters - if allowed_param: - parameters = dict((k,v) for k,v in kargs.items() if k in allowed_param) - else: - parameters = None - + def do_request(url, parameters, api): # Open connection if api.secure: conn = httplib.HTTPSConnection(api.host) else: conn = httplib.HTTPConnection(api.host) - # Build url with parameters - if parameters: - url = '%s?%s' % (path, urllib.urlencode(parameters)) - else: - url = path - # Assemble headers headers = { 'User-Agent': 'tweepy' @@ -53,4 +38,34 @@ def bind_api(path, parser, allowed_param=None, method='GET', require_auth=False) conn.close() return out - return _call + def async_request(url, parameters, api, callback): + out = do_request(url, parameters,api) + callback(out) + + def call(api, *args, **kargs): + # If require auth, throw exception if credentials not provided + if require_auth and not api._b64up: + raise TweepError('Authentication required!') + + # Filter out unallowed parameters + if allowed_param: + parameters = dict((k,v) for k,v in kargs.items() if k in allowed_param) + else: + parameters = None + + # Build url with parameters + if parameters: + url = '%s?%s' % (path, urllib.urlencode(parameters)) + else: + url = path + + # check for callback + callback = kargs.get('callback') + if callback: + # execute request async + Thread(target=async_request, args=(url, parameters, api, callback,)).start() + else: + # execute request sync + return do_request(url, parameters, api) + + return call -- 2.25.1