mirror of
https://github.com/kennethreitz/requests.git
synced 2026-06-05 22:50:18 +00:00
Added request.session functionality
This commit is contained in:
@@ -31,4 +31,5 @@ Patches and Suggestions
|
||||
- Tamás Gulácsi
|
||||
- Rubén Abad
|
||||
- Peter Manser
|
||||
- Jeremy Selie
|
||||
- Jeremy Selie
|
||||
- Tom Hogans <tomhsx@gmail.com>
|
||||
|
||||
@@ -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__)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user