From c4e3f4fe37003f9ad30883a31b3946ed78439506 Mon Sep 17 00:00:00 2001 From: Wyatt L Baldwin Date: Tue, 9 Oct 2012 19:19:13 -0700 Subject: Get rid of monkeypatch of Request and Response in pyramid.__init__ Added `request.default_request_factory()`, which is now used as the default request factory in the `Router` constructor instead of using the `Request` class directly as the default request factory. Fixes #702 --- pyramid/__init__.py | 5 ----- pyramid/request.py | 7 +++++++ pyramid/router.py | 5 +++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pyramid/__init__.py b/pyramid/__init__.py index 473d5e1c6..e69de29bb 100644 --- a/pyramid/__init__.py +++ b/pyramid/__init__.py @@ -1,5 +0,0 @@ -from pyramid.request import Request -from pyramid.response import Response -Response.RequestClass = Request -Request.ResponseClass = Response -del Request, Response diff --git a/pyramid/request.py b/pyramid/request.py index af3310829..0abf87dbb 100644 --- a/pyramid/request.py +++ b/pyramid/request.py @@ -9,6 +9,7 @@ from webob import BaseRequest from pyramid.interfaces import ( IRequest, + IRequestFactory, IResponse, ISessionFactory, IResponseFactory, @@ -28,6 +29,12 @@ from pyramid.response import Response from pyramid.url import URLMethodsMixin from pyramid.util import InstancePropertyMixin + +@implementer(IRequestFactory) +def default_request_factory(environ): + return Request(environ, ResponseClass=Response) + + class TemplateContext(object): pass diff --git a/pyramid/router.py b/pyramid/router.py index 0c7f61071..f1318ec3c 100644 --- a/pyramid/router.py +++ b/pyramid/router.py @@ -25,7 +25,8 @@ from pyramid.events import ( ) from pyramid.httpexceptions import HTTPNotFound -from pyramid.request import Request +from pyramid.request import default_request_factory +from pyramid.response import Response from pyramid.threadlocal import manager from pyramid.traversal import ( @@ -48,7 +49,7 @@ class Router(object): self.logger = q(IDebugLogger) self.root_factory = q(IRootFactory, default=DefaultRootFactory) self.routes_mapper = q(IRoutesMapper) - self.request_factory = q(IRequestFactory, default=Request) + self.request_factory = q(IRequestFactory, default=default_request_factory) self.request_extensions = q(IRequestExtensions) tweens = q(ITweens) if tweens is None: -- cgit v1.2.3 From c60c0e01d9053fdb676af9f3bcac883cefd671e8 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Fri, 2 Nov 2012 22:45:58 -0400 Subject: dont use a separate request factory; instead just assign ResponseClass attr of the Request class to pyramid.response.Response --- pyramid/__init__.py | 1 + pyramid/request.py | 9 ++------- pyramid/router.py | 5 ++--- pyramid/tests/test_request.py | 6 +++++- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/pyramid/__init__.py b/pyramid/__init__.py index e69de29bb..5bb534f79 100644 --- a/pyramid/__init__.py +++ b/pyramid/__init__.py @@ -0,0 +1 @@ +# package diff --git a/pyramid/request.py b/pyramid/request.py index 0abf87dbb..9e275c2c0 100644 --- a/pyramid/request.py +++ b/pyramid/request.py @@ -9,7 +9,6 @@ from webob import BaseRequest from pyramid.interfaces import ( IRequest, - IRequestFactory, IResponse, ISessionFactory, IResponseFactory, @@ -29,12 +28,6 @@ from pyramid.response import Response from pyramid.url import URLMethodsMixin from pyramid.util import InstancePropertyMixin - -@implementer(IRequestFactory) -def default_request_factory(environ): - return Request(environ, ResponseClass=Response) - - class TemplateContext(object): pass @@ -335,6 +328,8 @@ class Request(BaseRequest, DeprecatedRequestMethodsMixin, URLMethodsMixin, matchdict = None matched_route = None + ResponseClass = Response + @reify def tmpl_context(self): # docs-deprecated template context for Pylons-like apps; do not diff --git a/pyramid/router.py b/pyramid/router.py index f1318ec3c..0c7f61071 100644 --- a/pyramid/router.py +++ b/pyramid/router.py @@ -25,8 +25,7 @@ from pyramid.events import ( ) from pyramid.httpexceptions import HTTPNotFound -from pyramid.request import default_request_factory -from pyramid.response import Response +from pyramid.request import Request from pyramid.threadlocal import manager from pyramid.traversal import ( @@ -49,7 +48,7 @@ class Router(object): self.logger = q(IDebugLogger) self.root_factory = q(IRootFactory, default=DefaultRootFactory) self.routes_mapper = q(IRoutesMapper) - self.request_factory = q(IRequestFactory, default=default_request_factory) + self.request_factory = q(IRequestFactory, default=Request) self.request_extensions = q(IRequestExtensions) tweens = q(ITweens) if tweens is None: diff --git a/pyramid/tests/test_request.py b/pyramid/tests/test_request.py index 86cfd8b09..945e36a7f 100644 --- a/pyramid/tests/test_request.py +++ b/pyramid/tests/test_request.py @@ -42,13 +42,17 @@ class TestRequest(unittest.TestCase): from zope.interface.verify import verifyClass from pyramid.interfaces import IRequest verifyClass(IRequest, self._getTargetClass()) - klass = self._getTargetClass() def test_instance_conforms_to_IRequest(self): from zope.interface.verify import verifyObject from pyramid.interfaces import IRequest verifyObject(IRequest, self._makeOne()) + def test_ResponseClass_is_pyramid_Response(self): + from pyramid.response import Response + cls = self._getTargetClass() + self.assertEqual(cls.ResponseClass, Response) + def test_charset_defaults_to_utf8(self): r = self._makeOne({'PATH_INFO':'/'}) self.assertEqual(r.charset, 'UTF-8') -- cgit v1.2.3