]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
web: factor out identical renderHTTP methods
authorBrian Warner <warner@allmydata.com>
Mon, 19 May 2008 22:19:25 +0000 (15:19 -0700)
committerBrian Warner <warner@allmydata.com>
Mon, 19 May 2008 22:19:25 +0000 (15:19 -0700)
src/allmydata/web/common.py
src/allmydata/web/directory.py
src/allmydata/web/filenode.py
src/allmydata/web/root.py

index 10599269d62b42364de010c6e064f3c2a81c02c4..a2e4b9e8f511a5da91ba3b0300468cb13fd95a11 100644 (file)
@@ -125,3 +125,20 @@ class MyExceptionHandler(appserver.DefaultExceptionHandler):
                                http.NOT_IMPLEMENTED)
         super = appserver.DefaultExceptionHandler
         return super.renderHTTP_exception(self, ctx, f)
+
+class RenderMixin:
+
+    def renderHTTP(self, ctx):
+        request = IRequest(ctx)
+
+        # if we were using regular twisted.web Resources (and the regular
+        # twisted.web.server.Request object) then we could implement
+        # render_PUT and render_GET. But Nevow's request handler
+        # (NevowRequest.gotPageContext) goes directly to renderHTTP. Copy
+        # some code from the Resource.render method that Nevow bypasses, to
+        # do the same thing.
+        m = getattr(self, 'render_' + request.method, None)
+        if not m:
+            from twisted.web.server import UnsupportedMethod
+            raise UnsupportedMethod(getattr(self, 'allowedMethods', ()))
+        return m(ctx)
index a16af78a12beb90b84e379e86371f144448ecedc..8397541b5cf82242a9a26fa70f5e9663953d883e 100644 (file)
@@ -18,7 +18,7 @@ from allmydata.interfaces import IDirectoryNode, IFileNode, IMutableFileNode, \
      ExistingChildError
 from allmydata.web.common import text_plain, WebError, IClient, \
      boolean_of_arg, get_arg, should_create_intermediate_directories, \
-     getxmlfile
+     getxmlfile, RenderMixin
 from allmydata.web.filenode import ReplaceMeMixin, \
      FileNodeHandler, PlaceHolderNodeHandler
 
@@ -38,7 +38,7 @@ def make_handler_for(node, parentnode=None, name=None):
         return DirectoryNodeHandler(node, parentnode, name)
     raise WebError("Cannot provide handler for '%s'" % node)
 
-class DirectoryNodeHandler(rend.Page, ReplaceMeMixin):
+class DirectoryNodeHandler(RenderMixin, rend.Page, ReplaceMeMixin):
     addSlash = True
 
     def __init__(self, node, parentnode=None, name=None):
@@ -111,22 +111,6 @@ class DirectoryNodeHandler(rend.Page, ReplaceMeMixin):
         if DEBUG: print "good child"
         return make_handler_for(node, self.node, name)
 
-    def renderHTTP(self, ctx):
-        # This is where all of the ?t=* actions are implemented.
-        request = IRequest(ctx)
-
-        # if we were using regular twisted.web Resources (and the regular
-        # twisted.web.server.Request object) then we could implement
-        # render_PUT and render_GET. But Nevow's request handler
-        # (NevowRequest.gotPageContext) goes directly to renderHTTP. Copy
-        # some code from the Resource.render method that Nevow bypasses, to
-        # do the same thing.
-        m = getattr(self, 'render_' + request.method, None)
-        if not m:
-            from twisted.web.server import UnsupportedMethod
-            raise UnsupportedMethod(getattr(self, 'allowedMethods', ()))
-        return m(ctx)
-
     def render_DELETE(self, ctx):
         assert self.parentnode and self.name
         d = self.parentnode.delete(self.name)
index c17bc52fadfa8ffc49911097d256046456482b91..608dc19e20b3075ec215c7ee27aa5177499dec68 100644 (file)
@@ -13,7 +13,7 @@ from allmydata.interfaces import IDownloadTarget, ExistingChildError
 from allmydata.mutable.common import MODE_READ
 from allmydata.util import log
 
-from allmydata.web.common import text_plain, WebError, IClient, \
+from allmydata.web.common import text_plain, WebError, IClient, RenderMixin, \
      boolean_of_arg, get_arg, should_create_intermediate_directories
 
 class ReplaceMeMixin:
