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'
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