source: mauRepo/MolesManager/trunk/cedaMoles/libs/migration/MigrationEPB.py @ 8554

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/mauRepo/MolesManager/trunk/cedaMoles/libs/migration/MigrationEPB.py@8554
Revision 8554, 4.5 KB checked in by mnagni, 7 years ago (diff)

Incomplete - # 22551: List resources / display single file
 http://team.ceda.ac.uk/trac/ceda/ticket/22551

Line 
1'''
2Created on 10 Jan 2012
3
4@author: mnagni
5'''
6from cedaMoles.libs.migration.db.classes import DeploymentDataMigration, \
7    DataEntityMigration, DeploymentsMigration
8from sqlalchemy.sql.expression import asc
9from cedaMoles.libs.epb import EPB
10from sqlalchemy.orm.collections import InstrumentedList
11
12
13class MigrationEPBFactory(EPB):
14   
15    def __init__(self, db_manager):
16        super(MigrationEPBFactory, self).__init__(db_manager)
17       
18    def createEPB(self):
19        return MigrationEPB(self._get_session())       
20       
21class MigrationEPB(object):
22           
23    def __init__(self, session):
24        self._session = session           
25
26    def close(self):
27        return self._session.close()
28           
29    def persistInstance(self, instance):
30        """
31            Adds a new migration object.
32           
33            **Parameters**
34                * instance: the instance to persist
35           
36            **Raise**
37                * Exception both `moles3EPB` and `cedaMoleObj` are `None`
38        """         
39        EPB.persistInstance(instance, self._session)
40
41    def getAllDeploymentsMigrationByDataEntitySortedByDate(self, dataEntity, 
42                                                           deploymentNames):
43        return EPB.getAllObjects(DeploymentsMigration, self._session).\
44            filter(DeploymentsMigration.doc_name.in_(deploymentNames)).\
45            order_by(asc("doc_creation")).all()
46
47    def _getMigrationObject(self, mo_type, doc_status, doc_owner, doc_name):
48        return self._session.query(mo_type).\
49            filter(*[EPB.buildFilter('doc_name', doc_name)]).first()
50
51    def _getMigrationObjectByName(self, mo_type, migration_object, doc_name):
52        return self._getMigrationObject(mo_type, migration_object.doc_status, 
53                                        migration_object.doc_owner, doc_name)             
54
55    def get_deployment_data_migration_by_name(self, migration_object, doc_name):
56        if migration_object is None:
57            raise Exception("migrationObject is None")
58        return self._getMigrationObjectByName(DeploymentDataMigration, 
59                                              migration_object, doc_name)
60
61    def getDataEntityMigrationbyPath(self, migration_object):
62        """
63            Returns the DataEntityMigration associated with the given path
64            @param migration_object: the migration object to look for.
65            If None returns all the DataEntityMigration items
66        """
67        ret = []
68        if migration_object:
69            ret.append(self._session.query(DataEntityMigration).\
70                       filter(*[EPB.buildFilter('doc_name', migration_object.doc_name)]).\
71                       first())               
72        else: #then process all the DataEntities
73            res = self._session.query(DataEntityMigration).all()
74            for item in res:
75                ret.append(item)             
76        return ret
77     
78    def updateMigrationObject(self, migration_object, cols_to_update):
79        """
80            Update and eventually commit a Migration Object in Migration db
81            @param ceda_object: the Migration object to persist
82            @param dict: a dictionary containing the columns to update for the given migration_object
83            @param session: the external session to use. If None a new session will be open to add and commit the object and then closed at the exit. The object is committed
84        """
85        coll = None
86        try:
87            coll = self._session.merge(migration_object)     
88        except Exception as e:
89            print e               
90        if coll != None:       
91            for k,v in cols_to_update.items():
92                if hasattr(coll, k):
93                    val = None
94                    try:
95                        val = self._session.merge(v)
96                    except Exception:
97                        val = v
98                    coll_k = getattr(coll, k)                       
99                    if type(coll_k) == list or type(coll_k) == InstrumentedList:
100                        if  type(val) == list or type(val) == InstrumentedList:
101                            coll_k.extend(val)
102                        else:
103                            coll_k.append(val)
104                    else:
105                        setattr(coll, k, val)
106        self._session.add(coll)
107        self._session.commit()                           
108
109    def search(self, clazz, inst_id):
110        if clazz is None or inst_id is None:
111            return None 
112        ret = EPB.search(clazz, inst_id, self._session)
113        return ret
Note: See TracBrowser for help on using the repository browser.