cubicweb/etwist/request.py
changeset 11057 0b59724cb3f2
parent 10662 10942ed172de
child 11767 432f87a63057
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/etwist/request.py	Sat Jan 16 13:48:51 2016 +0100
@@ -0,0 +1,59 @@
+# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This file is part of CubicWeb.
+#
+# CubicWeb is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License along
+# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
+"""Twisted request handler for CubicWeb"""
+
+__docformat__ = "restructuredtext en"
+
+
+from cubicweb.web.request import CubicWebRequestBase
+
+
+class CubicWebTwistedRequestAdapter(CubicWebRequestBase):
+    """ from twisted .req to cubicweb .form
+    req.files are put into .form[<filefield>]
+    """
+    def __init__(self, req, vreg, https):
+        self._twreq = req
+        super(CubicWebTwistedRequestAdapter, self).__init__(
+            vreg, https, req.args, headers=req.received_headers)
+        for key, name_stream_list in req.files.items():
+            for name, stream in name_stream_list:
+                if name is not None:
+                    name = unicode(name, self.encoding)
+                self.form.setdefault(key, []).append((name, stream))
+            # 3.16.4 backward compat
+            if len(self.form[key]) == 1:
+                self.form[key] = self.form[key][0]
+        self.content = self._twreq.content # stream
+
+    def http_method(self):
+        """returns 'POST', 'GET', 'HEAD', etc."""
+        return self._twreq.method
+
+    def relative_path(self, includeparams=True):
+        """return the normalized path of the request (ie at least relative to
+        the instance's root, but some other normalization may be needed so that
+        the returned path may be used to compare to generated urls
+
+        :param includeparams:
+           boolean indicating if GET form parameters should be kept in the path
+        """
+        path = self._twreq.uri[1:] # remove the root '/'
+        if not includeparams:
+            path = path.split('?', 1)[0]
+        return path