@@ -79,7 +79,7 @@ class ReplaceMeMixin:
         d.addCallback(lambda newnode: newnode.get_uri())
         return d
 
-class PlaceHolderNodeHandler(rend.Page, ReplaceMeMixin):
+class PlaceHolderNodeHandler(RenderMixin, rend.Page, ReplaceMeMixin):
     def __init__(self, parentnode, name):
         rend.Page.__init__(self)
         assert parentnode
@@ -97,22 +97,6 @@ class PlaceHolderNodeHandler(rend.Page, ReplaceMeMixin):
                        % name, http.CONFLICT)
 
 
-    def renderHTTP(self, ctx):
-        # This is where all of the ?t=* actions are implemented.
-        request = IRequest(ctx)
-
-        # if we were using regular twisted.web Resources (and the regular
-        # twisted.web.server.Request object) then we could implement
-        # render_PUT and render_GET. But Nevow's request handler
-        # (NevowRequest.gotPageContext) goes directly to renderHTTP. Copy
-        # some code from the Resource.render method that Nevow bypasses, to
-        # do the same thing.
-        m = getattr(self, 'render_' + request.method, None)
-        if not m:
-            from twisted.web.server import UnsupportedMethod
-            raise UnsupportedMethod(getattr(self, 'allowedMethods', ()))
-        return m(ctx)
-
     def render_PUT(self, ctx):
         req = IRequest(ctx)
         t = get_arg(req, "t", "").strip()
@@ -149,7 +133,7 @@ class PlaceHolderNodeHandler(rend.Page, ReplaceMeMixin):
         return d
 
 
-class FileNodeHandler(rend.Page, ReplaceMeMixin):
+class FileNodeHandler(RenderMixin, rend.Page, ReplaceMeMixin):
     def __init__(self, node, parentnode=None, name=None):
         rend.Page.__init__(self)
         assert node
@@ -165,23 +149,6 @@ class FileNodeHandler(rend.Page, ReplaceMeMixin):
         raise WebError("Files have no children, certainly not named '%s'"
                        % name)
 
-
-    def renderHTTP(self, ctx):
-        # This is where all of the ?t=* actions are implemented.
-        request = IRequest(ctx)
-
-        # if we were using regular twisted.web Resources (and the regular
-        # twisted.web.server.Request object) then we could implement
-        # render_PUT and render_GET. But Nevow's request handler
-        # (NevowRequest.gotPageContext) goes directly to renderHTTP. Copy
-        # some code from the Resource.render method that Nevow bypasses, to
-        # do the same thing.
-        m = getattr(self, 'render_' + request.method, None)
-        if not m:
-            from twisted.web.server import UnsupportedMethod
-            raise UnsupportedMethod(getattr(self, 'allowedMethods', ()))
-        return m(ctx)
-
     def render_GET(self, ctx):
         req = IRequest(ctx)
         t = get_arg(req, "t", "").strip()
index 51a96307d038a007321c9601e09784cdb8212bad..9e752b85520f9441e4d2e9da0cd1c6033e9954fa 100644 (file)
@@ -16,29 +16,14 @@ from allmydata.util import idlib
 from allmydata.interfaces import IFileNode
 from allmydata.web import filenode, directory, unlinked, status
 from allmydata.web.common import abbreviate_size, IClient, getxmlfile, \
-     WebError, get_arg
+     WebError, get_arg, RenderMixin
 
 
 
-class URIHandler(rend.Page):
+class URIHandler(RenderMixin, rend.Page):
     # I live at /uri . There are several operations defined on /uri itself,
     # mostly involed with creation of unlinked files and directories.
 
-    def renderHTTP(self, ctx):
-        request = IRequest(ctx)
-
-        # if we were using regular twisted.web Resources (and the regular
-        # twisted.web.server.Request object) then we could implement
-        # render_PUT and render_GET. But Nevow's request handler
-        # (NevowRequest.gotPageContext) goes directly to renderHTTP. Copy
-        # some code from the Resource.render method that Nevow bypasses, to
-        # do the same thing.
-        m = getattr(self, 'render_' + request.method, None)
-        if not m:
-            from twisted.web.server import UnsupportedMethod
-            raise UnsupportedMethod(getattr(self, 'allowedMethods', ()))
-        return m(ctx)
-
     def render_GET(self, ctx):
         req = IRequest(ctx)
         uri = get_arg(req, "uri", None)