1
2
3
4
5
6
7
8 version_info = (2, 3, 0)
9 __version__ = ".".join(map(str, version_info))
10
11 try:
12 from restkit.errors import ResourceNotFound, Unauthorized, RequestFailed,\
13 RedirectLimit, RequestError, InvalidUrl, ResponseError, ProxyError, ResourceError
14 from restkit.client import HttpRequest, HttpResponse, MAX_FOLLOW_REDIRECTS
15 from restkit.resource import Resource
16 from restkit.conn import get_default_manager, set_default_manager_class
17 from restkit.conn import TConnectionManager
18 from restkit.filters import BasicAuth, SimpleProxy, OAuthFilter
19 except ImportError:
20 import traceback
21 traceback.print_exc()
22
23 import urlparse
24 import logging
25
26 LOG_LEVELS = {
27 "critical": logging.CRITICAL,
28 "error": logging.ERROR,
29 "warning": logging.WARNING,
30 "info": logging.INFO,
31 "debug": logging.DEBUG
32 }
33
35 """
36 Set level of logging, and choose where to display/save logs
37 (file or standard output).
38 """
39 if not handler:
40 handler = logging.StreamHandler()
41
42 loglevel = LOG_LEVELS.get(level, logging.INFO)
43 logger = logging.getLogger('restkit')
44 logger.setLevel(loglevel)
45 format = r"%(asctime)s [%(process)d] [%(levelname)s] %(message)s"
46 datefmt = r"%Y-%m-%d %H:%M:%S"
47
48 handler.setFormatter(logging.Formatter(format, datefmt))
49 logger.addHandler(handler)
50
51 from restkit.util.sock import _GLOBAL_DEFAULT_TIMEOUT
52
53 -def request(url, method='GET', body=None, headers=None,
54 timeout=_GLOBAL_DEFAULT_TIMEOUT, filters=None, follow_redirect=False,
55 force_follow_redirect=False, max_follow_redirect=MAX_FOLLOW_REDIRECTS,
56 decompress=True, pool_instance=None, response_class=None, **ssl_args):
57 """ Quick shortcut method to pass a request
58
59 :param url: str, url string
60 :param method: str, by default GET. http verbs
61 :param body: the body, could be a string, an iterator or a file-like object
62 :param headers: dict or list of tupple, http headers
63 :pool intance: instance inherited from `restkit.pool.PoolInterface`.
64 It allows you to share and reuse connections connections.
65 :param follow_redirect: boolean, by default is false. If true,
66 if the HTTP status is 301, 302 or 303 the client will follow
67 the location.
68 :param filters: list, list of http filters. see the doc of http filters
69 for more info
70 :param ssl_args: ssl arguments. See http://docs.python.org/library/ssl.html
71 for more information.
72
73 """
74
75 u = urlparse.urlparse(url)
76 if u.username is not None:
77 password = u.password or ""
78 filters = filters or []
79 url = urlparse.urlunparse((u.scheme, u.netloc.split("@")[-1],
80 u.path, u.params, u.query, u.fragment))
81 filters.append(BasicAuth(u.username, password))
82
83 http_client = HttpRequest(
84 timeout=timeout,
85 filters=filters,
86 follow_redirect=follow_redirect,
87 force_follow_redirect=force_follow_redirect,
88 max_follow_redirect=max_follow_redirect,
89 decompress=decompress,
90 pool_instance=pool_instance,
91 response_class=response_class,
92 **ssl_args)
93 return http_client.request(url, method=method, body=body,
94 headers=headers)
95