From eca67ac2005bcac3b8d14d051e5e800ea36f42a8 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 20 Jan 2009 19:55:54 +0000 Subject: # We use 'precooked' Request subclasses that correspond to HTTP # request methods within ``router.py`` when constructing a request # object rather than using ``alsoProvides`` to attach the proper # interface to an unsubclassed webob.Request. This pattern is purely # an optimization (e.g. preventing calls to ``alsoProvides`` means the # difference between 590 r/s and 690 r/s on a MacBook 2GHz). --- repoze/bfg/request.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 repoze/bfg/request.py (limited to 'repoze/bfg/request.py') diff --git a/repoze/bfg/request.py b/repoze/bfg/request.py new file mode 100644 index 000000000..c764a2e9b --- /dev/null +++ b/repoze/bfg/request.py @@ -0,0 +1,38 @@ +from zope.interface import implements +from webob import Request as WebobRequest + +import repoze.bfg.interfaces + +# We use 'precooked' Request subclasses that correspond to HTTP +# request methods within ``router.py`` when constructing a request +# object rather than using ``alsoProvides`` to attach the proper +# interface to an unsubclassed webob.Request. This pattern is purely +# an optimization (e.g. preventing calls to ``alsoProvides`` means the +# difference between 590 r/s and 690 r/s on a MacBook 2GHz). + +class Request(WebobRequest): + implements(repoze.bfg.interfaces.IRequest) + +class GETRequest(WebobRequest): + implements(repoze.bfg.interfaces.IGETRequest) + +class POSTRequest(WebobRequest): + implements(repoze.bfg.interfaces.IPOSTRequest) + +class PUTRequest(WebobRequest): + implements(repoze.bfg.interfaces.IPUTRequest) + +class DELETERequest(WebobRequest): + implements(repoze.bfg.interfaces.IDELETERequest) + +class HEADRequest(WebobRequest): + implements(repoze.bfg.interfaces.IHEADRequest) + +HTTP_METHOD_FACTORIES = { + 'GET':GETRequest, + 'POST':POSTRequest, + 'PUT':PUTRequest, + 'DELETE':DELETERequest, + 'HEAD':HEADRequest, + } + -- cgit v1.2.3