From bda1306749c62ef4f11cfe567ed7d56c8ad94240 Mon Sep 17 00:00:00 2001 From: Michael Merickel <github@m.merickel.org> Date: Mon, 15 Oct 2018 16:56:42 +0200 Subject: [PATCH] Merge pull request #3388 from mmerickel/black --- tests/test_integration.py | 371 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 248 insertions(+), 123 deletions(-) diff --git a/tests/test_integration.py b/tests/test_integration.py index 741c759..28160eb 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -1,30 +1,29 @@ # -*- coding: utf-8 -*- - import datetime import gc import locale import os import unittest +from webtest import TestApp +from zope.interface import Interface from pyramid.wsgi import wsgiapp from pyramid.view import view_config from pyramid.static import static_view from pyramid.testing import skip_on -from pyramid.compat import ( - text_, - url_quote, - ) +from pyramid.compat import text_, url_quote -from zope.interface import Interface -from webtest import TestApp +from .pkgs.exceptionviewapp.models import AnException, NotAnException # 5 years from now (more or less) -fiveyrsfuture = datetime.datetime.utcnow() + datetime.timedelta(5*365) +fiveyrsfuture = datetime.datetime.utcnow() + datetime.timedelta(5 * 365) defaultlocale = locale.getdefaultlocale()[1] + class INothing(Interface): pass + @view_config(for_=INothing) @wsgiapp @@ -32,12 +31,14 @@ """ """ return '123' + class WGSIAppPlusViewConfigTests(unittest.TestCase): def test_it(self): from venusian import ATTACH_ATTR import types + self.assertTrue(getattr(wsgiapptest, ATTACH_ATTR)) - self.assertTrue(type(wsgiapptest) is types.FunctionType) + self.assertIsInstance(wsgiapptest, types.FunctionType) context = DummyContext() request = DummyRequest() result = wsgiapptest(context, request) @@ -49,21 +50,27 @@ from pyramid.interfaces import IViewClassifier from pyramid.config import Configurator from . import test_integration + config = Configurator() config.scan(test_integration) config.commit() reg = config.registry view = reg.adapters.lookup( - (IViewClassifier, IRequest, INothing), IView, name='') + (IViewClassifier, IRequest, INothing), IView, name='' + ) self.assertEqual(view.__original_view__, wsgiapptest) + class IntegrationBase(object): root_factory = None package = None + def setUp(self): from pyramid.config import Configurator - config = Configurator(root_factory=self.root_factory, - package=self.package) + + config = Configurator( + root_factory=self.root_factory, package=self.package + ) config.include(self.package) app = config.make_wsgi_app() self.testapp = TestApp(app) @@ -72,7 +79,9 @@ def tearDown(self): self.config.end() + here = os.path.dirname(__file__) + class StaticAppBase(IntegrationBase): def test_basic(self): @@ -81,16 +90,18 @@ def test_hidden(self): res = self.testapp.get('/static/.hiddenfile', status=200) - _assertBody(res.body, os.path.join(here, 'fixtures/static/.hiddenfile')) + _assertBody( + res.body, os.path.join(here, 'fixtures/static/.hiddenfile') + ) - if defaultlocale is not None: # pragma: no cover + if defaultlocale is not None: # pragma: no cover # These tests are expected to fail on LANG=C systems due to decode # errors and on non-Linux systems due to git highchar handling # vagaries def test_highchars_in_pathelement(self): path = os.path.join( - here, - text_('fixtures/static/h��h��/index.html', 'utf-8')) + here, text_('fixtures/static/h��h��/index.html', 'utf-8') + ) pathdir = os.path.dirname(path) body = b'<html>hehe</html>\n' try: @@ -106,8 +117,8 @@ def test_highchars_in_filename(self): path = os.path.join( - here, - text_('fixtures/static/h��h��.html', 'utf-8')) + here, text_('fixtures/static/h��h��.html', 'utf-8') + ) body = b'<html>hehe file</html>\n' with open(path, 'wb') as fp: fp.write(body) @@ -120,7 +131,8 @@ def test_not_modified(self): self.testapp.extra_environ = { - 'HTTP_IF_MODIFIED_SINCE':httpdate(fiveyrsfuture)} + 'HTTP_IF_MODIFIED_SINCE': httpdate(fiveyrsfuture) + } res = self.testapp.get('/minimal.txt', status=304) self.assertEqual(res.body, b'') @@ -135,14 +147,16 @@ def test_directory_noslash_redir_preserves_qs(self): res = self.testapp.get('/static?a=1&b=2', status=301) - self.assertEqual(res.headers['Location'], - 'http://localhost/static/?a=1&b=2') + self.assertEqual( + res.headers['Location'], 'http://localhost/static/?a=1&b=2' + ) def test_directory_noslash_redir_with_scriptname(self): - self.testapp.extra_environ = {'SCRIPT_NAME':'/script_name'} + self.testapp.extra_environ = {'SCRIPT_NAME': '/script_name'} res = self.testapp.get('/static', status=301) - self.assertEqual(res.headers['Location'], - 'http://localhost/script_name/static/') + self.assertEqual( + res.headers['Location'], 'http://localhost/script_name/static/' + ) def test_directory_withslash(self): fn = os.path.join(here, 'fixtures/static/index.html') @@ -150,30 +164,30 @@ _assertBody(res.body, fn) def test_range_inclusive(self): - self.testapp.extra_environ = {'HTTP_RANGE':'bytes=1-2'} + self.testapp.extra_environ = {'HTTP_RANGE': 'bytes=1-2'} res = self.testapp.get('/static/index.html', status=206) self.assertEqual(res.body, b'ht') def test_range_tilend(self): - self.testapp.extra_environ = {'HTTP_RANGE':'bytes=-5'} + self.testapp.extra_environ = {'HTTP_RANGE': 'bytes=-5'} res = self.testapp.get('/static/index.html', status=206) self.assertEqual(res.body, b'html>') def test_range_notbytes(self): - self.testapp.extra_environ = {'HTTP_RANGE':'kHz=-5'} + self.testapp.extra_environ = {'HTTP_RANGE': 'kHz=-5'} res = self.testapp.get('/static/index.html', status=200) - _assertBody(res.body, - os.path.join(here, 'fixtures/static/index.html')) + _assertBody(res.body, os.path.join(here, 'fixtures/static/index.html')) def test_range_multiple(self): - res = self.testapp.get('/static/index.html', - [('HTTP_RANGE', 'bytes=10-11,11-12')], - status=200) - _assertBody(res.body, - os.path.join(here, 'fixtures/static/index.html')) + res = self.testapp.get( + '/static/index.html', + [('HTTP_RANGE', 'bytes=10-11,11-12')], + status=200, + ) + _assertBody(res.body, os.path.join(here, 'fixtures/static/index.html')) def test_range_oob(self): - self.testapp.extra_environ = {'HTTP_RANGE':'bytes=1000-1002'} + self.testapp.extra_environ = {'HTTP_RANGE': 'bytes=1000-1002'} self.testapp.get('/static/index.html', status=416) def test_notfound(self): @@ -188,6 +202,7 @@ def test_oob_slash(self): self.testapp.get('/%2F/test_integration.py', status=404) + class TestEventOnlySubscribers(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.eventonly' @@ -197,55 +212,64 @@ def test_sendfoobar(self): res = self.testapp.get('/sendfoobar', status=200) - self.assertEqual(sorted(res.body.split()), - [b'foobar', b'foobar2', b'foobaryup', b'foobaryup2']) + self.assertEqual( + sorted(res.body.split()), + [b'foobar', b'foobar2', b'foobaryup', b'foobaryup2'], + ) + class TestStaticAppUsingAbsPath(StaticAppBase, unittest.TestCase): package = 'tests.pkgs.static_abspath' + class TestStaticAppUsingAssetSpec(StaticAppBase, unittest.TestCase): package = 'tests.pkgs.static_assetspec' + class TestStaticAppNoSubpath(unittest.TestCase): staticapp = static_view(os.path.join(here, 'fixtures'), use_subpath=False) + def _makeRequest(self, extra): from pyramid.request import Request from io import BytesIO - kw = {'PATH_INFO':'', - 'SCRIPT_NAME':'', - 'SERVER_NAME':'localhost', - 'SERVER_PORT':'80', - 'REQUEST_METHOD':'GET', - 'wsgi.version':(1,0), - 'wsgi.url_scheme':'http', - 'wsgi.input':BytesIO()} + + kw = { + 'PATH_INFO': '', + 'SCRIPT_NAME': '', + 'SERVER_NAME': 'localhost', + 'SERVER_PORT': '80', + 'REQUEST_METHOD': 'GET', + 'wsgi.version': (1, 0), + 'wsgi.url_scheme': 'http', + 'wsgi.input': BytesIO(), + } kw.update(extra) request = Request(kw) return request def test_basic(self): - request = self._makeRequest({'PATH_INFO':'/minimal.txt'}) + request = self._makeRequest({'PATH_INFO': '/minimal.txt'}) context = DummyContext() result = self.staticapp(context, request) self.assertEqual(result.status, '200 OK') _assertBody(result.body, os.path.join(here, 'fixtures/minimal.txt')) + class TestStaticAppWithRoutePrefix(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.static_routeprefix' def test_includelevel1(self): res = self.testapp.get('/static/minimal.txt', status=200) - _assertBody(res.body, - os.path.join(here, 'fixtures/minimal.txt')) + _assertBody(res.body, os.path.join(here, 'fixtures/minimal.txt')) def test_includelevel2(self): res = self.testapp.get('/prefix/static/index.html', status=200) - _assertBody(res.body, - os.path.join(here, 'fixtures/static/index.html')) + _assertBody(res.body, os.path.join(here, 'fixtures/static/index.html')) class TestFixtureApp(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.fixtureapp' + def test_another(self): res = self.testapp.get('/another.html', status=200) self.assertEqual(res.body, b'fixture') @@ -264,38 +288,45 @@ def test_protected(self): self.testapp.get('/protected.html', status=403) + class TestStaticPermApp(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.staticpermapp' root_factory = 'tests.pkgs.staticpermapp:RootFactory' + def test_allowed(self): result = self.testapp.get('/allowed/index.html', status=200) - _assertBody(result.body, - os.path.join(here, 'fixtures/static/index.html')) + _assertBody( + result.body, os.path.join(here, 'fixtures/static/index.html') + ) def test_denied_via_acl_global_root_factory(self): - self.testapp.extra_environ = {'REMOTE_USER':'bob'} + self.testapp.extra_environ = {'REMOTE_USER': 'bob'} self.testapp.get('/protected/index.html', status=403) def test_allowed_via_acl_global_root_factory(self): - self.testapp.extra_environ = {'REMOTE_USER':'fred'} + self.testapp.extra_environ = {'REMOTE_USER': 'fred'} result = self.testapp.get('/protected/index.html', status=200) - _assertBody(result.body, - os.path.join(here, 'fixtures/static/index.html')) + _assertBody( + result.body, os.path.join(here, 'fixtures/static/index.html') + ) def test_denied_via_acl_local_root_factory(self): - self.testapp.extra_environ = {'REMOTE_USER':'fred'} + self.testapp.extra_environ = {'REMOTE_USER': 'fred'} self.testapp.get('/factory_protected/index.html', status=403) def test_allowed_via_acl_local_root_factory(self): - self.testapp.extra_environ = {'REMOTE_USER':'bob'} + self.testapp.extra_environ = {'REMOTE_USER': 'bob'} result = self.testapp.get('/factory_protected/index.html', status=200) - _assertBody(result.body, - os.path.join(here, 'fixtures/static/index.html')) + _assertBody( + result.body, os.path.join(here, 'fixtures/static/index.html') + ) + class TestCCBug(IntegrationBase, unittest.TestCase): # "unordered" as reported in IRC by author of # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/ package = 'tests.pkgs.ccbugapp' + def test_rdf(self): res = self.testapp.get('/licenses/1/v1/rdf', status=200) self.assertEqual(res.body, b'rdf') @@ -304,11 +335,13 @@ res = self.testapp.get('/licenses/1/v1/juri', status=200) self.assertEqual(res.body, b'juri') + class TestHybridApp(IntegrationBase, unittest.TestCase): # make sure views registered for a route "win" over views registered # without one, even though the context of the non-route view may # be more specific than the route view. package = 'tests.pkgs.hybridapp' + def test_root(self): res = self.testapp.get('/', status=200) self.assertEqual(res.body, b'global') @@ -347,27 +380,34 @@ res = self.testapp.get('/error_sub', status=200) self.assertEqual(res.body, b'supressed2') + class TestRestBugApp(IntegrationBase, unittest.TestCase): # test bug reported by delijati 2010/2/3 (http://pastebin.com/d4cc15515) package = 'tests.pkgs.restbugapp' + def test_it(self): res = self.testapp.get('/pet', status=200) self.assertEqual(res.body, b'gotten') + class TestForbiddenAppHasResult(IntegrationBase, unittest.TestCase): # test that forbidden exception has ACLDenied result attached package = 'tests.pkgs.forbiddenapp' + def test_it(self): res = self.testapp.get('/x', status=403) message, result = [x.strip() for x in res.body.split(b'\n')] self.assertTrue(message.endswith(b'failed permission check')) self.assertTrue( - result.startswith(b"ACLDenied permission 'private' via ACE " - b"'<default deny>' in ACL " - b"'<No ACL found on any object in resource " - b"lineage>' on context")) - self.assertTrue( - result.endswith(b"for principals ['system.Everyone']")) + result.startswith( + b"ACLDenied permission 'private' via ACE " + b"'<default deny>' in ACL " + b"'<No ACL found on any object in resource " + b"lineage>' on context" + ) + ) + self.assertTrue(result.endswith(b"for principals ['system.Everyone']")) + class TestViewDecoratorApp(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.viewdecoratorapp' @@ -379,6 +419,7 @@ def test_second(self): res = self.testapp.get('/second', status=200) self.assertTrue(b'OK2' in res.body) + class TestNotFoundView(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.notfoundview' @@ -397,6 +438,7 @@ res = self.testapp.get('/baz', status=200) self.assertTrue(b'baz_notfound' in res.body) + class TestForbiddenView(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.forbiddenview' @@ -405,10 +447,13 @@ self.assertTrue(b'foo_forbidden' in res.body) res = self.testapp.get('/bar', status=200) self.assertTrue(b'generic_forbidden' in res.body) - + + class TestViewPermissionBug(IntegrationBase, unittest.TestCase): - # view_execution_permitted bug as reported by Shane at http://lists.repoze.org/pipermail/repoze-dev/2010-October/003603.html + # view_execution_permitted bug as reported by Shane at + # http://lists.repoze.org/pipermail/repoze-dev/2010-October/003603.html package = 'tests.pkgs.permbugapp' + def test_test(self): res = self.testapp.get('/test', status=200) self.assertTrue(b'ACLDenied' in res.body) @@ -416,9 +461,12 @@ def test_x(self): self.testapp.get('/x', status=403) + class TestDefaultViewPermissionBug(IntegrationBase, unittest.TestCase): - # default_view_permission bug as reported by Wiggy at http://lists.repoze.org/pipermail/repoze-dev/2010-October/003602.html + # default_view_permission bug as reported by Wiggy at + # http://lists.repoze.org/pipermail/repoze-dev/2010-October/003602.html package = 'tests.pkgs.defpermbugapp' + def test_x(self): res = self.testapp.get('/x', status=403) self.assertTrue(b'failed permission check' in res.body) @@ -431,13 +479,14 @@ res = self.testapp.get('/z', status=200) self.assertTrue(b'public' in res.body) -from .pkgs.exceptionviewapp.models import AnException, NotAnException -excroot = {'anexception':AnException(), - 'notanexception':NotAnException()} + +excroot = {'anexception': AnException(), 'notanexception': NotAnException()} + class TestExceptionViewsApp(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.exceptionviewapp' root_factory = lambda *arg: excroot + def test_root(self): res = self.testapp.get('/', status=200) self.assertTrue(b'maybe' in res.body) @@ -469,11 +518,14 @@ def test_raise_httpexception(self): res = self.testapp.get('/route_raise_httpexception', status=200) self.assertTrue(b'caught' in res.body) - + + class TestConflictApp(unittest.TestCase): package = 'tests.pkgs.conflictapp' + def _makeConfig(self): from pyramid.config import Configurator + config = Configurator() return config @@ -489,10 +541,13 @@ def test_overridden_autoresolved_view(self): from pyramid.response import Response + config = self._makeConfig() config.include(self.package) + def thisview(request): return Response('this view') + config.add_view(thisview) app = config.make_wsgi_app() self.testapp = TestApp(app) @@ -501,10 +556,13 @@ def test_overridden_route_view(self): from pyramid.response import Response + config = self._makeConfig() config.include(self.package) + def thisview(request): return Response('this view') + config.add_view(thisview, route_name='aroute') app = config.make_wsgi_app() self.testapp = TestApp(app) @@ -523,6 +581,7 @@ config = self._makeConfig() config.include(self.package) from pyramid.testing import DummySecurityPolicy + config.set_authorization_policy(DummySecurityPolicy('fred')) config.set_authentication_policy(DummySecurityPolicy(permissive=True)) app = config.make_wsgi_app() @@ -530,11 +589,14 @@ res = self.testapp.get('/protected', status=200) self.assertTrue('protected view' in res) + class ImperativeIncludeConfigurationTest(unittest.TestCase): def setUp(self): from pyramid.config import Configurator + config = Configurator() from .pkgs.includeapp1.root import configure + configure(config) app = config.make_wsgi_app() self.testapp = TestApp(app) @@ -555,9 +617,11 @@ res = self.testapp.get('/three', status=200) self.assertTrue(b'three' in res.body) + class SelfScanAppTest(unittest.TestCase): def setUp(self): from .test_config.pkgs.selfscan import main + config = main() app = config.make_wsgi_app() self.testapp = TestApp(app) @@ -574,9 +638,11 @@ res = self.testapp.get('/two', status=200) self.assertTrue(b'two' in res.body) + class WSGIApp2AppTest(unittest.TestCase): def setUp(self): from .pkgs.wsgiapp2app import main + config = main() app = config.make_wsgi_app() self.testapp = TestApp(app) @@ -589,9 +655,11 @@ res = self.testapp.get('/hello', status=200) self.assertTrue(b'Hello' in res.body) + class SubrequestAppTest(unittest.TestCase): def setUp(self): from .pkgs.subrequestapp import main + config = main() app = config.make_wsgi_app() self.testapp = TestApp(app) @@ -612,8 +680,10 @@ res = self.testapp.get('/view_five', status=200) self.assertTrue(b'Value error raised' in res.body) + class RendererScanAppTest(IntegrationBase, unittest.TestCase): package = 'tests.pkgs.rendererscanapp' + def test_root(self): res = self.testapp.get('/one', status=200) self.assertTrue(b'One!' in res.body) @@ -631,9 +701,11 @@ res = testapp.get('/two', status=200) self.assertTrue(b'Two!' in res.body) + class UnicodeInURLTest(unittest.TestCase): def _makeConfig(self): from pyramid.config import Configurator + config = Configurator() return config @@ -643,7 +715,9 @@ def test_unicode_in_url_404(self): request_path = '/avalia%C3%A7%C3%A3o_participante' - request_path_unicode = b'/avalia\xc3\xa7\xc3\xa3o_participante'.decode('utf-8') + request_path_unicode = b'/avalia\xc3\xa7\xc3\xa3o_participante'.decode( + 'utf-8' + ) config = self._makeConfig() testapp = self._makeTestApp(config) @@ -657,7 +731,9 @@ def test_unicode_in_url_200(self): request_path = '/avalia%C3%A7%C3%A3o_participante' - request_path_unicode = b'/avalia\xc3\xa7\xc3\xa3o_participante'.decode('utf-8') + request_path_unicode = b'/avalia\xc3\xa7\xc3\xa3o_participante'.decode( + 'utf-8' + ) def myview(request): return 'XXX' @@ -676,18 +752,31 @@ def _makeConfig(self): def hello_view(request): return {'message': 'Hello!'} + from pyramid.config import Configurator + config = Configurator() config.add_route('hello', '/hello') - config.add_view(hello_view, route_name='hello', - accept='text/plain', renderer='string') - config.add_view(hello_view, route_name='hello', - accept='application/json', renderer='json') + config.add_view( + hello_view, + route_name='hello', + accept='text/plain', + renderer='string', + ) + config.add_view( + hello_view, + route_name='hello', + accept='application/json', + renderer='json', + ) + def hello_fallback_view(request): request.response.content_type = 'text/x-fallback' return 'hello fallback' - config.add_view(hello_fallback_view, route_name='hello', - renderer='string') + + config.add_view( + hello_fallback_view, route_name='hello', renderer='string' + ) return config def _makeTestApp(self, config): @@ -696,36 +785,49 @@ def tearDown(self): import pyramid.config + pyramid.config.global_registries.empty() def test_client_side_ordering(self): config = self._makeConfig() app = self._makeTestApp(config) - res = app.get('/hello', headers={ - 'Accept': 'application/json; q=1.0, text/plain; q=0.9', - }, status=200) + res = app.get( + '/hello', + headers={'Accept': 'application/json; q=1.0, text/plain; q=0.9'}, + status=200, + ) self.assertEqual(res.content_type, 'application/json') - res = app.get('/hello', headers={ - 'Accept': 'text/plain; q=0.9, application/json; q=1.0', - }, status=200) + res = app.get( + '/hello', + headers={'Accept': 'text/plain; q=0.9, application/json; q=1.0'}, + status=200, + ) self.assertEqual(res.content_type, 'application/json') - res = app.get('/hello', headers={'Accept': 'application/*'}, status=200) + res = app.get( + '/hello', headers={'Accept': 'application/*'}, status=200 + ) self.assertEqual(res.content_type, 'application/json') res = app.get('/hello', headers={'Accept': 'text/*'}, status=200) self.assertEqual(res.content_type, 'text/plain') - res = app.get('/hello', headers={'Accept': 'something/else'}, status=200) + res = app.get( + '/hello', headers={'Accept': 'something/else'}, status=200 + ) self.assertEqual(res.content_type, 'text/x-fallback') def test_default_server_side_ordering(self): config = self._makeConfig() app = self._makeTestApp(config) - res = app.get('/hello', headers={ - 'Accept': 'application/json, text/plain', - }, status=200) + res = app.get( + '/hello', + headers={'Accept': 'application/json, text/plain'}, + status=200, + ) self.assertEqual(res.content_type, 'text/plain') - res = app.get('/hello', headers={ - 'Accept': 'text/plain, application/json', - }, status=200) + res = app.get( + '/hello', + headers={'Accept': 'text/plain, application/json'}, + status=200, + ) self.assertEqual(res.content_type, 'text/plain') res = app.get('/hello', headers={'Accept': '*/*'}, status=200) self.assertEqual(res.content_type, 'text/plain') @@ -733,21 +835,28 @@ self.assertEqual(res.content_type, 'text/plain') res = app.get('/hello', headers={'Accept': 'invalid'}, status=200) self.assertEqual(res.content_type, 'text/plain') - res = app.get('/hello', headers={'Accept': 'something/else'}, status=200) + res = app.get( + '/hello', headers={'Accept': 'something/else'}, status=200 + ) self.assertEqual(res.content_type, 'text/x-fallback') def test_custom_server_side_ordering(self): config = self._makeConfig() config.add_accept_view_order( - 'application/json', weighs_more_than='text/plain') + 'application/json', weighs_more_than='text/plain' + ) app = self._makeTestApp(config) - res = app.get('/hello', headers={ - 'Accept': 'application/json, text/plain', - }, status=200) + res = app.get( + '/hello', + headers={'Accept': 'application/json, text/plain'}, + status=200, + ) self.assertEqual(res.content_type, 'application/json') - res = app.get('/hello', headers={ - 'Accept': 'text/plain, application/json', - }, status=200) + res = app.get( + '/hello', + headers={'Accept': 'text/plain, application/json'}, + status=200, + ) self.assertEqual(res.content_type, 'application/json') res = app.get('/hello', headers={'Accept': '*/*'}, status=200) self.assertEqual(res.content_type, 'application/json') @@ -755,7 +864,9 @@ self.assertEqual(res.content_type, 'application/json') res = app.get('/hello', headers={'Accept': 'invalid'}, status=200) self.assertEqual(res.content_type, 'application/json') - res = app.get('/hello', headers={'Accept': 'something/else'}, status=200) + res = app.get( + '/hello', headers={'Accept': 'something/else'}, status=200 + ) self.assertEqual(res.content_type, 'text/x-fallback') def test_deprecated_ranges_in_route_predicate(self): @@ -763,53 +874,66 @@ config.add_route('foo', '/foo', accept='text/*') config.add_view(lambda r: 'OK', route_name='foo', renderer='string') app = self._makeTestApp(config) - res = app.get('/foo', headers={ - 'Accept': 'application/json; q=1.0, text/plain; q=0.9', - }, status=200) + res = app.get( + '/foo', + headers={'Accept': 'application/json; q=1.0, text/plain; q=0.9'}, + status=200, + ) self.assertEqual(res.content_type, 'text/plain') self.assertEqual(res.body, b'OK') - res = app.get('/foo', headers={ - 'Accept': 'application/json', - }, status=404) + res = app.get( + '/foo', headers={'Accept': 'application/json'}, status=404 + ) self.assertEqual(res.content_type, 'application/json') def test_deprecated_ranges_in_view_predicate(self): config = self._makeConfig() config.add_route('foo', '/foo') - config.add_view(lambda r: 'OK', route_name='foo', - accept='text/*', renderer='string') + config.add_view( + lambda r: 'OK', + route_name='foo', + accept='text/*', + renderer='string', + ) app = self._makeTestApp(config) - res = app.get('/foo', headers={ - 'Accept': 'application/json; q=1.0, text/plain; q=0.9', - }, status=200) + res = app.get( + '/foo', + headers={'Accept': 'application/json; q=1.0, text/plain; q=0.9'}, + status=200, + ) self.assertEqual(res.content_type, 'text/plain') self.assertEqual(res.body, b'OK') - res = app.get('/foo', headers={ - 'Accept': 'application/json', - }, status=404) + res = app.get( + '/foo', headers={'Accept': 'application/json'}, status=404 + ) self.assertEqual(res.content_type, 'application/json') class DummyContext(object): pass + class DummyRequest: subpath = ('__init__.py',) traversed = None - environ = {'REQUEST_METHOD':'GET', 'wsgi.version':(1,0)} + environ = {'REQUEST_METHOD': 'GET', 'wsgi.version': (1, 0)} + def get_response(self, application): return application(None, None) + def httpdate(ts): return ts.strftime("%a, %d %b %Y %H:%M:%S GMT") + def read_(filename): with open(filename, 'rb') as fp: val = fp.read() return val - + + def _assertBody(body, filename): - if defaultlocale is None: # pragma: no cover + if defaultlocale is None: # pragma: no cover # If system locale does not have an encoding then default to utf-8 filename = filename.encode('utf-8') # strip both \n and \r for windows @@ -818,13 +942,13 @@ data = read_(filename) data = data.replace(b'\r', b'') data = data.replace(b'\n', b'') - assert(body == data) + assert body == data class MemoryLeaksTest(unittest.TestCase): - def tearDown(self): import pyramid.config + pyramid.config.global_registries.empty() def get_gc_count(self): @@ -839,6 +963,7 @@ @skip_on('pypy') def test_memory_leaks(self): from pyramid.config import Configurator + Configurator().make_wsgi_app() # Initialize all global objects initial_count = self.get_gc_count() -- Gitblit v1.9.3