All pastes #41073 Raw Edit

Check preconds early

public python v1 · immutable
#41073 ·published 2006-02-10 23:16 UTC
rendered paste body
Index: twisted/web2/static.py===================================================================--- twisted/web2/static.py      (revision 15884)+++ twisted/web2/static.py      (working copy)@@ -17,7 +17,7 @@  # Twisted Imports from twisted.python import filepath-from twisted.internet.defer import succeed, maybeDeferred+from twisted.internet.defer import maybeDeferred from zope.interface import implements  class MetaDataMixin(object):@@ -74,6 +74,32 @@         return True  class StaticRenderMixin(resource.RenderMixin, MetaDataMixin):+    def checkPreconditions(self, request):+        #+        # http.checkPreconditions() gets called by the server after every+        # request.  Unfortunately, we need to know to bail out before request+        # processing, especially for methods that modify server state (eg. PUT).+        # We also would like to do so even for methods that don't, if those+        # methods might be expensive to process.+        #+        # Unfortunately, http.checkPreconditions() doesn't work for GET and HEAD+        # unless it is given a response object, so we won't check those here and+        # leave it for later.+        #+        # Also unfortunate, having checked precoditions here for all other+        # methods, the server is going to check them again after processing,+        # which is, at best, redundant.+        #+        if request.method not in ("GET", "HEAD"):+            http.checkPreconditions(+                request,+                entityExists = self.exists(),+                etag         = self.etag(),+                lastModified = self.lastModified(),+            )++        super(StaticRenderMixin, self).checkPreconditions(request)+     def renderHTTP(self, request):         """         See L{resource.RenderMixIn.renderHTTP}.Index: twisted/web2/resource.py===================================================================--- twisted/web2/resource.py    (revision 15882)+++ twisted/web2/resource.py    (working copy)@@ -25,6 +25,15 @@             self._allowed_methods = tuple([name[5:] for name in dir(self) if name.startswith('http_')])         return self._allowed_methods +    def checkPreconditions(self, request):+        """+        Checks all preconditions imposed by this resource upon a request made+        against it.+        @param request: the request to process.+        @raise http.HTTPError: if any precondition fails.+        """+        pass+     def renderHTTP(self, request):         """         See L{iweb.IResource.renderHTTP}.@@ -52,6 +61,11 @@             response.headers.setHeader("allow", self.allowedMethods())             return response +        try:+            self.checkPreconditions(request)+        except http.HTTPError, e:+            return e.response+         return method(request)      def http_OPTIONS(self, request):