configuration rework
authorKenneth Reitz <me@kennethreitz.com>
Mon, 26 Sep 2011 00:57:29 +0000 (20:57 -0400)
committerKenneth Reitz <me@kennethreitz.com>
Mon, 26 Sep 2011 00:57:29 +0000 (20:57 -0400)
requests/_config.py [new file with mode: 0644]
requests/api.py
requests/config.py [deleted file]
requests/models.py
requests/sessions.py

diff --git a/requests/_config.py b/requests/_config.py
new file mode 100644 (file)
index 0000000..a9cfbec
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+
+"""
+requests.config
+~~~~~~~~~~~~~~~
+
+This module provides the Requests configuration defaults.
+
+settings parameters:
+
+- :base_headers: - Sets default User-Agent to `python-requests.org`
+- :accept_gzip:  - Whether or not to accept gzip-compressed data
+- :proxies: - http proxies?
+- :verbose: - display verbose information?
+- :timeout: - timeout time until request terminates
+- :max_redirects: - maximum number of allowed redirects?
+- :decode_unicode: - whether or not to accept unicode?
+
+"""
+
+def get_config(config=None, default_config=None):
+    """Merges two given configurations."""
+
+    # Allow raw calls.
+    if config is None:
+        config=dict()
+
+    # Use the module-level defaults, if none is given.
+    if default_config is None:
+        default_config = defaults.copy()
+
+
+    d = default_config.copy()
+    d.update(config)
+
+    return d
+
+
+# Module-level defaults.
+defaults = dict()
+
+defaults['base_headers'] = {'User-Agent': 'python-requests.org'}
+defaults['accept_gzip'] = True
+defaults['proxies'] = {}
+defaults['verbose'] = None
+defaults['timeout'] = None
+defaults['max_redirects'] = 30
+defaults['decode_unicode'] = True
+defaults['keepalive'] = True
+
+
index 1e4bd6880226291ba940b30ea22db010f97afb6d..e08e530a07c13d33478a556150b7927b9a45399a 100644 (file)
@@ -11,7 +11,7 @@ This module impliments the Requests API.
 
 """
 
-import config
+from ._config import get_config
 from .models import Request, Response
 from .status_codes import codes
 from .hooks import dispatch_hook
@@ -24,7 +24,7 @@ __all__ = ('request', 'get', 'head', 'post', 'patch', 'put', 'delete')
 def request(method, url,
     params=None, data=None, headers=None, cookies=None, files=None, auth=None,
     timeout=None, allow_redirects=False, proxies=None, hooks=None,
-    _connection=None):
+    config=None, _connection=None):
 
     """Constructs and sends a :class:`Request <Request>`.
     Returns :class:`Response <Response>` object.
@@ -44,6 +44,7 @@ def request(method, url,
     """
 
     method = str(method).upper()
+    config = get_config(config)
 
     if cookies is None:
         cookies = {}
@@ -64,9 +65,9 @@ def request(method, url,
         cookies=cookies,
         files=files,
         auth=auth,
-        timeout=timeout or config.settings.timeout,
+        timeout=timeout or config.get('timeout'),
         allow_redirects=allow_redirects,
-        proxies=proxies or config.settings.proxies,
+        proxies=proxies or config.get('proxies'),
     )
 
     # Arguments manipulation hook.
diff --git a/requests/config.py b/requests/config.py
deleted file mode 100644 (file)
index a9cfbec..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.config
-~~~~~~~~~~~~~~~
-
-This module provides the Requests configuration defaults.
-
-settings parameters:
-
-- :base_headers: - Sets default User-Agent to `python-requests.org`
-- :accept_gzip:  - Whether or not to accept gzip-compressed data
-- :proxies: - http proxies?
-- :verbose: - display verbose information?
-- :timeout: - timeout time until request terminates
-- :max_redirects: - maximum number of allowed redirects?
-- :decode_unicode: - whether or not to accept unicode?
-
-"""
-
-def get_config(config=None, default_config=None):
-    """Merges two given configurations."""
-
-    # Allow raw calls.
-    if config is None:
-        config=dict()
-
-    # Use the module-level defaults, if none is given.
-    if default_config is None:
-        default_config = defaults.copy()
-
-
-    d = default_config.copy()
-    d.update(config)
-
-    return d
-
-
-# Module-level defaults.
-defaults = dict()
-
-defaults['base_headers'] = {'User-Agent': 'python-requests.org'}
-defaults['accept_gzip'] = True
-defaults['proxies'] = {}
-defaults['verbose'] = None
-defaults['timeout'] = None
-defaults['max_redirects'] = 30
-defaults['decode_unicode'] = True
-defaults['keepalive'] = True
-
-
index 4f4ee9420718a6d5a06614b7e943e2cf940aed30..a5bfc8d5f65bc2d0246f8ec3111157a33213222f 100644 (file)
@@ -15,7 +15,7 @@ from urlparse import urlparse, urlunparse, urljoin
 from .packages import urllib3
 # print dir(urllib3)
 
-from .config import get_config
+from ._config import get_config
 from .structures import CaseInsensitiveDict
 from .utils import *
 from .status_codes import codes
@@ -91,15 +91,15 @@ class Request(object):
 
         # Header manipulation and defaults.
 
-        if settings.accept_gzip:
-            settings.base_headers.update({'Accept-Encoding': 'gzip'})
+        if self.config.get('accept_gzip'):
+            self.headers.update({'Accept-Encoding': 'gzip'})
 
         if headers:
             headers = CaseInsensitiveDict(self.headers)
         else:
             headers = CaseInsensitiveDict()
 
-        for (k, v) in settings.base_headers.items():
+        for (k, v) in self.config.get('base_headers').items():
             if k not in headers:
                 headers[k] = v
 
index a5c13fbd33a846579ff1a29eaf0d03579db27fbf..56ccb850f3bacc13ff5c6bbbdaa7b3178a46f198 100644 (file)
@@ -12,23 +12,31 @@ requests (cookies, auth, proxies).
 import cookielib
 
 from . import api
-from .config import get_config
+from ._config import get_config
 from .utils import add_dict_to_cookiejar
 
 
-def merge_kwargs(local_kwargs, default_kwargs):
+def merge_kwargs(local_kwarg, default_kwarg):
     """Merges kwarg dictionaries.
+
+    If a key in the dictionary is set to None, i
     """
 
     # Bypass if not a dictionary (e.g. timeout)
-    if not hasattr(local_kwargs, 'items'):
-        return local_kwargs
+    if not hasattr(local_kwarg, 'items'):
+        return local_kwarg
+
+    kwargs = default_kwarg.copy()
+    kwargs.update(local_kwarg)
+
+    # from clint.textui import colored
+
 
-    kwargs = default_kwargs.copy()
-    kwargs.update(local_kwargs)
+    # print colored.red(default_kwarg)
+    # print colored.red(local_kwarg)
 
     # Remove keys that are set to None.
-    for (k,v) in local_kwargs.items():
+    for (k,v) in local_kwarg.items():
         if v is None:
             del kwargs[k]
 
@@ -74,8 +82,19 @@ class Session(object):
         self._map_api_methods()
 
 
-    def get(url, **kwargs):
+    def get(self, url, **kwargs):
+
+        _kwargs = {}
+        for attr in self.__attrs__:
+            default_attr = getattr(self, attr)
+            local_attr = kwargs.get(attr)
+
+            new_attr = merge_kwargs(local_attr, default_attr)
+
+            if new_attr is not None:
+                _kwargs[attr] = new_attr
 
+        return api.get(url, **_kwargs)
 
     def __repr__(self):
         return '<requests-client at 0x%x>' % (id(self))