[Repoze-dev] Repoze CVS: obob_helper.py

Chris McDonough chrism at agendaless.com
Thu Sep 13 00:58:07 UTC 2007


Update of /home/repoze/cvs/repoze.zope2/repoze/zope2
In directory laguna.palladion.com:/tmp/cvs-serv17270/repoze/zope2

Modified Files:
	obob_helper.py 
Log Message:
Add path_element method and tests.


Index: obob_helper.py
===================================================================
RCS file: /home/repoze/cvs/repoze.zope2/repoze/zope2/obob_helper.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- obob_helper.py	13 Sep 2007 00:07:46 -0000	1.3
+++ obob_helper.py	13 Sep 2007 00:58:05 -0000	1.4
@@ -1,3 +1,5 @@
+from paste import httpexceptions
+
 from zope.security.management import newInteraction
 from zope.security.management import endInteraction
 
@@ -74,12 +76,41 @@
         self.environ = environ
         self.config = config
         self.request = None
+        self.browser_path = None
 
     def setup(self):
         self.request = makeRequest(self.environ)
         newInteraction()
         self.request.processInputs()
 
+    def teardown(self):
+        endInteraction()
+
+    def path_elements(self, path):
+        # remember path for later use
+        self.browser_path = path
+
+        # Clean up the path list
+        if path.startswith('/'):
+            path=path[1:]
+        if path.endswith('/'):
+            path=path[:-1]
+
+        clean = []
+
+        for item in path.split('/'):
+            # Make sure that certain things that dont make sense
+            # cannot be traversed.
+            if item in ('REQUEST', 'aq_self', 'aq_base'):
+                raise httpexceptions.HTTPNotFound(path)
+            if not item or item=='.':
+                continue
+            elif item == '..':
+                del clean[-1]
+            else: clean.append(item)
+
+        return clean
+
     def invoke(self, published):
         return mapply(published,
                       positional = self.request.args,
@@ -91,9 +122,6 @@
                       context = self.request,
                       bind=1)
 
-    def teardown(self):
-        endInteraction()
-
     def before_traverse(self, current, name):
         # XXX implement
         pass

_______________________________________________
Repoze-dev mailing list
Repoze-dev at lists.repoze.org
http://lists.repoze.org/mailman/listinfo/repoze-dev



More information about the Repoze-dev mailing list