From 44d402c1e61c6a3570fa75ebcb4c21de65ea7f5d Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 10:50:18 -0500 Subject: [PATCH 01/18] who stole dem cookies --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index 09d551ad..b18557df 100644 --- a/README.rst +++ b/README.rst @@ -128,6 +128,7 @@ If you'd like to contribute, simply fork `the repository`_, commit your changes Roadmap ------- +- Cookie Support - Sphinx Documentation - Exhaustive Unittests From a82f4de38ddd31fa8a5773e60fc2f4324ca79d45 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 10:50:24 -0500 Subject: [PATCH 02/18] Added AUTHORS file. --- AUTHORS | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 AUTHORS diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 00000000..3fc077d3 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,13 @@ +Requests is written and maintained by Kenneth Reitz and +various contributors: + +Development Lead +```````````````` + +- Kenneth Reitz + + +Patches and Suggestions +``````````````````````` + +- Various Pocoo Members \ No newline at end of file From 10280c697dcfd3d334f1c9c381a11c324bb550bc Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 11:31:06 -0500 Subject: [PATCH 03/18] Handles request in event of HTTPError. Fixes Issue #2 Building of internal request object refactor --- requests/core.py | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/requests/core.py b/requests/core.py index c99de577..d10b818a 100644 --- a/requests/core.py +++ b/requests/core.py @@ -99,9 +99,17 @@ class Request(object): else: return urllib2.urlopen - + + def _build_response(self, resp): + """Build internal Response object from given response.""" + + self.response.status_code = resp.code + self.response.headers = resp.info().dict + self.response.content = resp.read() + self.response.url = resp.url + def send(self, anyway=False): - """Sends the request. Returns True of successfull, false if not. + """Sends the request. Returns True of successful, false if not. If there was an HTTPError during transmission, self.response.status_code will contain the HTTPError code. @@ -135,15 +143,12 @@ class Request(object): try: resp = opener(req) - self.response.status_code = resp.code - self.response.headers = resp.info().dict - if self.method == 'GET': - self.response.content = resp.read() - self.response.url = resp.url - + self._build_response(resp) success = True + except urllib2.HTTPError as why: - self.response.status_code = why.code + self._build_response(why) + success = False elif self.method == 'PUT': @@ -170,15 +175,12 @@ class Request(object): opener = self._get_opener() resp = opener(req) - self.response.status_code = resp.code - self.response.headers = resp.info().dict - self.response.content = resp.read() - self.response.url = resp.url - + self._build_response(resp) success = True except urllib2.HTTPError as why: - self.response.status_code = why.code + self._build_response(why) + success = False elif self.method == 'POST': @@ -207,15 +209,12 @@ class Request(object): opener = self._get_opener() resp = opener(req) - self.response.status_code = resp.code - self.response.headers = resp.info().dict - self.response.content = resp.read() - self.response.url = resp.url - + self._build_response(resp) success = True except urllib2.HTTPError as why: - self.response.status_code = why.code + sself._build_response(why) + success = False self.sent = True if success else False From 09740c35e1e148b41a7f1384a38e33011471d9dc Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 11:31:44 -0500 Subject: [PATCH 04/18] typo --- requests/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requests/core.py b/requests/core.py index d10b818a..e46718dd 100644 --- a/requests/core.py +++ b/requests/core.py @@ -213,7 +213,7 @@ class Request(object): success = True except urllib2.HTTPError as why: - sself._build_response(why) + self._build_response(why) success = False From f70e89a163208076f12577cd98ce09650b9d1241 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 11:45:50 -0500 Subject: [PATCH 05/18] eventlet support. --- requests/core.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/requests/core.py b/requests/core.py index e46718dd..70e44d90 100644 --- a/requests/core.py +++ b/requests/core.py @@ -11,7 +11,10 @@ """ import urllib -import urllib2 +try: + from eventlet.green import urllib2 +except ImportError: + import urllib2 from .packages.poster.encode import multipart_encode from .packages.poster.streaminghttp import register_openers From d87bcce6ad9d28bf6fe642543238af61d1ddf132 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 11:46:04 -0500 Subject: [PATCH 06/18] Added release 0.2.2 info. --- HISTORY.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/HISTORY.rst b/HISTORY.rst index 41118bbe..d3e62326 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,6 +1,12 @@ History ------- +0.2.2 (2011-02-14) +++++++++++++++++++ +* Still handles request in the event of an HTTPError. (Issue #2) +* Cookie Support? (Issue #1) + + 0.2.1 (2011-02-14) ++++++++++++++++++ From bfe91296cbf990ce579639777412f5395e951247 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 11:57:12 -0500 Subject: [PATCH 07/18] monkey patchin' (will this suffice?) --- requests/core.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/requests/core.py b/requests/core.py index 70e44d90..c807e9a9 100644 --- a/requests/core.py +++ b/requests/core.py @@ -11,10 +11,20 @@ """ import urllib +import urllib2 + try: - from eventlet.green import urllib2 + from gevent import monkey + monkey.patch_all() except ImportError: - import urllib2 + pass + +try: + import eventlet + eventlet.monkey_patch() +except ImportError: + pass + from .packages.poster.encode import multipart_encode from .packages.poster.streaminghttp import register_openers From cde3b88f3e93a9503810acc0ded890025fcbc119 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:07:34 -0500 Subject: [PATCH 08/18] eventlet > gevent (i think) --- requests/core.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/requests/core.py b/requests/core.py index c807e9a9..f434d59a 100644 --- a/requests/core.py +++ b/requests/core.py @@ -13,18 +13,19 @@ import urllib import urllib2 -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass - try: import eventlet eventlet.monkey_patch() except ImportError: pass +if not 'eventlet' in locals(): + try: + from gevent import monkey + monkey.patch_all() + except ImportError: + pass + from .packages.poster.encode import multipart_encode from .packages.poster.streaminghttp import register_openers From 2203c3bccd5e4888a16d73247d540fd6e359d29c Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:23:55 -0500 Subject: [PATCH 09/18] Added CookieJar --- requests/core.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/requests/core.py b/requests/core.py index f434d59a..bd1472a7 100644 --- a/requests/core.py +++ b/requests/core.py @@ -73,7 +73,9 @@ class Request(object): self.params = {} self.data = {} self.response = Response() + self.auth = None + self.cookiejar = None self.sent = False @@ -98,20 +100,31 @@ class Request(object): def _get_opener(self): """Creates appropriate opener object for urllib2.""" - + + _handlers = [] + if self.auth: # create a password manager authr = urllib2.HTTPPasswordMgrWithDefaultRealm() authr.add_password(None, self.url, self.auth.username, self.auth.password) - handler = urllib2.HTTPBasicAuthHandler(authr) - opener = urllib2.build_opener(handler) + auth_handler = urllib2.HTTPBasicAuthHandler(authr) + + _handlers.append(auth_handler) # use the opener to fetch a URL - return opener.open - else: - return urllib2.urlopen +# return opener.open + if self.cookiejar: + + cookie_handler = urllib2.HTTPCookieProcessor(cookiejar) + _handlers.append(cookie_handler) + + opener = urllib2.build_opener(*_handlers) + + return opener.open +# else: +# return urllib2.urlopen def _build_response(self, resp): From c9b8750597ded352b367e9d308387b007c92ea50 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:24:03 -0500 Subject: [PATCH 10/18] Upated history --- HISTORY.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/HISTORY.rst b/HISTORY.rst index d3e62326..6f15dc91 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -4,7 +4,9 @@ History 0.2.2 (2011-02-14) ++++++++++++++++++ * Still handles request in the event of an HTTPError. (Issue #2) -* Cookie Support? (Issue #1) +* Eventlet and Gevent Monkeypatch support. +* Cookie Support (Issue #1) + 0.2.1 (2011-02-14) From 4452934929b3addd7c8188d4ea8132b41157daef Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:25:44 -0500 Subject: [PATCH 11/18] cleanups --- requests/core.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/requests/core.py b/requests/core.py index bd1472a7..e5e55372 100644 --- a/requests/core.py +++ b/requests/core.py @@ -104,8 +104,7 @@ class Request(object): _handlers = [] if self.auth: - - # create a password manager + authr = urllib2.HTTPPasswordMgrWithDefaultRealm() authr.add_password(None, self.url, self.auth.username, self.auth.password) @@ -113,18 +112,14 @@ class Request(object): _handlers.append(auth_handler) - # use the opener to fetch a URL -# return opener.open if self.cookiejar: cookie_handler = urllib2.HTTPCookieProcessor(cookiejar) _handlers.append(cookie_handler) + opener = urllib2.build_opener(*_handlers) - return opener.open -# else: -# return urllib2.urlopen def _build_response(self, resp): From b09218d5aceff0062e59bb2d93150e0b48b1dcc2 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:33:12 -0500 Subject: [PATCH 12/18] temporary --- requests/core.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/requests/core.py b/requests/core.py index e5e55372..d04ef720 100644 --- a/requests/core.py +++ b/requests/core.py @@ -12,20 +12,20 @@ import urllib import urllib2 - -try: - import eventlet - eventlet.monkey_patch() -except ImportError: - pass - -if not 'eventlet' in locals(): - try: - from gevent import monkey - monkey.patch_all() - except ImportError: - pass - +# +#try: +# import eventlet +## eventlet.monkey_patch() +#except ImportError: +# pass +# +#if not 'eventlet' in locals(): +# try: +# from gevent import monkey +# monkey.patch_all() +# except ImportError: +# pass +# from .packages.poster.encode import multipart_encode from .packages.poster.streaminghttp import register_openers From 16e5119b2ad8be05673b5f8762cd71edaa0cd882 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:39:13 -0500 Subject: [PATCH 13/18] fixed gevent problem --- requests/core.py | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/requests/core.py b/requests/core.py index d04ef720..5f61416a 100644 --- a/requests/core.py +++ b/requests/core.py @@ -103,23 +103,27 @@ class Request(object): _handlers = [] - if self.auth: - - authr = urllib2.HTTPPasswordMgrWithDefaultRealm() + if self.auth or self.cookiejar: - authr.add_password(None, self.url, self.auth.username, self.auth.password) - auth_handler = urllib2.HTTPBasicAuthHandler(authr) + if self.auth: - _handlers.append(auth_handler) + authr = urllib2.HTTPPasswordMgrWithDefaultRealm() - if self.cookiejar: - - cookie_handler = urllib2.HTTPCookieProcessor(cookiejar) - _handlers.append(cookie_handler) + authr.add_password(None, self.url, self.auth.username, self.auth.password) + auth_handler = urllib2.HTTPBasicAuthHandler(authr) - - opener = urllib2.build_opener(*_handlers) - return opener.open + _handlers.append(auth_handler) + + if self.cookiejar: + + cookie_handler = urllib2.HTTPCookieProcessor(cookiejar) + _handlers.append(cookie_handler) + + opener = urllib2.build_opener(*_handlers) + return opener.open + + else: + return urllib2.urlopen def _build_response(self, resp): From 5fe24abfb99fd9850352329de9c4c091a8a71a05 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:40:41 -0500 Subject: [PATCH 14/18] Gevent / Eventlet is back! --- requests/core.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/requests/core.py b/requests/core.py index 5f61416a..b578b245 100644 --- a/requests/core.py +++ b/requests/core.py @@ -12,20 +12,21 @@ import urllib import urllib2 -# -#try: -# import eventlet -## eventlet.monkey_patch() -#except ImportError: -# pass -# -#if not 'eventlet' in locals(): -# try: -# from gevent import monkey -# monkey.patch_all() -# except ImportError: -# pass -# + + +try: + import eventlet + eventlet.monkey_patch() +except ImportError: + pass + +if not 'eventlet' in locals(): + try: + from gevent import monkey + monkey.patch_all() + except ImportError: + pass + from .packages.poster.encode import multipart_encode from .packages.poster.streaminghttp import register_openers From f023c81dad05fd8c5e9c1979b26c3c9ecfc4cf3b Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:43:13 -0500 Subject: [PATCH 15/18] cookies system in place. --- requests/core.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/requests/core.py b/requests/core.py index b578b245..c2f0a770 100644 --- a/requests/core.py +++ b/requests/core.py @@ -282,7 +282,7 @@ class AuthObject(object): -def get(url, params={}, headers={}, auth=None): +def get(url, params={}, headers={}, cookies=None, auth=None): """Sends a GET request. Returns :class:`Response` object. :param url: URL for the new :class:`Request` object. @@ -297,6 +297,7 @@ def get(url, params={}, headers={}, auth=None): r.url = url r.params = params r.headers = headers + r.cookiejar = cookies r.auth = _detect_auth(url, auth) r.send() @@ -304,7 +305,7 @@ def get(url, params={}, headers={}, auth=None): return r.response -def head(url, params={}, headers={}, auth=None): +def head(url, params={}, headers={}, cookies=None, auth=None): """Sends a HEAD request. Returns :class:`Response` object. :param url: URL for the new :class:`Request` object. @@ -320,6 +321,7 @@ def head(url, params={}, headers={}, auth=None): # return response object r.params = params r.headers = headers + r.cookiejar = cookies r.auth = _detect_auth(url, auth) r.send() @@ -327,7 +329,7 @@ def head(url, params={}, headers={}, auth=None): return r.response -def post(url, data={}, headers={}, files=None, auth=None): +def post(url, data={}, headers={}, files=None, cookies=None, auth=None): """Sends a POST request. Returns :class:`Response` object. :param url: URL for the new :class:`Request` object. @@ -347,6 +349,7 @@ def post(url, data={}, headers={}, files=None, auth=None): r.files = files r.headers = headers + r.cookiejar = cookies r.auth = _detect_auth(url, auth) r.send() @@ -354,7 +357,7 @@ def post(url, data={}, headers={}, files=None, auth=None): return r.response -def put(url, data='', headers={}, files={}, auth=None): +def put(url, data='', headers={}, files={}, cookies=None, auth=None): """Sends a PUT request. Returns :class:`Response` object. :param url: URL for the new :class:`Request` object. @@ -371,6 +374,7 @@ def put(url, data='', headers={}, files={}, auth=None): r.data = data r.files = files r.headers = headers + r.cookiejar = cookies r.auth = _detect_auth(url, auth) r.send() @@ -378,7 +382,7 @@ def put(url, data='', headers={}, files={}, auth=None): return r.response -def delete(url, params={}, headers={}, auth=None): +def delete(url, params={}, headers={}, cookies=None, auth=None): """Sends a DELETE request. Returns :class:`Response` object. :param url: URL for the new :class:`Request` object. @@ -393,6 +397,7 @@ def delete(url, params={}, headers={}, auth=None): r.method = 'DELETE' r.headers = headers + r.cookiejar = cookies r.auth = _detect_auth(url, auth) r.send() From 397bd4b67688fe8b35b5c17a6f1d6f43ab076c18 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:45:03 -0500 Subject: [PATCH 16/18] spelling error --- requests/core.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requests/core.py b/requests/core.py index c2f0a770..e9350327 100644 --- a/requests/core.py +++ b/requests/core.py @@ -93,7 +93,7 @@ class Request(object): def _checks(self): - """Deterministic checks for consistiency.""" + """Deterministic checks for consistency.""" if not self.url: raise URLRequired @@ -135,6 +135,7 @@ class Request(object): self.response.content = resp.read() self.response.url = resp.url + def send(self, anyway=False): """Sends the request. Returns True of successful, false if not. If there was an HTTPError during transmission, From 98c8a78c3e0f3827ef4ba304de9fa74666f0be0e Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:52:15 -0500 Subject: [PATCH 17/18] Added Cookies documentation. --- README.rst | 15 ++++++++------- requests/core.py | 7 ++++++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/README.rst b/README.rst index b18557df..9b987ef8 100644 --- a/README.rst +++ b/README.rst @@ -56,27 +56,28 @@ API **Requests:** All request functions return a Response object (see below). + +If a {filename: fileobject} dictionary is passed in (files=...), a multipart_encode upload will be performed. +If CookieJar object is is passed in (cookies=...), the cookies will be sent with the request. GET Requests - >>> request.get(url, params={}, headers={} auth=None) + >>> request.get(url, params={}, headers={}, cookies=None, auth=None) HEAD Requests - >>> request.head(url, params={}, headers={} auth=None) + >>> request.head(url, params={}, headers={}, cookies=None, auth=None) PUT Requests - >>> request.put(url, data='', headers={}, files={}, auth=None) + >>> request.put(url, data='', headers={}, files={}, cookies=None, auth=None) - # If files dictionary ( {filename: fileobject, ...} ) is given, a multi-part upload is performed. POST Requests - >>> request.post(url, data={}, headers={}, files={}, auth=None) + >>> request.post(url, data={}, headers={}, files={}, cookies=None, auth=None) - # If files dictionary ( {filename: fileobject, ...} ) is given, a multi-part upload is performed. DELETE Requests - >>> request.delete(url, params={}, headers={}, auth=None) + >>> request.delete(url, params={}, headers={}, cookies=None, auth=None) diff --git a/requests/core.py b/requests/core.py index e9350327..28d05053 100644 --- a/requests/core.py +++ b/requests/core.py @@ -288,7 +288,8 @@ def get(url, params={}, headers={}, cookies=None, auth=None): :param url: URL for the new :class:`Request` object. :param params: (optional) Dictionary of GET Parameters to send with the :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to sent with the :class:`Request`. + :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. + :param cookies: (optional) CookieJar object to send with the :class:`Request`. :param auth: (optional) AuthObject to enable Basic HTTP Auth. """ @@ -312,6 +313,7 @@ def head(url, params={}, headers={}, cookies=None, auth=None): :param url: URL for the new :class:`Request` object. :param params: (optional) Dictionary of GET Parameters to send with the :class:`Request`. :param headers: (optional) Dictionary of HTTP Headers to sent with the :class:`Request`. + :param cookies: (optional) CookieJar object to send with the :class:`Request`. :param auth: (optional) AuthObject to enable Basic HTTP Auth. """ @@ -337,6 +339,7 @@ def post(url, data={}, headers={}, files=None, cookies=None, auth=None): :param data: (optional) Dictionary of POST Data to send with the :class:`Request`. :param headers: (optional) Dictionary of HTTP Headers to sent with the :class:`Request`. :param files: (optional) Dictionary of 'filename': file-like-objects for multipart encoding upload. + :param cookies: (optional) CookieJar object to send with the :class:`Request`. :param auth: (optional) AuthObject to enable Basic HTTP Auth. """ @@ -365,6 +368,7 @@ def put(url, data='', headers={}, files={}, cookies=None, auth=None): :param data: (optional) Bytes of PUT Data to send with the :class:`Request`. :param headers: (optional) Dictionary of HTTP Headers to sent with the :class:`Request`. :param files: (optional) Dictionary of 'filename': file-like-objects for multipart encoding upload. + :param cookies: (optional) CookieJar object to send with the :class:`Request`. :param auth: (optional) AuthObject to enable Basic HTTP Auth. """ @@ -389,6 +393,7 @@ def delete(url, params={}, headers={}, cookies=None, auth=None): :param url: URL for the new :class:`Request` object. :param params: (optional) Dictionary of GET Parameters to send with the :class:`Request`. :param headers: (optional) Dictionary of HTTP Headers to sent with the :class:`Request`. + :param cookies: (optional) CookieJar object to send with the :class:`Request`. :param auth: (optional) AuthObject to enable Basic HTTP Auth. """ From d511e6f148d03b5e52228b54064a24eb47c9e756 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 14 Feb 2011 12:58:20 -0500 Subject: [PATCH 18/18] Version Bump v0.2.2 --- HISTORY.rst | 2 +- README.rst | 3 ++- requests/core.py | 4 ++-- setup.py | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 6f15dc91..f48abe0f 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,12 +3,12 @@ History 0.2.2 (2011-02-14) ++++++++++++++++++ + * Still handles request in the event of an HTTPError. (Issue #2) * Eventlet and Gevent Monkeypatch support. * Cookie Support (Issue #1) - 0.2.1 (2011-02-14) ++++++++++++++++++ diff --git a/README.rst b/README.rst index 9b987ef8..83bd3c44 100644 --- a/README.rst +++ b/README.rst @@ -14,6 +14,8 @@ Features + Simple HTTP Header Request Attachment + Simple Data/Params Request Attachment + Simple Multipart File Uploads + + CookieJar Support + - Simple Basic HTTP Authentication + Simple URL + HTTP Auth Registry @@ -129,7 +131,6 @@ If you'd like to contribute, simply fork `the repository`_, commit your changes Roadmap ------- -- Cookie Support - Sphinx Documentation - Exhaustive Unittests diff --git a/requests/core.py b/requests/core.py index 28d05053..6fcfca03 100644 --- a/requests/core.py +++ b/requests/core.py @@ -33,8 +33,8 @@ from .packages.poster.streaminghttp import register_openers __title__ = 'requests' -__version__ = '0.2.1' -__build__ = 0x000201 +__version__ = '0.2.2' +__build__ = 0x000202 __author__ = 'Kenneth Reitz' __license__ = 'ISC' __copyright__ = 'Copyright 2011 Kenneth Reitz' diff --git a/setup.py b/setup.py index 725ece6a..727834c5 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ required = [] setup( name='requests', - version='0.2.1', + version='0.2.2', description='Awesome Python HTTP Library that\'s actually usable.', long_description=open('README.rst').read() + '\n\n' + open('HISTORY.rst').read(),