diff roundup/backends/back_metakit.py @ 1484:b3f2484babce

fixes to import/export
author Richard Jones <richard@users.sourceforge.net>
date Fri, 28 Feb 2003 03:33:46 +0000
parents 5a01e90b7dc9
children e6ac4e074acb
line wrap: on
line diff
--- a/roundup/backends/back_metakit.py	Fri Feb 28 03:33:25 2003 +0000
+++ b/roundup/backends/back_metakit.py	Fri Feb 28 03:33:46 2003 +0000
@@ -610,7 +610,7 @@
                 try:
                     v = int(value)
                 except ValueError:
-                    raise TypeError, "%s (%s) is not numeric" % (key, repr(value))
+                    raise TypeError, "%s (%s) is not numeric"%(key, repr(value))
                 setattr(row, key, v)
                 changes[key] = oldvalue
                 propvalues[key] = value
@@ -619,7 +619,7 @@
                 if value is None:
                     bv = 0
                 elif value not in (0,1):
-                    raise TypeError, "%s (%s) is not boolean" % (key, repr(value))
+                    raise TypeError, "%s (%s) is not boolean"%(key, repr(value))
                 else:
                     bv = value 
                 setattr(row, key, bv)
@@ -818,6 +818,12 @@
             l.append(str(row.id))
         return l
 
+    def getnodeids(self):
+        l = []
+        for row in self.getview():
+            l.append(str(row.id))
+        return l
+
     def count(self):
         return len(self.getview())
 
@@ -1098,11 +1104,12 @@
         view = self.getview(1)
         for i in range(len(propnames)):
             value = eval(proplist[i])
+            if not value:
+                continue
             propname = propnames[i]
             prop = properties[propname]
             if propname == 'id':
-                newid = value
-                value = int(value)
+                newid = value = int(value)
             elif isinstance(prop, hyperdb.Date):
                 value = int(calendar.timegm(value))
             elif isinstance(prop, hyperdb.Interval):
@@ -1111,20 +1118,33 @@
                 value = int(value)
             elif isinstance(prop, hyperdb.Boolean):
                 value = int(value)
-            elif isinstance(prop, hyperdb.Link):
+            elif isinstance(prop, hyperdb.Link) and value:
                 value = int(value)
             elif isinstance(prop, hyperdb.Multilink):
-                value = map(int, value)
+                # we handle multilinks separately
+                continue
             d[propname] = value
         # is the item retired?
         if int(proplist[-1]):
             d['_isdel'] = 1
-        # XXX this is BROKEN for reasons I don't understand!
-        ndx = view.append(d)
+        view.append(d)
 
+        ndx = view.find(id=newid)
+        row = view[ndx]
+        for i in range(len(propnames)):
+            value = eval(proplist[i])
+            propname = propnames[i]
+            prop = properties[propname]
+            if not isinstance(prop, hyperdb.Multilink):
+                continue
+            sv = getattr(row, propname)
+            for entry in value:
+                sv.append(int(entry))
+
+        self.db.dirty = 1
         creator = d.get('creator', 0)
         creation = d.get('creation', 0)
-        self.db.addjournal(self.classname, newid, _CREATE, {}, creator,
+        self.db.addjournal(self.classname, str(newid), _CREATE, {}, creator,
             creation)
         return newid
 

Roundup Issue Tracker: http://roundup-tracker.org/