Changeset 293

Show
Ignore:
Timestamp:
01/27/08 00:32:14 (10 months ago)
Author:
johnbywater
Message:

Fixed object imports to be id-faithful.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/dm/migrate.py

    r268 r293  
    88import sys 
    99import simplejson 
     10 
     11# Todo: Support for merging data sets (id-fidelity is enforced now). 
     12# Todo: Add support for comments in plan files! 
    1013 
    1114class DomainModelDumper(object): 
     
    158161                objectIdInt = int(objectId) 
    159162                classData[objectIdInt] = objectData 
    160             #print "Iterating over %s %s" % (className, classData.keys()) 
    161             for objectId in classData.keys(): 
    162                 if objectId == 'metaData': 
    163                     continue 
     163            classDataKeys = classData.keys() 
     164            classDataKeys.remove('metaData') 
     165            classDataKeys.sort() 
     166            print "Iterating over %s %s" % (className, classDataKeys) 
     167            for objectId in classDataKeys: 
     168                #if objectId == 'metaData': 
     169                #    continue 
    164170                objectData = classData[objectId] 
    165171                #del(classData[objectId]) 
    166                 #msg = "Creating %s #%s from %s..." % ( 
    167                 #    className, objectId, objectData 
    168                 #
    169                 #print msg 
     172                msg = "Importing %s #%s using %s" % ( 
     173                    className, objectId, objectData 
     174               
     175                print msg 
    170176                strObjectData = {} 
    171177                for attr in domainClass.meta.attributes: 
     
    183189                                if idMapKey in self.idMap.keys(): 
    184190                                    mappedValue = self.idMap[idMapKey] 
    185                                     #msg = "Updating %s %s from %s to %s" % ( 
    186                                     #    className, 
    187                                     #    attr.name, 
    188                                     #    value, 
    189                                     #    mappedValue, 
    190                                     #) 
     191                                    msg = "Updating %s %s from %s to %s" % ( 
     192                                        className, 
     193                                        attr.name, 
     194                                        value, 
     195                                        mappedValue, 
     196                                    ) 
     197                                    print msg 
    191198                                    value = mappedValue 
    192199                            if value.__class__ == unicode: 
     
    201208                        manipulator.create(objectDict) 
    202209                        domainObject = manipulator.domainObject 
    203                         if domainObject and (domainObject.id > objectId): 
    204                             behindWithId = False 
    205                             msg = "Index (%s) ahead of old object id (%s)." % ( 
     210                        if not domainObject: 
     211                            raise Exception("Manipulator has no domain object.") 
     212                        print "Created %s" % domainObject 
     213                        if domainObject.id > objectId: 
     214                            msg = "Index id %s is ahead of import id %s." % ( 
    206215                                domainObject.id, objectId 
    207216                            ) 
    208                             # Todo: Strict mode, where ids must not change. 
    209                             #print "Warning: %s" % msg 
    210                         elif domainObject and (domainObject.id < objectId): 
    211                             #msg = "Skipping #%s to catch up with index." % ( 
    212                             #    domainObject.id 
    213                             #) 
    214                             #print msg 
     217                            print "Warning: %s" % msg 
     218                            raise Exception, msg 
     219                            behindWithId = False 
     220                        elif domainObject.id < objectId: 
     221                            msg = "Skipping #%s to catch up with index." % ( 
     222                                domainObject.id 
     223                            ) 
     224                            print msg 
    215225                            domainObject.delete() 
     226                            print "  -- deleted" 
    216227                            if hasattr(domainObject, 'purge'): 
    217228                                domainObject.purge() 
    218                         else: 
     229                                print "  -- purged" 
     230                        elif domainObject.id == objectId: 
     231                            #print "Perfect ID match!" 
    219232                            behindWithId = False 
    220233                    except Exception, inst: 
  • trunk/src/dm/migratetest.py

    r269 r293  
    4444class TestDomainModelLoader(TestCase): 
    4545 
     46    def clearFixtures(self): 
     47        for name in ['IdSacrifice', 'migrated', 'migrated23', 'migrated77']: 
     48            if name in self.registry.sessions: 
     49                del(self.registry.sessions[name]) 
     50        for name in ['IdSacrifice', 'migrated', 'migrated2']: 
     51            if name in self.registry.persons: 
     52                del(self.registry.persons[name]) 
     53 
    4654    def setUp(self): 
    4755        self.loader = DomainModelLoader() 
     56        self.clearFixtures() 
     57        self.lastPersonId = self.registry.persons.create("IdSacrifice").id 
     58        self.lastSessionId = self.registry.sessions.create("IdSacrifice").id 
    4859 
    4960    def tearDown(self): 
     61        self.clearFixtures() 
    5062        del(self.loader) 
    5163 
    5264    def testLoadDataAsJson(self): 
     65        # Persons 
     66        lastId = self.lastPersonId 
    5367        self.failIf('migrated' in self.registry.persons) 
    5468        self.failIf('migrated2' in self.registry.persons) 
     
    5670            "Person": { 
    5771                "metaData": {"name": "String"}, 
    58                 "1": {"name": "migrated"}, 
    59                 "2": {"name": "migrated2"} 
     72                "%s": {"name": "migrated"}, 
     73                "%s": {"name": "migrated2"} 
    6074            } 
    61         }"""
     75        }""" % (lastId+1, lastId+2)
    6276        self.failUnless('migrated' in self.registry.persons) 
    6377        self.failUnless('migrated2' in self.registry.persons) 
     
    6781        self.failIf('migrated2' in self.registry.persons) 
    6882 
     83        # Sessions 
     84        lastId = self.lastSessionId 
    6985        self.failIf('migrated' in self.registry.sessions) 
    7086        self.failIf('migrated23' in self.registry.sessions) 
     
    7288            "Session": { 
    7389                "metaData": {"key": "String"}, 
    74                 "1": {"key": "migrated"}, 
    75                 "23": {"key": "migrated23"} 
     90                "%s": {"key": "migrated"}, 
     91                "%s": {"key": "migrated23"} 
    7692            } 
    77         }"""
     93        }""" % (lastId+1, lastId+7)
    7894        self.failUnless('migrated' in self.registry.sessions) 
    7995        del(self.registry.sessions['migrated']) 
     
    85101 
    86102        forwardId = lastId + 5 
    87         sessionName = "migrated%s" % forwardId 
     103        sessionName = "migrated77" 
    88104        self.failIf(sessionName in self.registry.sessions) 
    89105        self.loader.loadDataAsJson(