  
          return child
  
-@@ -347,6 +380,7 @@
+@@ -347,6 +378,7 @@
          """
          Remember the URL of a visited resource.
          """

         self._urlsByResource[resource] = url
         return resource
 
@@ -386,7 +420,8 @@
             The contained response will have a status code of
             L{responsecode.BAD_REQUEST}.
         """

         d.addCallback(lambda res, req: res.renderHTTP(req), self)
         d.addCallback(self._cbFinishRender)
         d.addErrback(self._processingFailed)
@@ -280,6 +304,15 @@
             response = http.Response(responsecode.OK)
             response.headers.setHeader('allow', ('GET', 'HEAD', 'OPTIONS', 'TRACE'))
             return response
+
+        elif self.method == "POST":
+            # Allow other methods to tunnel through using POST and a request header.
+            # See http://code.google.com/apis/gdata/docs/2.0/basics.html
+            if self.headers.hasHeader("X-HTTP-Method-Override"):
+                intendedMethod = self.headers.getRawHeaders("X-HTTP-Method-Override")[0];
+                if intendedMethod:
+                    self.method = intendedMethod
+        
         # This is where CONNECT would go if we wanted it
         return None
     
@@ -321,7 +354,6 @@
         if newpath is StopTraversal:
             # We need to rethink how to do this.
             #if newres is res:
