Code

Handles new node display now.
[roundup.git] / roundup / hyperdb.py
index 4c13318efb13dac271743e2cf371d39f3c1874b6..252194c0c93636a041f3a316d733841848c0f9a8 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: hyperdb.py,v 1.5 2001-07-29 04:05:37 richard Exp $
+# $Id: hyperdb.py,v 1.9 2001-07-29 09:28:23 richard Exp $
 
 # standard python modules
 import cPickle, re, string
@@ -387,6 +387,28 @@ class Class:
         """Return the name of the key property for this class or None."""
         return self.key
 
+    def labelprop(self):
+        ''' Return the property name for a label for the given node.
+
+        This method attempts to generate a consistent label for the node.
+        It tries the following in order:
+            1. key property
+            2. "name" property
+            3. "title" property
+            4. first property from the sorted property name list
+        '''
+        k = self.getkey()
+        if  k:
+            return k
+        props = self.getprops()
+        if props.has_key('name'):
+            return 'name'
+        elif props.has_key('title'):
+            return 'title'
+        props = props.keys()
+        props.sort()
+        return props[0]
+
     # TODO: set up a separate index db file for this? profile?
     def lookup(self, keyvalue):
         """Locate a particular node by its key property and return its id.
@@ -529,7 +551,6 @@ class Class:
                     u.append(entry)
                 l.append((1, k, u))
             elif propclass.isStringType:
-                v = v[0]
                 if '*' in v or '?' in v:
                     # simple glob searching
                     v = v.replace('?', '.')
@@ -612,7 +633,6 @@ class Class:
             else:
                 m.append((entry[0], entry[1:]))
         group = m
-
         # now, sort the result
         def sortfun(a, b, sort=sort, group=group, properties=self.getprops(),
                 db = self.db, cl=self):
@@ -653,6 +673,9 @@ class Class:
                     # nodes; or finally on  the node ids.
                     elif propclass.isLinkType:
                         link = db.classes[propclass.classname]
+                        if av is None and bv is not None: return -1
+                        if av is not None and bv is None: return 1
+                        if av is None and bv is None: return 0
                         if link.getprops().has_key('order'):
                             if dir == '+':
                                 r = cmp(link.get(av, 'order'),
@@ -767,6 +790,19 @@ def Choice(name, *options):
 
 #
 # $Log: not supported by cvs2svn $
+# Revision 1.8  2001/07/29 08:27:40  richard
+# Fixed handling of passed-in values in form elements (ie. during a
+# drill-down)
+#
+# Revision 1.7  2001/07/29 07:01:39  richard
+# Added vim command to all source so that we don't get no steenkin' tabs :)
+#
+# Revision 1.6  2001/07/29 05:36:14  richard
+# Cleanup of the link label generation.
+#
+# Revision 1.5  2001/07/29 04:05:37  richard
+# Added the fabricated property "id".
+#
 # Revision 1.4  2001/07/27 06:25:35  richard
 # Fixed some of the exceptions so they're the right type.
 # Removed the str()-ification of node ids so we don't mask oopsy errors any
@@ -781,3 +817,5 @@ def Choice(name, *options):
 # Revision 1.1  2001/07/22 11:58:35  richard
 # More Grande Splite
 #
+#
+# vim: set filetype=python ts=4 sw=4 et si