[Checkins] SVN: grokapps/rdbexample/trunk/src/rdbexample/app.py - Make contained items located

Jasper Spaans jspaans at thehealthagency.com
Sat May 3 10:36:08 EDT 2008


Log message for revision 86224:
  - Make contained items located
  - Use rdb.key directive
  - Check for KeyErrors in traversers
  

Changed:
  U   grokapps/rdbexample/trunk/src/rdbexample/app.py

-=-
Modified: grokapps/rdbexample/trunk/src/rdbexample/app.py
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/app.py	2008-05-03 14:36:04 UTC (rev 86223)
+++ grokapps/rdbexample/trunk/src/rdbexample/app.py	2008-05-03 14:36:07 UTC (rev 86224)
@@ -3,6 +3,8 @@
 
 from zope.interface.interfaces import IInterface
 
+from zope.location.location import located
+
 from sqlalchemy.schema import Column, ForeignKey
 from sqlalchemy.types import Integer, String
 from sqlalchemy.orm import relation
@@ -16,7 +18,9 @@
 class RDBExample(grok.Application, grok.Model):
     def traverse(self, name):
         try:
-            return rdb.query(Faculty).get(int(name))
+            return located(rdb.query(Faculty).get(int(name)), self, name)
+        except KeyError:
+            return None
         except ValueError:
             return None
 
@@ -27,19 +31,22 @@
     def render(self):
         result = ""
         for faculty in rdb.query(Faculty).all():
-            result += "%i - %s\n" % (faculty.id, faculty.title)
+            result += "%s - %s (%s)" % (faculty.id, faculty.title,
+                                        self.url(str(faculty.id)))
         return result
 
 
 class Departments(rdb.Container):
-    pass
+    rdb.key('title')
 
 
 class DepartmentTraverse(grok.Traverser):
     grok.context(Departments)
     def traverse(self, name):
         try:
-            return self.context[int(name)]
+            return located(self.context[int(name)], self.context, name)
+        except KeyError:
+            return None
         except ValueError:
             return None
 
@@ -66,7 +73,7 @@
 
     def traverse(self, name):
         if name == 'departments':
-            return self.context.departments
+            return located(self.context.departments, self.context, name)
 
 class Department(rdb.Model):
     __tablename__ = 'department'



More information about the Checkins mailing list