source: mauRepo/MolesManager/trunk/src/libs/migration/processor/loadResources.py @ 8091

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/mauRepo/MolesManager/trunk/src/libs/migration/processor/loadResources.py@8091
Revision 8091, 6.9 KB checked in by mnagni, 8 years ago (diff)

The migration process now includes
1) deployment_data files
2) XML document hash
3) full Dojo support


Line 
1'''
2Created on 15 Nov 2011
3
4@author: mnagni
5'''
6from libs.migration.processor.commons import docStatus, getCollectionRefs,\
7    findMolesCreationDate, findID, stringToTimestamp, buildExistTypePath,\
8    buildExistDocPath, DT_DATA_ENTITIES, DT_DEPLOYMENTS, DT_DEPLOYMENT_DATA,\
9    getOwnerRefs, getAtomDocumentAsElementtree, getAtomDocumentHash
10from libs.migration.exception.exceptions import NoCreationDate
11from libs.migration.db.classes import DeploymentDataMigration,\
12    DeploymentsMigration, DataEntityMigration
13from libs.migration.MigrationEPB import MigrationEPB
14
15class LoadResources(object):
16    """
17     Loads informations from the eXist database to populate reference table for the migrations
18    """
19    def __init__(self):
20        self._migrationSession = MigrationEPB.getNewMigrationSession()
21           
22    def _loadDataEntities(self, docStatus):
23        self._loadCollections(docStatus, DT_DATA_ENTITIES, self._loadDataEntityDocs)       
24
25    def _loadDeployments(self, docStatus):
26        self._loadCollections(docStatus, DT_DEPLOYMENTS, self._loadDeploymentsDocs)       
27
28    def _loadDeploymentData(self, docStatus):
29        self._loadCollections(docStatus, DT_DEPLOYMENT_DATA, self._loadDeploymentDataDocs)           
30
31    def _loadCollections(self, docStatus, docType, processor):
32        refs = getCollectionRefs(buildExistTypePath(docStatus, docType))       
33        for ref in refs:
34            docOwner = ref.get('name') 
35            if docOwner.startswith('.'):
36                continue                       
37            processor(docStatus, docOwner)           
38           
39    def _loadDeploymentsDocs(self, docStatus, docOwner):
40        refs = getOwnerRefs(docStatus, DT_DEPLOYMENTS, docOwner)         
41        for ref in refs:
42            docName = ref.get('name')
43            xmlDocument = getAtomDocumentAsElementtree(docStatus, DT_DEPLOYMENTS, docOwner, docName)
44            #docHash = getAtomDocumentHash(docStatus, DT_DEPLOYMENTS, docOwner, docName)           
45           
46            try:
47                doc_creation = self._extractCreationDate(xmlDocument)
48            except NoCreationDate as ex:
49                print ex
50                continue
51           
52            doc_id = findID(xmlDocument) 
53            if doc_id is None:
54                print (buildExistDocPath(docStatus, DT_DEPLOYMENTS, docOwner, docName))
55
56            add = False
57            coll = MigrationEPB.search(DeploymentsMigration, doc_id, self._migrationSession)
58            if coll is None:               
59                coll = DeploymentsMigration()
60                coll.depl_id = doc_id
61                add = True
62               
63            #If exist and has the same hash nothing has changed
64            #if coll.doc_hash == docHash:
65            #    continue
66           
67            #coll.doc_hash = docHash           
68            coll.doc_name = docName
69            coll.doc_owner = docOwner
70            coll.doc_status = docStatus           
71            coll.doc_creation = stringToTimestamp(doc_creation)
72           
73            if add:
74                MigrationEPB.addMigration(coll, self._migrationSession)
75               
76            self._migrationSession.commit()
77           
78    def _loadDataEntityDocs(self, docStatus, docOwner):
79        refs = getOwnerRefs(docStatus, DT_DATA_ENTITIES, docOwner) 
80        for ref in refs:
81            docName = ref.get('name')
82            xmlDocument = getAtomDocumentAsElementtree(docStatus, DT_DATA_ENTITIES, docOwner, docName)
83            #docHash = getAtomDocumentHash(docStatus, DT_DATA_ENTITIES, docOwner, docName) 
84           
85            try:
86                doc_creation = self._extractCreationDate(xmlDocument)           
87            except NoCreationDate as ex:
88                print ex
89                continue
90           
91            doc_id = findID(xmlDocument)
92            if doc_id is None:
93                print (buildExistDocPath(docStatus, DT_DEPLOYMENTS, docOwner, docName))
94
95                     
96            add = False
97            coll = MigrationEPB.search(DataEntityMigration, doc_id, self._migrationSession)
98            if coll is None:               
99                coll = DataEntityMigration()
100                coll.data_ent_id = doc_id
101                add = True
102           
103            #If exist and has the same hash nothing has changed
104            #if coll.doc_hash == docHash:
105            #    continue
106           
107            #coll.doc_hash = docHash
108            coll.doc_name = docName 
109            coll.doc_owner = docOwner     
110            coll.doc_status = docStatus
111            coll.doc_creation = stringToTimestamp(doc_creation) 
112            if add:
113                MigrationEPB.addMigration(coll, self._migrationSession)
114            self._migrationSession.commit()
115
116    def _loadDeploymentDataDocs(self, docStatus, docOwner):
117        refs = getOwnerRefs(docStatus, DT_DEPLOYMENT_DATA, docOwner)
118        for ref in refs:
119            docName = ref.get('name')
120            xmlDocument = getAtomDocumentAsElementtree(docStatus, DT_DEPLOYMENT_DATA, docOwner, docName)
121            #docHash = getAtomDocumentHash(docStatus, DT_DEPLOYMENT_DATA, docOwner, docName)                     
122
123            try:
124                doc_creation = self._extractCreationDate(xmlDocument)           
125            except NoCreationDate as ex:
126                print ex
127                continue
128           
129            doc_id = findID(xmlDocument)
130            if doc_id is None:
131                print (buildExistDocPath(docStatus, DT_DEPLOYMENT_DATA, docOwner, docName))
132
133            add = False
134            coll = MigrationEPB.search(DeploymentDataMigration, doc_id, self._migrationSession)
135            if coll is None:               
136                coll = DeploymentDataMigration()
137                coll.deployment_data_id = doc_id
138                add = True
139           
140            #If exist and has the same hash nothing has changed
141            #if coll.doc_hash == docHash:
142            #    continue
143           
144            #coll.doc_hash = docHash
145            coll.doc_name = docName 
146            coll.doc_owner = docOwner                     
147            coll.doc_status = docStatus           
148            coll.doc_creation = stringToTimestamp(doc_creation) 
149            if add:
150                MigrationEPB.addMigration(coll, self._migrationSession)
151            self._migrationSession.commit()
152
153    def _extractCreationDate(self, xmlDocument):
154        creationDate = findMolesCreationDate(xmlDocument)           
155        if creationDate is None:
156            raise NoCreationDate(creationDate)
157        return creationDate
158           
159    def process(self):
160        """
161            Loads all the folders below the atoms ('published', 'working', 'Published') folders
162        """
163       
164        for status in docStatus:             
165            self._loadDataEntities(status)           
166            self._loadDeployments(status)
167            self._loadDeploymentData(status)           
168        self._migrationSession.close()
169       
Note: See TracBrowser for help on using the repository browser.