Hello community, here is the log from the commit of package python3-WebOb for openSUSE:Factory checked in at 2015-04-18 10:39:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-WebOb (Old) and /work/SRC/openSUSE:Factory/.python3-WebOb.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-WebOb" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-WebOb/python3-WebOb.changes 2015-01-26 16:47:07.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python3-WebOb.new/python3-WebOb.changes 2015-04-18 10:39:59.000000000 +0200 @@ -1,0 +2,58 @@ +Wed Apr 15 15:33:02 UTC 2015 - a...@gmx.de + +- update to version 1.4.1: + * Backwards Incompatibilities + + Morsel will no longer accept a cookie value that does not meet + RFC6265’s cookie-octet specification. Upon calling + Morsel.serialize a warning will be issued, in the future this + will raise a ValueError, please update your cookie handling + code. See https://github.com/Pylons/webob/pull/172 + + The cookie-octet specification in RFC6265 states the following + characters are valid in a cookie value: + + Hex Range Actual Characters ——— —————– [0x21 ] ! [0x25-0x2B] + #$%&’()*+ [0x2D-0x3A] -./0123456789: [0x3C-0x5B] + <=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ [0x5D-0x7E] + ]^_`abcdefghijklmnopqrstuvwxyz{|}~ + + RFC6265 suggests using base 64 to serialize data before storing + data in a cookie. + + response.set_cookie now uses the internal make_cookie API, which + will issue warnings if cookies are set with invalid bytes. See + https://github.com/Pylons/webob/pull/172 + * Features + + Add support for some new caching headers, stale-while-revalidate + and stale-if-error that can be used by reverse proxies to cache + stale responses temporarily if the backend disappears. From + RFC5861. See https://github.com/Pylons/webob/pull/189 + * Bug Fixes + + Response.status now uses duck-typing for integers, and has also + learned to raise a ValueError if the status isn’t an integer + followed by a space, and then the reason. See + https://github.com/Pylons/webob/pull/191 + + Fixed a bug in webob.multidict.GetDict which resulted in the + QUERY_STRING not being updated when changes were made to query + params using Request.GET.extend(). + + Read the body of a request if we think it might have a + body. This fixes PATCH to support bodies. See + https://github.com/Pylons/webob/pull/184 + + Response.from_file returns HTTP headers as latin1 rather than + UTF-8, this fixes the usage on Google AppEngine. See + https://github.com/Pylons/webob/issues/99 and + https://github.com/Pylons/webob/pull/150 + + Fix a bug in parsing the auth parameters that contained bad + white space. This makes the parsing fall in line with what’s + required in RFC7235. See + https://github.com/Pylons/webob/issues/158 + + Use ‘rn’ line endings in Response.__str__. See: + https://github.com/Pylons/webob/pull/146 + * Documentation Changes + + response.set_cookie now has proper documentation for max_age and + expires. The code has also been refactored to use + cookies.make_cookie instead of duplicating the code. This fixes + https://github.com/Pylons/webob/issues/166 and + https://github.com/Pylons/webob/issues/171 + + Documentation didn’t match the actual code for the wsgify + function signature. See https://github.com/Pylons/webob/pull/167 + + Remove the WebDAV only from certain HTTP Exceptions, these + exceptions may also be used by REST services for example. + +------------------------------------------------------------------- Old: ---- WebOb-1.4.tar.gz New: ---- WebOb-1.4.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-WebOb.spec ++++++ --- /var/tmp/diff_new_pack.R7NraP/_old 2015-04-18 10:39:59.000000000 +0200 +++ /var/tmp/diff_new_pack.R7NraP/_new 2015-04-18 10:39:59.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package python3-WebOb # -# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: python3-WebOb -Version: 1.4 +Version: 1.4.1 Release: 0 Summary: WSGI request and response object License: MIT ++++++ WebOb-1.4.tar.gz -> WebOb-1.4.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/.gitignore new/WebOb-1.4.1/.gitignore --- old/WebOb-1.4/.gitignore 2013-12-07 04:05:28.000000000 +0100 +++ new/WebOb-1.4.1/.gitignore 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -WebOb.egg-info -*.pyc -*.pyo -*.swp -*~ -TEST* -testenv -docs/_build/* -dist/ -build/ -.coverage -*.egg -glob:_coverage -Session.vim -*_coverage/** -*,cover -*_fixt.py -*$py.class -.tox/ -coverage.xml -nosetests.xml -env*/ -_website/ -__pycache__/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/.travis.yml new/WebOb-1.4.1/.travis.yml --- old/WebOb-1.4/.travis.yml 2014-02-22 17:44:46.000000000 +0100 +++ new/WebOb-1.4.1/.travis.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -language: python - -python: - - 2.6 - - 2.7 - - 3.2 - - 3.3 - - pypy - -install: python setup.py install - -script: python setup.py nosetests diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/PKG-INFO new/WebOb-1.4.1/PKG-INFO --- old/WebOb-1.4/PKG-INFO 2014-05-15 03:30:52.000000000 +0200 +++ new/WebOb-1.4.1/PKG-INFO 2015-04-14 17:39:57.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: WebOb -Version: 1.4 +Version: 1.4.1 Summary: WSGI request and response object Home-page: http://webob.org/ Author: Pylons Project diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/WebOb.egg-info/PKG-INFO new/WebOb-1.4.1/WebOb.egg-info/PKG-INFO --- old/WebOb-1.4/WebOb.egg-info/PKG-INFO 2014-05-15 03:30:49.000000000 +0200 +++ new/WebOb-1.4.1/WebOb.egg-info/PKG-INFO 2015-04-14 17:39:57.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: WebOb -Version: 1.4 +Version: 1.4.1 Summary: WSGI request and response object Home-page: http://webob.org/ Author: Pylons Project diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/WebOb.egg-info/SOURCES.txt new/WebOb-1.4.1/WebOb.egg-info/SOURCES.txt --- old/WebOb-1.4/WebOb.egg-info/SOURCES.txt 2014-05-15 03:30:51.000000000 +0200 +++ new/WebOb-1.4.1/WebOb.egg-info/SOURCES.txt 2015-04-14 17:39:57.000000000 +0200 @@ -1,10 +1,6 @@ -.gitignore -.travis.yml MANIFEST.in setup.cfg setup.py -tox.ini -toxfast.ini WebOb.egg-info/PKG-INFO WebOb.egg-info/SOURCES.txt WebOb.egg-info/dependency_links.txt @@ -34,6 +30,7 @@ docs/jsonrpc-example-code/test_jsonrpc.txt docs/modules/client.txt docs/modules/dec.txt +docs/modules/exceptions.txt docs/modules/static.txt docs/modules/webob.txt docs/pycon2011/pycon-py3k-sprint.txt @@ -59,6 +56,7 @@ tests/test_compat.pyc tests/test_cookies.py tests/test_cookies.pyc +tests/test_cookies_bw.pyc tests/test_datetime_utils.py tests/test_datetime_utils.pyc tests/test_dec.py @@ -94,78 +92,107 @@ tests/__pycache__/__init__.cpython-32.pyc tests/__pycache__/__init__.cpython-33.pyc tests/__pycache__/__init__.cpython-34.pyc +tests/__pycache__/__init__.pypy3-24.pyc tests/__pycache__/performance_test.cpython-32.pyc tests/__pycache__/performance_test.cpython-33.pyc tests/__pycache__/performance_test.cpython-34.pyc +tests/__pycache__/performance_test.pypy3-24.pyc tests/__pycache__/test_acceptparse.cpython-32.pyc tests/__pycache__/test_acceptparse.cpython-33.pyc tests/__pycache__/test_acceptparse.cpython-34.pyc +tests/__pycache__/test_acceptparse.pypy3-24.pyc tests/__pycache__/test_byterange.cpython-32.pyc tests/__pycache__/test_byterange.cpython-33.pyc tests/__pycache__/test_byterange.cpython-34.pyc +tests/__pycache__/test_byterange.pypy3-24.pyc tests/__pycache__/test_cachecontrol.cpython-32.pyc tests/__pycache__/test_cachecontrol.cpython-33.pyc tests/__pycache__/test_cachecontrol.cpython-34.pyc +tests/__pycache__/test_cachecontrol.pypy3-24.pyc tests/__pycache__/test_client.cpython-32.pyc tests/__pycache__/test_client.cpython-33.pyc tests/__pycache__/test_client.cpython-34.pyc +tests/__pycache__/test_client.pypy3-24.pyc tests/__pycache__/test_client_functional.cpython-32.pyc tests/__pycache__/test_client_functional.cpython-33.pyc tests/__pycache__/test_client_functional.cpython-34.pyc +tests/__pycache__/test_client_functional.pypy3-24.pyc tests/__pycache__/test_compat.cpython-32.pyc tests/__pycache__/test_compat.cpython-33.pyc tests/__pycache__/test_compat.cpython-34.pyc +tests/__pycache__/test_compat.pypy3-24.pyc tests/__pycache__/test_cookies.cpython-32.pyc tests/__pycache__/test_cookies.cpython-33.pyc tests/__pycache__/test_cookies.cpython-34.pyc +tests/__pycache__/test_cookies.pypy3-24.pyc +tests/__pycache__/test_cookies_bw.cpython-32.pyc +tests/__pycache__/test_cookies_bw.cpython-33.pyc +tests/__pycache__/test_cookies_bw.cpython-34.pyc +tests/__pycache__/test_cookies_bw.pypy3-24.pyc tests/__pycache__/test_datetime_utils.cpython-32.pyc tests/__pycache__/test_datetime_utils.cpython-33.pyc tests/__pycache__/test_datetime_utils.cpython-34.pyc +tests/__pycache__/test_datetime_utils.pypy3-24.pyc tests/__pycache__/test_dec.cpython-32.pyc tests/__pycache__/test_dec.cpython-33.pyc tests/__pycache__/test_dec.cpython-34.pyc +tests/__pycache__/test_dec.pypy3-24.pyc tests/__pycache__/test_descriptors.cpython-32.pyc tests/__pycache__/test_descriptors.cpython-33.pyc tests/__pycache__/test_descriptors.cpython-34.pyc +tests/__pycache__/test_descriptors.pypy3-24.pyc tests/__pycache__/test_etag.cpython-32.pyc tests/__pycache__/test_etag.cpython-33.pyc tests/__pycache__/test_etag.cpython-34.pyc +tests/__pycache__/test_etag.pypy3-24.pyc tests/__pycache__/test_etag_nose.cpython-32.pyc tests/__pycache__/test_etag_nose.cpython-33.pyc tests/__pycache__/test_etag_nose.cpython-34.pyc +tests/__pycache__/test_etag_nose.pypy3-24.pyc tests/__pycache__/test_exc.cpython-32.pyc tests/__pycache__/test_exc.cpython-33.pyc tests/__pycache__/test_exc.cpython-34.pyc +tests/__pycache__/test_exc.pypy3-24.pyc tests/__pycache__/test_headers.cpython-32.pyc tests/__pycache__/test_headers.cpython-33.pyc tests/__pycache__/test_headers.cpython-34.pyc +tests/__pycache__/test_headers.pypy3-24.pyc tests/__pycache__/test_in_wsgiref.cpython-32.pyc tests/__pycache__/test_in_wsgiref.cpython-33.pyc tests/__pycache__/test_in_wsgiref.cpython-34.pyc +tests/__pycache__/test_in_wsgiref.pypy3-24.pyc tests/__pycache__/test_misc.cpython-32.pyc tests/__pycache__/test_misc.cpython-33.pyc tests/__pycache__/test_misc.cpython-34.pyc +tests/__pycache__/test_misc.pypy3-24.pyc tests/__pycache__/test_multidict.cpython-32.pyc tests/__pycache__/test_multidict.cpython-33.pyc tests/__pycache__/test_multidict.cpython-34.pyc +tests/__pycache__/test_multidict.pypy3-24.pyc tests/__pycache__/test_request.cpython-32.pyc tests/__pycache__/test_request.cpython-33.pyc tests/__pycache__/test_request.cpython-34.pyc +tests/__pycache__/test_request.pypy3-24.pyc tests/__pycache__/test_request_nose.cpython-32.pyc tests/__pycache__/test_request_nose.cpython-33.pyc tests/__pycache__/test_request_nose.cpython-34.pyc +tests/__pycache__/test_request_nose.pypy3-24.pyc tests/__pycache__/test_response.cpython-32.pyc tests/__pycache__/test_response.cpython-33.pyc tests/__pycache__/test_response.cpython-34.pyc +tests/__pycache__/test_response.pypy3-24.pyc tests/__pycache__/test_static.cpython-32.pyc tests/__pycache__/test_static.cpython-33.pyc tests/__pycache__/test_static.cpython-34.pyc +tests/__pycache__/test_static.pypy3-24.pyc tests/__pycache__/test_transcode.cpython-32.pyc tests/__pycache__/test_transcode.cpython-33.pyc tests/__pycache__/test_transcode.cpython-34.pyc +tests/__pycache__/test_transcode.pypy3-24.pyc tests/__pycache__/test_util.cpython-32.pyc tests/__pycache__/test_util.cpython-33.pyc tests/__pycache__/test_util.cpython-34.pyc +tests/__pycache__/test_util.pypy3-24.pyc webob/__init__.py webob/acceptparse.py webob/byterange.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/WebOb.egg-info/requires.txt new/WebOb-1.4.1/WebOb.egg-info/requires.txt --- old/WebOb-1.4/WebOb.egg-info/requires.txt 2014-05-15 03:30:49.000000000 +0200 +++ new/WebOb-1.4.1/WebOb.egg-info/requires.txt 2015-04-14 17:39:57.000000000 +0200 @@ -1,8 +1,7 @@ - [docs] Sphinx [testing] nose -coverage \ No newline at end of file +coverage diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/docs/index.txt new/WebOb-1.4.1/docs/index.txt --- old/WebOb-1.4/docs/index.txt 2014-04-16 17:16:51.000000000 +0200 +++ new/WebOb-1.4.1/docs/index.txt 2015-04-13 22:15:31.000000000 +0200 @@ -7,6 +7,7 @@ modules/webob modules/dec modules/static + modules/exceptions differences file-example wiki-example @@ -143,8 +144,8 @@ Methods ------- -There are `several methods <class-webob.Request.html#__init__>`_ but -only a few you'll use often: +There are several methods in :class:`webob.Request` but only a few you'll use +often: ``Request.blank(base_url)``: Creates a new request with blank information, based at the given diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/docs/modules/exceptions.txt new/WebOb-1.4.1/docs/modules/exceptions.txt --- old/WebOb-1.4/docs/modules/exceptions.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/WebOb-1.4.1/docs/modules/exceptions.txt 2015-04-04 05:09:18.000000000 +0200 @@ -0,0 +1,64 @@ +:mod:`webob.exc` -- WebOb Exceptions +==================================== + +.. automodule:: webob.exc + +HTTP Exceptions +--------------- + +.. autoexception:: HTTPException +.. autoexception:: WSGIHTTPException +.. autoexception:: HTTPError +.. autoexception:: HTTPRedirection +.. autoexception:: HTTPOk +.. autoexception:: HTTPCreated +.. autoexception:: HTTPAccepted +.. autoexception:: HTTPNonAuthoritativeInformation +.. autoexception:: HTTPNoContent +.. autoexception:: HTTPResetContent +.. autoexception:: HTTPPartialContent +.. autoexception:: _HTTPMove +.. autoexception:: HTTPMultipleChoices +.. autoexception:: HTTPMovedPermanently +.. autoexception:: HTTPFound +.. autoexception:: HTTPSeeOther +.. autoexception:: HTTPNotModified +.. autoexception:: HTTPUseProxy +.. autoexception:: HTTPTemporaryRedirect +.. autoexception:: HTTPClientError +.. autoexception:: HTTPBadRequest +.. autoexception:: HTTPUnauthorized +.. autoexception:: HTTPPaymentRequired +.. autoexception:: HTTPForbidden +.. autoexception:: HTTPNotFound +.. autoexception:: HTTPMethodNotAllowed +.. autoexception:: HTTPNotAcceptable +.. autoexception:: HTTPProxyAuthenticationRequired +.. autoexception:: HTTPRequestTimeout +.. autoexception:: HTTPConflict +.. autoexception:: HTTPGone +.. autoexception:: HTTPLengthRequired +.. autoexception:: HTTPPreconditionFailed +.. autoexception:: HTTPRequestEntityTooLarge +.. autoexception:: HTTPRequestURITooLong +.. autoexception:: HTTPUnsupportedMediaType +.. autoexception:: HTTPRequestRangeNotSatisfiable +.. autoexception:: HTTPExpectationFailed +.. autoexception:: HTTPUnprocessableEntity +.. autoexception:: HTTPLocked +.. autoexception:: HTTPFailedDependency +.. autoexception:: HTTPPreconditionRequired +.. autoexception:: HTTPTooManyRequests +.. autoexception:: HTTPRequestHeaderFieldsTooLarge +.. autoexception:: HTTPUnavailableForLegalReasons +.. autoexception:: HTTPServerError +.. autoexception:: HTTPInternalServerError +.. autoexception:: HTTPNotImplemented +.. autoexception:: HTTPBadGateway +.. autoexception:: HTTPServiceUnavailable +.. autoexception:: HTTPGatewayTimeout +.. autoexception:: HTTPVersionNotSupported +.. autoexception:: HTTPInsufficientStorage +.. autoexception:: HTTPNetworkAuthenticationRequired +.. autoexception:: HTTPExceptionMiddleware + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/docs/news.txt new/WebOb-1.4.1/docs/news.txt --- old/WebOb-1.4/docs/news.txt 2014-05-15 03:26:20.000000000 +0200 +++ new/WebOb-1.4.1/docs/news.txt 2015-04-14 17:33:59.000000000 +0200 @@ -1,7 +1,28 @@ News ==== -1.4 (2013-05-14) +1.4.1 (2015-04-14) +------------------ + +Bug Fixes +~~~~~~~~~ + +- Request.body would get mangled if the body was JSON but the right + content_type was not set. See https://github.com/Pylons/webob/pull/192 + +- Read the body of a request if we think it might have a body. This fixes PATCH + to support bodies. See https://github.com/Pylons/webob/pull/184 + +Documentation Changes +~~~~~~~~~~~~~~~~~~~~~ + +- Documentation didn't match the actual code for the wsgify function signature. + See https://github.com/Pylons/webob/pull/167 + +- Remove the WebDAV only from certain HTTP Exceptions, these exceptions may + also be used by REST services for example. + +1.4 (2014-05-14) ---------------- Features diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/setup.cfg new/WebOb-1.4.1/setup.cfg --- old/WebOb-1.4/setup.cfg 2014-05-15 03:30:52.000000000 +0200 +++ new/WebOb-1.4.1/setup.cfg 2015-04-14 17:39:57.000000000 +0200 @@ -13,7 +13,7 @@ universal = 1 [egg_info] -tag_build = tag_date = 0 tag_svn_revision = 0 +tag_build = diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/setup.py new/WebOb-1.4.1/setup.py --- old/WebOb-1.4/setup.py 2014-05-15 03:24:30.000000000 +0200 +++ new/WebOb-1.4.1/setup.py 2015-04-14 17:33:16.000000000 +0200 @@ -1,6 +1,6 @@ from setuptools import setup -version = '1.4' +version = '1.4.1' testing_extras = ['nose', 'coverage'] Files old/WebOb-1.4/tests/__init__.pyc and new/WebOb-1.4.1/tests/__init__.pyc differ Files old/WebOb-1.4/tests/__pycache__/__init__.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/__init__.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/__init__.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/__init__.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/__init__.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/__init__.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/__init__.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/__init__.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/performance_test.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/performance_test.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/performance_test.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/performance_test.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/performance_test.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/performance_test.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/performance_test.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/performance_test.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_acceptparse.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_acceptparse.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_acceptparse.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_acceptparse.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_acceptparse.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_acceptparse.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_acceptparse.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_acceptparse.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_byterange.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_byterange.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_byterange.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_byterange.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_byterange.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_byterange.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_byterange.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_byterange.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cachecontrol.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cachecontrol.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cachecontrol.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cachecontrol.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cachecontrol.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cachecontrol.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cachecontrol.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cachecontrol.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_client.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_client.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_client.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_client.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_client.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_client.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_client.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_client.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_client_functional.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_client_functional.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_client_functional.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_client_functional.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_client_functional.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_client_functional.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_client_functional.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_client_functional.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_compat.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_compat.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_compat.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_compat.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_compat.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_compat.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_compat.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_compat.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cookies.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cookies.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cookies.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cookies.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cookies.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cookies.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cookies.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cookies.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cookies_bw.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cookies_bw.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cookies_bw.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cookies_bw.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cookies_bw.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cookies_bw.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_cookies_bw.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_cookies_bw.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_datetime_utils.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_datetime_utils.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_datetime_utils.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_datetime_utils.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_datetime_utils.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_datetime_utils.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_datetime_utils.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_datetime_utils.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_dec.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_dec.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_dec.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_dec.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_dec.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_dec.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_dec.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_dec.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_descriptors.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_descriptors.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_descriptors.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_descriptors.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_descriptors.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_descriptors.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_descriptors.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_descriptors.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_etag.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_etag.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_etag.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_etag.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_etag.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_etag.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_etag.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_etag.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_etag_nose.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_etag_nose.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_etag_nose.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_etag_nose.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_etag_nose.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_etag_nose.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_etag_nose.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_etag_nose.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_exc.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_exc.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_exc.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_exc.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_exc.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_exc.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_exc.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_exc.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_headers.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_headers.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_headers.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_headers.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_headers.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_headers.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_headers.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_headers.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_in_wsgiref.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_in_wsgiref.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_in_wsgiref.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_in_wsgiref.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_in_wsgiref.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_in_wsgiref.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_in_wsgiref.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_in_wsgiref.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_misc.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_misc.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_misc.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_misc.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_misc.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_misc.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_misc.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_misc.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_multidict.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_multidict.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_multidict.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_multidict.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_multidict.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_multidict.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_multidict.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_multidict.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_request.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_request.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_request.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_request.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_request.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_request.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_request.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_request.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_request_nose.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_request_nose.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_request_nose.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_request_nose.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_request_nose.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_request_nose.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_request_nose.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_request_nose.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_response.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_response.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_response.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_response.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_response.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_response.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_response.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_response.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_static.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_static.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_static.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_static.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_static.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_static.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_static.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_static.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_transcode.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_transcode.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_transcode.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_transcode.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_transcode.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_transcode.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_transcode.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_transcode.pypy3-24.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_util.cpython-32.pyc and new/WebOb-1.4.1/tests/__pycache__/test_util.cpython-32.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_util.cpython-33.pyc and new/WebOb-1.4.1/tests/__pycache__/test_util.cpython-33.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_util.cpython-34.pyc and new/WebOb-1.4.1/tests/__pycache__/test_util.cpython-34.pyc differ Files old/WebOb-1.4/tests/__pycache__/test_util.pypy3-24.pyc and new/WebOb-1.4.1/tests/__pycache__/test_util.pypy3-24.pyc differ Files old/WebOb-1.4/tests/performance_test.pyc and new/WebOb-1.4.1/tests/performance_test.pyc differ Files old/WebOb-1.4/tests/test_acceptparse.pyc and new/WebOb-1.4.1/tests/test_acceptparse.pyc differ Files old/WebOb-1.4/tests/test_byterange.pyc and new/WebOb-1.4.1/tests/test_byterange.pyc differ Files old/WebOb-1.4/tests/test_cachecontrol.pyc and new/WebOb-1.4.1/tests/test_cachecontrol.pyc differ Files old/WebOb-1.4/tests/test_client.pyc and new/WebOb-1.4.1/tests/test_client.pyc differ Files old/WebOb-1.4/tests/test_client_functional.pyc and new/WebOb-1.4.1/tests/test_client_functional.pyc differ Files old/WebOb-1.4/tests/test_compat.pyc and new/WebOb-1.4.1/tests/test_compat.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/tests/test_cookies.py new/WebOb-1.4.1/tests/test_cookies.py --- old/WebOb-1.4/tests/test_cookies.py 2014-02-22 17:50:32.000000000 +0100 +++ new/WebOb-1.4.1/tests/test_cookies.py 2015-04-13 22:15:31.000000000 +0200 @@ -160,11 +160,6 @@ result = repr(v) eq_(result, "<Morsel: a='b'>") -def test_strings_differ(): - from webob.util import strings_differ - - eq_(strings_differ('test1', 'test'), True) - class TestRequestCookies(unittest.TestCase): def _makeOne(self, environ): from webob.cookies import RequestCookies Files old/WebOb-1.4/tests/test_cookies.pyc and new/WebOb-1.4.1/tests/test_cookies.pyc differ Files old/WebOb-1.4/tests/test_cookies_bw.pyc and new/WebOb-1.4.1/tests/test_cookies_bw.pyc differ Files old/WebOb-1.4/tests/test_datetime_utils.pyc and new/WebOb-1.4.1/tests/test_datetime_utils.pyc differ Files old/WebOb-1.4/tests/test_dec.pyc and new/WebOb-1.4.1/tests/test_dec.pyc differ Files old/WebOb-1.4/tests/test_descriptors.pyc and new/WebOb-1.4.1/tests/test_descriptors.pyc differ Files old/WebOb-1.4/tests/test_etag.pyc and new/WebOb-1.4.1/tests/test_etag.pyc differ Files old/WebOb-1.4/tests/test_etag_nose.pyc and new/WebOb-1.4.1/tests/test_etag_nose.pyc differ Files old/WebOb-1.4/tests/test_exc.pyc and new/WebOb-1.4.1/tests/test_exc.pyc differ Files old/WebOb-1.4/tests/test_headers.pyc and new/WebOb-1.4.1/tests/test_headers.pyc differ Files old/WebOb-1.4/tests/test_in_wsgiref.pyc and new/WebOb-1.4.1/tests/test_in_wsgiref.pyc differ Files old/WebOb-1.4/tests/test_misc.pyc and new/WebOb-1.4.1/tests/test_misc.pyc differ Files old/WebOb-1.4/tests/test_multidict.pyc and new/WebOb-1.4.1/tests/test_multidict.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/tests/test_request.py new/WebOb-1.4.1/tests/test_request.py --- old/WebOb-1.4/tests/test_request.py 2014-05-15 03:09:30.000000000 +0200 +++ new/WebOb-1.4.1/tests/test_request.py 2015-04-13 17:44:52.000000000 +0200 @@ -512,6 +512,21 @@ result = req.POST self.assertEqual(result['var1'], 'value1') + def test_POST_json_no_content_type(self): + data = b'{"password": "last centurion", "email": "r...@wiggy.net"}' + INPUT = BytesIO(data) + environ = {'wsgi.input': INPUT, + 'REQUEST_METHOD': 'POST', + 'CONTENT_LENGTH':len(data), + 'webob.is_body_seekable': True, + } + req = self._makeOne(environ) + r_1 = req.body + r_2 = req.POST + r_3 = req.body + self.assertEqual(r_1, b'{"password": "last centurion", "email": "r...@wiggy.net"}') + self.assertEqual(r_3, b'{"password": "last centurion", "email": "r...@wiggy.net"}') + def test_PUT_bad_content_type(self): from webob.multidict import NoVars data = b'input' @@ -2865,6 +2880,14 @@ ) self.assertRaises(ValueError, cls.from_file, val_file) + def test_from_file_patch(self): + cls = self._getTargetClass() + req = cls.from_bytes(_test_req_patch) + self.assertEqual("PATCH", req.method) + self.assertTrue(len(req.body)) + self.assertTrue(req.body in _test_req_patch) + self.assertEqual(_test_req_patch, req.as_bytes()) + def test_from_bytes(self): # A valid request without a Content-Length header should still read # the full body. @@ -2972,14 +2995,10 @@ content_type='multipart/form-data; boundary=boundary', POST=_cgi_escaping_body ) - f0 = req.body_file_raw post1 = req.POST - f1 = req.body_file_raw - self.assertTrue(f1 is not f0) + self.assertTrue('webob._parsed_post_vars' in req.environ) post2 = req.POST - f2 = req.body_file_raw self.assertTrue(post1 is post2) - self.assertTrue(f1 is f2) def test_middleware_body(self): @@ -3383,6 +3402,11 @@ 'application/x-www-form-urlencoded') self.assertEqual(body.read(), b'bananas=bananas') + def test_readable(self): + from webob.request import FakeCGIBody + body = FakeCGIBody({'bananas': 'bananas'}, 'application/something') + self.assertTrue(body.readable()) + class Test_cgi_FieldStorage__repr__patch(unittest.TestCase): def _callFUT(self, fake): @@ -3563,6 +3587,14 @@ ------------------------------deb95b63e42a-- """ +_test_req_patch = b""" +PATCH /webob/ HTTP/1.1 +Content-Length: 14 +Content-Type: application/json + +{"foo": "bar"} +""" + _test_req2 = b""" POST / HTTP/1.0 Content-Length: 0 @@ -3606,6 +3638,7 @@ _test_req = _norm_req(_test_req) +_test_req_patch = _norm_req(_test_req_patch) _test_req2 = _norm_req(_test_req2) + b'\r\n' _test_req_multipart_charset = _norm_req(_test_req_multipart_charset) Files old/WebOb-1.4/tests/test_request.pyc and new/WebOb-1.4.1/tests/test_request.pyc differ Files old/WebOb-1.4/tests/test_request_nose.pyc and new/WebOb-1.4.1/tests/test_request_nose.pyc differ Files old/WebOb-1.4/tests/test_response.pyc and new/WebOb-1.4.1/tests/test_response.pyc differ Files old/WebOb-1.4/tests/test_static.pyc and new/WebOb-1.4.1/tests/test_static.pyc differ Files old/WebOb-1.4/tests/test_transcode.pyc and new/WebOb-1.4.1/tests/test_transcode.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/tests/test_util.py new/WebOb-1.4.1/tests/test_util.py --- old/WebOb-1.4/tests/test_util.py 2014-05-15 03:21:14.000000000 +0200 +++ new/WebOb-1.4.1/tests/test_util.py 2015-04-13 17:44:52.000000000 +0200 @@ -48,3 +48,47 @@ from webob.util import warn_deprecation warn_deprecation('foo', v[:3], 1) self.assertEqual(len(self.warnings), 1) + +class Test_strings_differ(unittest.TestCase): + def _callFUT(self, *args, **kw): + from webob.util import strings_differ + return strings_differ(*args, **kw) + + def test_it(self): + self.assertFalse(self._callFUT(b'foo', b'foo')) + self.assertTrue(self._callFUT(b'123', b'345')) + self.assertTrue(self._callFUT(b'1234', b'123')) + self.assertTrue(self._callFUT(b'123', b'1234')) + + def test_it_with_internal_comparator(self): + result = self._callFUT(b'foo', b'foo', compare_digest=None) + self.assertFalse(result) + + result = self._callFUT(b'123', b'abc', compare_digest=None) + self.assertTrue(result) + + def test_it_with_external_comparator(self): + class DummyComparator(object): + called = False + def __init__(self, ret_val): + self.ret_val = ret_val + + def __call__(self, a, b): + self.called = True + return self.ret_val + + dummy_compare = DummyComparator(True) + result = self._callFUT(b'foo', b'foo', compare_digest=dummy_compare) + self.assertTrue(dummy_compare.called) + self.assertFalse(result) + + dummy_compare = DummyComparator(False) + result = self._callFUT(b'123', b'345', compare_digest=dummy_compare) + self.assertTrue(dummy_compare.called) + self.assertTrue(result) + + dummy_compare = DummyComparator(False) + result = self._callFUT(b'abc', b'abc', compare_digest=dummy_compare) + self.assertTrue(dummy_compare.called) + self.assertTrue(result) + Files old/WebOb-1.4/tests/test_util.pyc and new/WebOb-1.4.1/tests/test_util.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/tox.ini new/WebOb-1.4.1/tox.ini --- old/WebOb-1.4/tox.ini 2014-04-16 17:16:51.000000000 +0200 +++ new/WebOb-1.4.1/tox.ini 1970-01-01 01:00:00.000000000 +0100 @@ -1,17 +0,0 @@ -[tox] -envlist = - py26,py27,py32,py33,py34,pypy,cover - -[testenv] -commands = - python setup.py dev - python setup.py nosetests - -[testenv:cover] -basepython = - python2.6 -commands = - python setup.py dev - python setup.py nosetests --with-xunit --with-xcoverage -deps = - nosexcover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/toxfast.ini new/WebOb-1.4.1/toxfast.ini --- old/WebOb-1.4/toxfast.ini 2012-10-31 19:21:40.000000000 +0100 +++ new/WebOb-1.4.1/toxfast.ini 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -[tox] -envlist = - py26,py32 - -[testenv] -commands = - python setup.py dev - python setup.py nosetests - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/webob/dec.py new/WebOb-1.4.1/webob/dec.py --- old/WebOb-1.4/webob/dec.py 2012-01-31 17:47:47.000000000 +0100 +++ new/WebOb-1.4.1/webob/dec.py 2015-04-04 05:14:18.000000000 +0200 @@ -222,7 +222,7 @@ Use this like:: @wsgify.middleware - def restrict_ip(app, req, ips): + def restrict_ip(req, app, ips): if req.remote_addr not in ips: raise webob.exc.HTTPForbidden('Bad IP: %s' % req.remote_addr) return app @@ -236,7 +236,7 @@ Or if you want to write output-rewriting middleware:: @wsgify.middleware - def all_caps(app, req): + def all_caps(req, app): resp = req.get_response(app) resp.body = resp.body.upper() return resp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/webob/exc.py new/WebOb-1.4.1/webob/exc.py --- old/WebOb-1.4/webob/exc.py 2014-05-15 03:09:30.000000000 +0200 +++ new/WebOb-1.4.1/webob/exc.py 2015-04-04 05:09:18.000000000 +0200 @@ -1,6 +1,4 @@ """ -HTTP Exception --------------- This module processes Python exceptions that relate to HTTP exceptions by defining a set of exceptions, all subclasses of HTTPException. Each exception, in addition to being a Python exception that can be @@ -20,56 +18,59 @@ Exception HTTPException HTTPOk - * 200 - HTTPOk - * 201 - HTTPCreated - * 202 - HTTPAccepted - * 203 - HTTPNonAuthoritativeInformation - * 204 - HTTPNoContent - * 205 - HTTPResetContent - * 206 - HTTPPartialContent + * 200 - :class:`HTTPOk` + * 201 - :class:`HTTPCreated` + * 202 - :class:`HTTPAccepted` + * 203 - :class:`HTTPNonAuthoritativeInformation` + * 204 - :class:`HTTPNoContent` + * 205 - :class:`HTTPResetContent` + * 206 - :class:`HTTPPartialContent` HTTPRedirection - * 300 - HTTPMultipleChoices - * 301 - HTTPMovedPermanently - * 302 - HTTPFound - * 303 - HTTPSeeOther - * 304 - HTTPNotModified - * 305 - HTTPUseProxy - * 306 - Unused (not implemented, obviously) - * 307 - HTTPTemporaryRedirect + * 300 - :class:`HTTPMultipleChoices` + * 301 - :class:`HTTPMovedPermanently` + * 302 - :class:`HTTPFound` + * 303 - :class:`HTTPSeeOther` + * 304 - :class:`HTTPNotModified` + * 305 - :class:`HTTPUseProxy` + * 307 - :class:`HTTPTemporaryRedirect` HTTPError HTTPClientError - * 400 - HTTPBadRequest - * 401 - HTTPUnauthorized - * 402 - HTTPPaymentRequired - * 403 - HTTPForbidden - * 404 - HTTPNotFound - * 405 - HTTPMethodNotAllowed - * 406 - HTTPNotAcceptable - * 407 - HTTPProxyAuthenticationRequired - * 408 - HTTPRequestTimeout - * 409 - HTTPConflict - * 410 - HTTPGone - * 411 - HTTPLengthRequired - * 412 - HTTPPreconditionFailed - * 413 - HTTPRequestEntityTooLarge - * 414 - HTTPRequestURITooLong - * 415 - HTTPUnsupportedMediaType - * 416 - HTTPRequestRangeNotSatisfiable - * 417 - HTTPExpectationFailed - * 428 - HTTPPreconditionRequired - * 429 - HTTPTooManyRequests - * 431 - HTTPRequestHeaderFieldsTooLarge + * 400 - :class:`HTTPBadRequest` + * 401 - :class:`HTTPUnauthorized` + * 402 - :class:`HTTPPaymentRequired` + * 403 - :class:`HTTPForbidden` + * 404 - :class:`HTTPNotFound` + * 405 - :class:`HTTPMethodNotAllowed` + * 406 - :class:`HTTPNotAcceptable` + * 407 - :class:`HTTPProxyAuthenticationRequired` + * 408 - :class:`HTTPRequestTimeout` + * 409 - :class:`HTTPConflict` + * 410 - :class:`HTTPGone` + * 411 - :class:`HTTPLengthRequired` + * 412 - :class:`HTTPPreconditionFailed` + * 413 - :class:`HTTPRequestEntityTooLarge` + * 414 - :class:`HTTPRequestURITooLong` + * 415 - :class:`HTTPUnsupportedMediaType` + * 416 - :class:`HTTPRequestRangeNotSatisfiable` + * 417 - :class:`HTTPExpectationFailed` + * 422 - :class:`HTTPUnprocessableEntity` + * 423 - :class:`HTTPLocked` + * 424 - :class:`HTTPFailedDependency` + * 428 - :class:`HTTPPreconditionRequired` + * 429 - :class:`HTTPTooManyRequests` + * 431 - :class:`HTTPRequestHeaderFieldsTooLarge` + * 451 - :class:`HTTPUnavailableForLegalReasons` HTTPServerError - * 500 - HTTPInternalServerError - * 501 - HTTPNotImplemented - * 502 - HTTPBadGateway - * 503 - HTTPServiceUnavailable - * 504 - HTTPGatewayTimeout - * 505 - HTTPVersionNotSupported - * 511 - HTTPNetworkAuthenticationRequired + * 500 - :class:`HTTPInternalServerError` + * 501 - :class:`HTTPNotImplemented` + * 502 - :class:`HTTPBadGateway` + * 503 - :class:`HTTPServiceUnavailable` + * 504 - :class:`HTTPGatewayTimeout` + * 505 - :class:`HTTPVersionNotSupported` + * 511 - :class:`HTTPNetworkAuthenticationRequired` -Subclass usage notes: ---------------------- +Usage notes +----------- The HTTPException class is complicated by 4 factors: @@ -608,6 +609,8 @@ in-error. This is an expected problem, and thus is not considered a bug. A server-side traceback is not warranted. Unless specialized, this is a '400 Bad Request' + + code: 400, title: Bad Request """ code = 400 title = 'Bad Request' @@ -866,7 +869,7 @@ subclass of :class:`~HTTPClientError` This indicates that the server is unable to process the contained - instructions. Only for WebDAV. + instructions. code: 422, title: Unprocessable Entity """ @@ -879,7 +882,7 @@ """ subclass of :class:`~HTTPClientError` - This indicates that the resource is locked. Only for WebDAV + This indicates that the resource is locked. code: 423, title: Locked """ @@ -894,7 +897,6 @@ This indicates that the method could not be performed because the requested action depended on another action and that action failed. - Only for WebDAV. code: 424, title: Failed Dependency """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/webob/request.py new/WebOb-1.4.1/webob/request.py --- old/WebOb-1.4/webob/request.py 2014-05-15 03:16:02.000000000 +0200 +++ new/WebOb-1.4.1/webob/request.py 2015-04-13 22:15:31.000000000 +0200 @@ -785,8 +785,10 @@ return NoVars('Not an HTML form submission (Content-Type: %s)' % content_type) self._check_charset() - if self.is_body_seekable: - self.body_file_raw.seek(0) + + self.make_body_seekable() + self.body_file_raw.seek(0) + fs_environ = env.copy() # FieldStorage assumes a missing CONTENT_LENGTH, but a # default of 0 is better: @@ -806,11 +808,6 @@ keep_blank_values=True) vars = MultiDict.from_fieldstorage(fs) - - #ctype = self.content_type or 'application/x-www-form-urlencoded' - ctype = self._content_type_raw or 'application/x-www-form-urlencoded' - f = FakeCGIBody(vars, ctype) - self.body_file = io.BufferedReader(f) env['webob._parsed_post_vars'] = (vars, self.body_file_raw) return vars @@ -1146,7 +1143,7 @@ # acquire body before we handle headers so that # content-length will be set body = None - if self.method in ('PUT', 'POST'): + if http_method_probably_has_body.get(self.method): if skip_body > 1: if len(self.body) > skip_body: body = bytes_('<body skipped (len=%s)>' % len(self.body)) @@ -1248,7 +1245,7 @@ if hname in r.headers: hval = r.headers[hname] + ', ' + hval r.headers[hname] = hval - if r.method in ('PUT', 'POST'): + if http_method_probably_has_body.get(r.method): clen = r.content_length if clen is None: body = fp.read() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/WebOb-1.4/webob/util.py new/WebOb-1.4.1/webob/util.py --- old/WebOb-1.4/webob/util.py 2014-05-15 03:19:24.000000000 +0200 +++ new/WebOb-1.4.1/webob/util.py 2015-04-13 17:44:52.000000000 +0200 @@ -133,10 +133,10 @@ try: # py3.3+ have native comparison support from hmac import compare_digest -except ImportError: +except ImportError: # pragma: nocover (Python 2.7.7 backported this) compare_digest = None -def strings_differ(string1, string2): +def strings_differ(string1, string2, compare_digest=compare_digest): """Check whether two strings differ while avoiding timing attacks. This function returns True if the given strings differ and False @@ -146,6 +146,10 @@ http://seb.dbzteam.org/crypto/python-oauth-timing-hmac.pdf + .. versionchanged:: 1.5 + Support :func:`hmac.compare_digest` if it is available (Python 2.7.7+ + and Python 3.3+). + """ len_eq = len(string1) == len(string2) if len_eq: @@ -156,9 +160,10 @@ left = string2 right = string2 - if compare_digest is not None: # pragma: nocover (Python 3.3+ only) + if compare_digest is not None: invalid_bits += not compare_digest(left, right) else: for a, b in zip(left, right): invalid_bits += a != b return invalid_bits != 0 +