From: Tom Hogans Date: Mon, 15 Aug 2011 20:01:26 +0000 (-0400) Subject: Added request.session functionality X-Git-Tag: v0.6.0~50^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ca428504d485b0495b5e794cdd1b47bbb0bd890f;p=services%2Fpython-requests.git Added request.session functionality --- diff --git a/AUTHORS b/AUTHORS index 38528a6..acaa758 100644 --- a/AUTHORS +++ b/AUTHORS @@ -31,4 +31,5 @@ Patches and Suggestions - Tamás Gulácsi - Rubén Abad - Peter Manser -- Jeremy Selie \ No newline at end of file +- Jeremy Selie +- Tom Hogans diff --git a/requests/session.py b/requests/session.py new file mode 100644 index 0000000..7250542 --- /dev/null +++ b/requests/session.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +""" +requests.session +~~~~~~~~~~~~~~~ + +This module provides a Session object to manage and persist settings across +requests (cookies, auth, proxies). + +""" + +import requests.api +import cookielib + +class Session(object): + __attrs__ = ['headers', 'cookies', 'auth', 'timeout', 'proxies'] + + def __init__(self, **kwargs): + # Set up a CookieJar to be used by default + self.cookies = cookielib.FileCookieJar() + # Map args from kwargs to instance-local variables + map(lambda k, v: (k in self.__attrs__) and setattr(self, k, v), + kwargs.iterkeys(), kwargs.itervalues()) + # Map and wrap requests.api methods + self._map_api_methods() + + def _map_api_methods(self): + """ Reads each available method from requests.api and decorates + them with a wrapper that inserts any instance-local attributes + (from __attrs__) that have been set, combining them with **kwargs """ + def pass_args(func): + def wrapper_func(*args, **kwargs): + inst_attrs = dict((k, v) for k, v in self.__dict__.iteritems() + if k in self.__attrs__) + # Combine instance-local values with kwargs values, with + # priority to values in kwargs + kwargs = dict(inst_attrs.items() + kwargs.items()) + return func(*args, **kwargs) + return wrapper_func + # Map and decorate each function available in requests.api + map(lambda fn: setattr(self, fn, pass_args(getattr(requests.api, fn))), + requests.api.__all__) + +