root/trunk/bin/migratedata-dump-standalone

Revision 200, 2.2 kB (checked in by johnbywater, 1 year ago)

Added standalone migratedata-dump script for use when upgrading from legacy domainmodel application deployments.

  • Property svn:executable set to *
Line 
1 #!/usr/bin/env python
2
3 import optparse
4 import simplejson
5
6 class DumpData(object):
7
8     def __init__(self, domainRegistry):
9         self.assertIsDomainRegistry(domainRegistry)
10         self.domainRegistry = domainRegistry
11         self.jsonDataDump = ''
12         self.dataDump = None
13
14     def assertIsDomainRegistry(self, domainRegistry):
15         if not hasattr(domainRegistry, 'getDomainClassRegister'):
16             msg = "Domain registry has no 'getDomainClassRegister()' method."
17             raise Exception(msg)
18
19     def dumpData(self):
20         self.dataDump = {}
21         domainClassRegister = application.registry.getDomainClassRegister()
22         for className in domainClassRegister.keys():
23             classData = {}
24             domainClass = application.registry.getDomainClass(className)
25             # Dumping class meta data
26             metaClassData = {}
27             for attr in domainClass.meta.attributes:
28                 metaClassData[attr.name] = attr.typeName
29             classData['metaData'] = metaClassData
30             # Dumping class register objects
31             domainRegister = domainClass.createRegister()
32             for domainObject in domainRegister:
33                 domainObjectData = domainObject.asDictValues()
34                 # Dumping object data
35                 classData[domainObject.id] = domainObjectData
36             self.dataDump[className] = classData
37        
38     def dumpJsonData(self):
39         self.dumpData()
40         self.jsonDataDump = simplejson.dumps(self.dataDump)
41
42     def printData(self):
43         self.dumpJsonData()
44         print self.jsonDataDump
45
46 class SystemNameError(Exception): pass
47
48 if __name__ == '__main__':
49     optionParser = optparse.OptionParser()
50     optionParser.add_option(
51             '-s', '--system',
52             dest='system',
53             default='',
54             help='A name of a system'
55     )
56     (options, args) = optionParser.parse_args()
57     systemName = options.system
58     if not systemName:
59         raise SystemNameError(systemName)
60     else:
61         print "Importing %s.soleInstance" % systemName
62     soleInstance = __import__(systemName+'.soleInstance','','','*')
63     from soleInstance import application
64     dataDumper = DumpData(application.registry)
65     dataDumper.printData()
66
Note: See TracBrowser for help on using the browser.