From: Josh Roesslein Date: Mon, 13 Jul 2009 23:05:15 +0000 (-0500) Subject: Added support for callbacks. X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=58ee4790515e99f1486f63ff30dcbf6fe0ce11c2;p=tweepy.git Added support for callbacks. --- 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