diff --git a/src/python/dm/cat_web_service/api/fileRestApi.py b/src/python/dm/cat_web_service/api/fileRestApi.py index 6ba48a61fa348ec4343208edd725f75da319a047..ea9f62310ed4ac344d6b2aeedf0b97de2b256155 100755 --- a/src/python/dm/cat_web_service/api/fileRestApi.py +++ b/src/python/dm/cat_web_service/api/fileRestApi.py @@ -20,12 +20,12 @@ class FileRestApi(CatRestApi): experimentName = fileInfo.get('experimentName') if not experimentName: raise InvalidRequest('File metadata must contain experimentName key.') - fileName = fileInfo.get('name') + fileName = fileInfo.get('fileName') if not fileName: - raise InvalidRequest('File metadata must contain name key.') + raise InvalidRequest('File metadata must contain fileName key.') url = '%s/filesByExperiment/%s/%s' % (self.getContextRoot(), experimentName, fileName) url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo))) - responseData = self.sendRequest(url=url, method='POST') + responseData = self.sendSessionRequest(url=url, method='POST') return FileMetadata(responseData) @CatRestApi.execute @@ -33,12 +33,12 @@ class FileRestApi(CatRestApi): experimentName = fileInfo.get('experimentName') if not experimentName: raise InvalidRequest('File metadata must contain experimentName key.') - fileName = fileInfo.get('name') + fileName = fileInfo.get('fileName') if not fileName: - raise InvalidRequest('File metadata must contain name key.') + raise InvalidRequest('File metadata must contain fileName key.') url = '%s/filesByExperiment/%s/%s' % (self.getContextRoot(), experimentName, fileName) url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo))) - responseData = self.sendRequest(url=url, method='PUT') + responseData = self.sendSessionRequest(url=url, method='PUT') return FileMetadata(responseData) @CatRestApi.execute @@ -48,14 +48,14 @@ class FileRestApi(CatRestApi): raise InvalidRequest('File metadata must contain id key.') url = '%s/files/%s' % (self.getContextRoot(), id) url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo))) - responseData = self.sendRequest(url=url, method='PUT') + responseData = self.sendSessionRequest(url=url, method='PUT') return FileMetadata(responseData) @CatRestApi.execute def getFiles(self, queryDict={}): url = '%s/files' % (self.getContextRoot()) url += '?queryDict=%s' % (Encoder.encode(json.dumps(queryDict))) - responseData = self.sendRequest(url=url, method='GET') + responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, FileMetadata) @CatRestApi.execute @@ -64,7 +64,7 @@ class FileRestApi(CatRestApi): raise InvalidRequest('Invalid experiment name provided.') url = '%s/filesByExperiment/%s' % (self.getContextRoot(), experimentName) url += '?queryDict=%s' % (Encoder.encode(json.dumps(queryDict))) - responseData = self.sendRequest(url=url, method='GET') + responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, FileMetadata) @CatRestApi.execute @@ -72,7 +72,7 @@ class FileRestApi(CatRestApi): if not id: raise InvalidRequest('Invalid file id provided.') url = '%s/files/%s' % (self.getContextRoot(), id) - responseData = self.sendRequest(url=url, method='GET') + responseData = self.sendSessionRequest(url=url, method='GET') return FileMetadata(responseData) @CatRestApi.execute @@ -82,7 +82,7 @@ class FileRestApi(CatRestApi): if not fileName: raise InvalidRequest('Invalid file name provided.') url = '%s/filesByExperiment/%s/%s' % (self.getContextRoot(), experimentName, fileName) - responseData = self.sendRequest(url=url, method='GET') + responseData = self.sendSessionRequest(url=url, method='GET') return FileMetadata(responseData) ####################################################################### @@ -97,7 +97,7 @@ if __name__ == '__main__': import time t = long(time.time()) fileInfo = { - 'name' : 'sv-%s' % t, + 'fileName' : 'sv-%s' % t, 'experimentName' : 'exp1', 'power' : 12, 'powerUnits' : 'kW', diff --git a/src/python/dm/cat_web_service/cli/addExperimentFileCli.py b/src/python/dm/cat_web_service/cli/addExperimentFileCli.py index 4e7c1f86646f8b03ce213e76d35e43e3bf528746..942b05d0e0049f84007df77a91f3e1166e179f11 100755 --- a/src/python/dm/cat_web_service/cli/addExperimentFileCli.py +++ b/src/python/dm/cat_web_service/cli/addExperimentFileCli.py @@ -7,7 +7,7 @@ from catWebServiceSessionCli import CatWebServiceSessionCli class AddExperimentFileCli(CatWebServiceSessionCli): def __init__(self): CatWebServiceSessionCli.__init__(self, validArgCount=self.ANY_NUMBER_OF_POSITIONAL_ARGS) - self.addOption('', '--name', dest='fileName', help='File name.') + self.addOption('', '--file', dest='fileName', help='File name.') self.addOption('', '--experiment', dest='experimentName', help='Experiment name.') def checkArgs(self): @@ -24,7 +24,7 @@ class AddExperimentFileCli(CatWebServiceSessionCli): def runCommand(self): self.parseArgs(usage=""" - dm-add-experiment-file --name=FILENAME --experiment=EXPERIMENTNAME + dm-add-experiment-file --file=FILENAME --experiment=EXPERIMENTNAME [key1:value1, key2:value2, ...] Description: @@ -35,7 +35,7 @@ Description: api = FileRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol()) fileInfo = self.splitArgsIntoDict() fileInfo['experimentName'] = self.getExperimentName() - fileInfo['name'] = self.getFileName() + fileInfo['fileName'] = self.getFileName() fileMetadata = api.addExperimentFile(fileInfo) print fileMetadata.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat()) diff --git a/src/python/dm/cat_web_service/cli/getExperimentFileCli.py b/src/python/dm/cat_web_service/cli/getExperimentFileCli.py index a397feb5d3970c9a2a4fd06a0dbe21507a6710d7..865d16b98bfec915dd191f65c07109a8684071c3 100755 --- a/src/python/dm/cat_web_service/cli/getExperimentFileCli.py +++ b/src/python/dm/cat_web_service/cli/getExperimentFileCli.py @@ -7,7 +7,7 @@ from catWebServiceSessionCli import CatWebServiceSessionCli class GetExperimentFileCli(CatWebServiceSessionCli): def __init__(self): CatWebServiceSessionCli.__init__(self, validArgCount=self.ANY_NUMBER_OF_POSITIONAL_ARGS) - self.addOption('', '--name', dest='fileName', help='File name.') + self.addOption('', '--file', dest='fileName', help='File name.') self.addOption('', '--experiment', dest='experimentName', help='Experiment name.') def checkArgs(self): @@ -24,7 +24,7 @@ class GetExperimentFileCli(CatWebServiceSessionCli): def runCommand(self): self.parseArgs(usage=""" - dm-get-experiment-file --name=FILENAME --experiment=EXPERIMENTNAME + dm-get-experiment-file --file=FILENAME --experiment=EXPERIMENTNAME Description: Retrieve experiment file metadata from the catalog. diff --git a/src/python/dm/cat_web_service/cli/updateExperimentFileCli.py b/src/python/dm/cat_web_service/cli/updateExperimentFileCli.py index d5bfa2f3ae099862283015b3861aa89780e88913..341ae981071775f6fe3b0393fdbb1cfa91d01fa2 100755 --- a/src/python/dm/cat_web_service/cli/updateExperimentFileCli.py +++ b/src/python/dm/cat_web_service/cli/updateExperimentFileCli.py @@ -7,7 +7,7 @@ from catWebServiceSessionCli import CatWebServiceSessionCli class UpdateExperimentFileCli(CatWebServiceSessionCli): def __init__(self): CatWebServiceSessionCli.__init__(self, validArgCount=self.ANY_NUMBER_OF_POSITIONAL_ARGS) - self.addOption('', '--name', dest='fileName', help='File name.') + self.addOption('', '--file', dest='fileName', help='File name.') self.addOption('', '--experiment', dest='experimentName', help='Experiment name.') def checkArgs(self): @@ -24,7 +24,7 @@ class UpdateExperimentFileCli(CatWebServiceSessionCli): def runCommand(self): self.parseArgs(usage=""" - dm-update-experiment-file --name=FILENAME --experiment=EXPERIMENTNAME + dm-update-experiment-file --file=FILENAME --experiment=EXPERIMENTNAME [key1:value1, key2:value2, ...] Description: @@ -37,7 +37,7 @@ Description: api = FileRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol()) fileInfo = self.splitArgsIntoDict() fileInfo['experimentName'] = self.getExperimentName() - fileInfo['name'] = self.getFileName() + fileInfo['fileName'] = self.getFileName() fileMetadata = api.updateExperimentFile(fileInfo) print fileMetadata.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat()) diff --git a/src/python/dm/cat_web_service/service/catWebServiceRouteMapper.py b/src/python/dm/cat_web_service/service/catWebServiceRouteMapper.py index f84f2e4972a87dbadf50c3ede29fa53448857607..32fe1568efbc3c3227b8718972a7f1fdb7f1ffde 100755 --- a/src/python/dm/cat_web_service/service/catWebServiceRouteMapper.py +++ b/src/python/dm/cat_web_service/service/catWebServiceRouteMapper.py @@ -12,6 +12,7 @@ from dm.common.utility.loggingManager import LoggingManager from dm.common.utility.configurationManager import ConfigurationManager from dm.common.service.loginRouteDescriptor import LoginRouteDescriptor from fileRouteDescriptor import FileRouteDescriptor +from datasetRouteDescriptor import DatasetRouteDescriptor class CatWebServiceRouteMapper: @@ -25,6 +26,7 @@ class CatWebServiceRouteMapper: # Get routes. routes = LoginRouteDescriptor.getRoutes() routes += FileRouteDescriptor.getRoutes() + routes += DatasetRouteDescriptor.getRoutes() # Add routes to dispatcher. d = cherrypy.dispatch.RoutesDispatcher() diff --git a/src/python/dm/cat_web_service/service/fileRouteDescriptor.py b/src/python/dm/cat_web_service/service/fileRouteDescriptor.py index 5f5f4bd9d5d65d942aca08ef7a02a708dd18d87b..700a8df8459d6fa81fd9d30bd2d794ffa9fe0c21 100755 --- a/src/python/dm/cat_web_service/service/fileRouteDescriptor.py +++ b/src/python/dm/cat_web_service/service/fileRouteDescriptor.py @@ -1,11 +1,11 @@ #!/usr/bin/env python # -# User route descriptor. +# File route descriptor. # from dm.common.utility.configurationManager import ConfigurationManager -from fileController import FileController +from fileSessionController import FileSessionController class FileRouteDescriptor: @@ -14,7 +14,7 @@ class FileRouteDescriptor: contextRoot = ConfigurationManager.getInstance().getContextRoot() # Static instances shared between different routes - fileController = FileController() + fileSessionController = FileSessionController() # Define routes. routes = [ @@ -23,7 +23,7 @@ class FileRouteDescriptor: { 'name' : 'addExperimentFile', 'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot, - 'controller' : fileController, + 'controller' : fileSessionController, 'action' : 'addExperimentFile', 'method' : ['POST'] }, @@ -32,7 +32,7 @@ class FileRouteDescriptor: { 'name' : 'updateFileById', 'path' : '%s/files/:(id)' % contextRoot, - 'controller' : fileController, + 'controller' : fileSessionController, 'action' : 'updateFileById', 'method' : ['PUT'] }, @@ -41,7 +41,7 @@ class FileRouteDescriptor: { 'name' : 'updateExperimentFile', 'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot, - 'controller' : fileController, + 'controller' : fileSessionController, 'action' : 'updateExperimentFile', 'method' : ['PUT'] }, @@ -50,7 +50,7 @@ class FileRouteDescriptor: { 'name' : 'getFiles', 'path' : '%s/files' % contextRoot, - 'controller' : fileController, + 'controller' : fileSessionController, 'action' : 'getFiles', 'method' : ['GET'] }, @@ -59,7 +59,7 @@ class FileRouteDescriptor: { 'name' : 'getExperimentFiles', 'path' : '%s/filesByExperiment/:(experimentName)' % contextRoot, - 'controller' : fileController, + 'controller' : fileSessionController, 'action' : 'getExperimentFiles', 'method' : ['GET'] }, @@ -68,7 +68,7 @@ class FileRouteDescriptor: { 'name' : 'getFileById', 'path' : '%s/files/:(id)' % contextRoot, - 'controller' : fileController, + 'controller' : fileSessionController, 'action' : 'getFileById', 'method' : ['GET'] }, @@ -77,7 +77,7 @@ class FileRouteDescriptor: { 'name' : 'getExperimentFile', 'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot, - 'controller' : fileController, + 'controller' : fileSessionController, 'action' : 'getExperimentFile', 'method' : ['GET'] }, diff --git a/src/python/dm/cat_web_service/service/fileController.py b/src/python/dm/cat_web_service/service/fileSessionController.py similarity index 62% rename from src/python/dm/cat_web_service/service/fileController.py rename to src/python/dm/cat_web_service/service/fileSessionController.py index f1a6f43b73c51d1e02bf9e17e714a5ac0062b015..f2ff6b8bcb2f3a0c5b2ce13a825dad7976f45b59 100755 --- a/src/python/dm/cat_web_service/service/fileController.py +++ b/src/python/dm/cat_web_service/service/fileSessionController.py @@ -3,17 +3,18 @@ import cherrypy import json from dm.common.utility.encoder import Encoder -from dm.common.service.dmController import DmController -from dm.cat_web_service.service.impl.fileControllerImpl import FileControllerImpl +from dm.common.service.dmSessionController import DmSessionController +from dm.cat_web_service.service.impl.fileSessionControllerImpl import FileSessionControllerImpl -class FileController(DmController): +class FileSessionController(DmSessionController): def __init__(self): - DmController.__init__(self) - self.fileControllerImpl = FileControllerImpl() + DmSessionController.__init__(self) + self.fileSessionControllerImpl = FileSessionControllerImpl() @cherrypy.expose - @DmController.execute + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute def addExperimentFile(self, experimentName, fileName, **kwargs): if not experimentName: raise InvalidRequest('Invalid experiment name provided.') @@ -23,14 +24,15 @@ class FileController(DmController): if not encodedFileInfo: raise InvalidRequest('Invalid file info provided.') fileInfo = json.loads(Encoder.decode(encodedFileInfo)) - fileInfo['name'] = fileName + fileInfo['fileName'] = fileName fileInfo['experimentName'] = experimentName - response = self.fileControllerImpl.addExperimentFile(fileInfo).getFullJsonRep() + response = self.fileSessionControllerImpl.addExperimentFile(fileInfo).getFullJsonRep() self.logger.debug('Added file %s: %s' % (fileName,response)) return response @cherrypy.expose - @DmController.execute + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute def updateExperimentFile(self, experimentName, fileName, **kwargs): if not experimentName: raise InvalidRequest('Invalid experiment name provided.') @@ -40,14 +42,15 @@ class FileController(DmController): if not encodedFileInfo: raise InvalidRequest('Invalid file info provided.') fileInfo = json.loads(Encoder.decode(encodedFileInfo)) - fileInfo['name'] = fileName + fileInfo['fileName'] = fileName fileInfo['experimentName'] = experimentName - response = self.fileControllerImpl.updateExperimentFile(fileInfo).getFullJsonRep() + response = self.fileSessionControllerImpl.updateExperimentFile(fileInfo).getFullJsonRep() self.logger.debug('Updated file %s: %s' % (fileName,response)) return response @cherrypy.expose - @DmController.execute + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute def updateFileById(self, id, **kwargs): if not id: raise InvalidRequest('Invalid file id provided.') @@ -55,21 +58,23 @@ class FileController(DmController): if not encodedFileInfo: raise InvalidRequest('Invalid file info provided.') fileInfo = json.loads(Encoder.decode(encodedFileInfo)) - response = self.fileControllerImpl.updateFileById(fileInfo).getFullJsonRep() + response = self.fileSessionControllerImpl.updateFileById(fileInfo).getFullJsonRep() self.logger.debug('Updated file id %s: %s' % (id,response)) return response @cherrypy.expose - @DmController.execute + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute def getFiles(self, **kwargs): encodedQueryDict = kwargs.get('queryDict') queryDict = {} if encodedQueryDict: queryDict = json.loads(Encoder.decode(encodedQueryDict)) - return self.listToJson(self.fileControllerImpl.getFiles(queryDict=queryDict)) + return self.listToJson(self.fileSessionControllerImpl.getFiles(queryDict=queryDict)) @cherrypy.expose - @DmController.execute + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute def getExperimentFiles(self, experimentName, **kwargs): if not experimentName: raise InvalidRequest('Invalid experiment name provided.') @@ -77,25 +82,27 @@ class FileController(DmController): queryDict = {} if encodedQueryDict: queryDict = json.loads(Encoder.decode(encodedQueryDict)) - return self.listToJson(self.fileControllerImpl.getExperimentFiles(experimentName, queryDict=queryDict)) + return self.listToJson(self.fileSessionControllerImpl.getExperimentFiles(experimentName, queryDict=queryDict)) @cherrypy.expose - @DmController.execute + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute def getFileById(self, id, **kwargs): if not id: raise InvalidRequest('Invalid id provided.') - response = self.fileControllerImpl.getFileById(id).getFullJsonRep() + response = self.fileSessionControllerImpl.getFileById(id).getFullJsonRep() self.logger.debug('Returning file id %s: %s' % (id,response)) return response @cherrypy.expose - @DmController.execute + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute def getExperimentFile(self, experimentName, fileName, **kwargs): if not experimentName: raise InvalidRequest('Invalid experiment name provided.') if not fileName: raise InvalidRequest('Invalid file name provided.') - response = self.fileControllerImpl.getExperimentFile(experimentName, fileName).getFullJsonRep() + response = self.fileSessionControllerImpl.getExperimentFile(experimentName, fileName).getFullJsonRep() self.logger.debug('Returning file %s: %s' % (fileName,response)) return response diff --git a/src/python/dm/cat_web_service/service/impl/fileControllerImpl.py b/src/python/dm/cat_web_service/service/impl/fileSessionControllerImpl.py similarity index 96% rename from src/python/dm/cat_web_service/service/impl/fileControllerImpl.py rename to src/python/dm/cat_web_service/service/impl/fileSessionControllerImpl.py index 3ce0413206c82b8f3a06c0955a5bc4dbaca94085..8cae782911aa15d95bda91e14abfde772c1e82f3 100755 --- a/src/python/dm/cat_web_service/service/impl/fileControllerImpl.py +++ b/src/python/dm/cat_web_service/service/impl/fileSessionControllerImpl.py @@ -8,7 +8,7 @@ from dm.common.objects.dmObject import DmObject from dm.common.objects.dmObjectManager import DmObjectManager from dm.common.mongodb.api.fileMongoDbApi import FileMongoDbApi -class FileControllerImpl(DmObjectManager): +class FileSessionControllerImpl(DmObjectManager): """ File controller implementation class. """ def __init__(self): diff --git a/src/python/dm/common/mongodb/api/dmMongoDbApi.py b/src/python/dm/common/mongodb/api/dmMongoDbApi.py index 6d9f79961d1a6b0587ff126b309138cce5f2023b..b58d23deffb212ddde2cdade8c90c27efa5e0e2f 100755 --- a/src/python/dm/common/mongodb/api/dmMongoDbApi.py +++ b/src/python/dm/common/mongodb/api/dmMongoDbApi.py @@ -1,11 +1,15 @@ #!/usr/bin/env python +import copy from dm.common.exceptions.dmException import DmException from dm.common.utility.loggingManager import LoggingManager from dm.common.mongodb.impl.mongoDbManager import MongoDbManager class DmMongoDbApi: """ Base Mongo DB API class. """ + + SYSTEM_KEY_LIST = ['_id'] + def __init__(self): self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) self.dbClient = MongoDbManager.getInstance().getDbClient() @@ -46,13 +50,28 @@ class DmMongoDbApi: @classmethod def scrubMongoDbObject(cls, mongoDbObject): - for key in ['_id']: + for key in cls.SYSTEM_KEY_LIST: if mongoDbObject.has_key(key): # Remove leading underscore newKey = key[1:] mongoDbObject[newKey] = str(mongoDbObject[key]) del mongoDbObject[key] + @classmethod + def getMongoDict(cls, dict): + mongoDict = copy.copy(dict) + for key in cls.SYSTEM_KEY_LIST: + # if dictionary has system key, do not modify it + if mongoDict.has_key(key): + continue + # If provided dict has system key without leading underscore + # modify it + key2 = key[1:] + if mongoDict.has_key(key2): + mongoDict[key] = mongoDict[key2] + del mongoDict[key2] + return mongoDict + ####################################################################### # Testing. if __name__ == '__main__': diff --git a/src/python/dm/common/mongodb/api/fileMongoDbApi.py b/src/python/dm/common/mongodb/api/fileMongoDbApi.py index ec24befd2fed319cc8a86dbd846eea371c32a2a0..f022c93bf5f596b018e7718ecd9ae92fc155c129 100755 --- a/src/python/dm/common/mongodb/api/fileMongoDbApi.py +++ b/src/python/dm/common/mongodb/api/fileMongoDbApi.py @@ -9,18 +9,22 @@ from dm.common.objects.fileMetadata import FileMetadata class FileMongoDbApi(DmMongoDbApi): + SYSTEM_KEY_LIST = ['_id', '_fileName', '_experimentName'] + def __init__(self): DmMongoDbApi.__init__(self) self.fileCollection = FileCollection(self.dbClient) @DmMongoDbApi.executeDbCall def addExperimentFile(self, fileInfo, **kwargs): - dbFileMetadata = self.fileCollection.addByUniqueKeys(fileInfo) + fileInfo2 = self.getMongoDict(fileInfo) + dbFileMetadata = self.fileCollection.addByUniqueKeys(fileInfo2) return self.toDmObject(dbFileMetadata, FileMetadata) @DmMongoDbApi.executeDbCall def getFiles(self, queryDict={}, returnFieldDict=FileCollection.ALL_FIELDS_DICT, **kwargs): - return self.listToDmObjects(self.fileCollection.findByQueryDict(queryDict, returnFieldDict), FileMetadata) + queryDict2 = self.getMongoDict(queryDict) + return self.listToDmObjects(self.fileCollection.findByQueryDict(queryDict2, returnFieldDict), FileMetadata) @DmMongoDbApi.executeDbCall def getFileById(self, id, **kwargs): @@ -29,54 +33,62 @@ class FileMongoDbApi(DmMongoDbApi): @DmMongoDbApi.executeDbCall def getExperimentFile(self, experimentName, fileName, **kwargs): - queryDict = { 'name' : fileName, 'experimentName' : experimentName } + queryDict = { '_fileName' : fileName, '_experimentName' : experimentName } dbFileMetadata = self.fileCollection.findByUniqueKeys(queryDict) return self.toDmObject(dbFileMetadata, FileMetadata) @DmMongoDbApi.executeDbCall def getExperimentFiles(self, experimentName, queryDict={}, returnFieldDict=FileCollection.ALL_FIELDS_DICT, **kwargs): queryDict2 = copy.copy(queryDict) - queryDict2['experimentName'] = experimentName + queryDict2['_experimentName'] = experimentName return self.getFiles(queryDict2, returnFieldDict) @DmMongoDbApi.executeDbCall def updateFileById(self, fileInfo, **kwargs): - dbFileMetadata = self.fileCollection.updateById(fileInfo) + fileInfo2 = self.getMongoDict(fileInfo) + dbFileMetadata = self.fileCollection.updateById(fileInfo2) return self.toDmObject(dbFileMetadata, FileMetadata) @DmMongoDbApi.executeDbCall def updateExperimentFile(self, fileInfo, **kwargs): - dbFileMetadata = self.fileCollection.updateByUniqueKeys(fileInfo) + fileInfo2 = self.getMongoDict(fileInfo) + dbFileMetadata = self.fileCollection.updateByUniqueKeys(fileInfo2) return self.toDmObject(dbFileMetadata, FileMetadata) @DmMongoDbApi.executeDbCall def updateOrAddExperimentFile(self, fileInfo, **kwargs): - dbFileMetadata = self.fileCollection.updateOrAddByUniqueKeys(fileInfo) + fileInfo2 = self.getMongoDict(fileInfo) + dbFileMetadata = self.fileCollection.updateOrAddByUniqueKeys(fileInfo2) return self.toDmObject(dbFileMetadata, FileMetadata) ####################################################################### # Testing. if __name__ == '__main__': api = FileMongoDbApi() - files = api.getFiles() - for file in files: - print file.getDictRep() - print file.__dict__ - file = api.getExperimentFile('exp-01', 'xyz-001') - print file + + fileName = 'file02' + experimentName = 'exp-01' + fileInfo = {'fileName' : fileName, 'intKey' : 1, 'doubleKey' : 2.0, 'stringKey' : 'myString' , 'experimentName' : experimentName} + file = api.updateOrAddExperimentFile(fileInfo) + print '\nADDED FILE\n', file + import time t = long(time.time()) - print t fileName = 'f-%s' % t - fileInfo = {'name' : fileName, 'intKey' : 1, 'doubleKey' : 2.0, 'stringKey' : 'myString' , 'dictKey' : {'a' : 'A', 'b' : 'B', 'c' : 3}, 'experimentName' : 'exp2'} - file = api.addExperimentFile(fileInfo) + experimentName = 'exp-01' + fileInfo = {'fileName' : fileName, 'intKey' : 1, 'doubleKey' : 2.0, 'stringKey' : 'myString' , 'dictKey' : {'a' : 'A', 'b' : 'B', 'c' : 3}, 'experimentName' : experimentName} + file = api.updateOrAddExperimentFile(fileInfo) print '\nADDED FILE\n', file + files = api.getFiles() + for file in files: + print 'FILE: %s\n' % file.getDictRep() - fileInfo = {'name' : fileName, 'intKey' : 101} + fileInfo = {'fileName' : fileName, 'experimentName' : experimentName, 'intKey' : 101} file = api.updateExperimentFile(fileInfo) print '\nUPDATED FILE\n', file - print '\nFILES: \n', api.getFiles() - print '\nFILES FOR EXPERIMENT exp1: \n', api.getFiles(queryDict={'experimentName' : 'exp1'}) + + print '\nFILES FOR EXPERIMENT exp1: \n', api.getExperimentFiles(experimentName) + print '\nFILES FOR EXPERIMENT exp1 with fileName=file01: \n', api.getExperimentFiles(experimentName, queryDict={'fileName':'file01'}) diff --git a/src/python/dm/common/mongodb/impl/datasetCollection.py b/src/python/dm/common/mongodb/impl/datasetCollection.py index c6195e235bae4e1bfd0b80ee1c86cf7efd2c0898..43f7e812b2540dc8725e52af2492044a6da10f0a 100755 --- a/src/python/dm/common/mongodb/impl/datasetCollection.py +++ b/src/python/dm/common/mongodb/impl/datasetCollection.py @@ -10,7 +10,7 @@ from dmMongoCollection import DmMongoCollection class DatasetCollection(DmMongoCollection): """Class responsible for updating dataset collection in mongo db.""" - UNIQUE_KEYS_LIST = [ 'name' ] + UNIQUE_KEYS_LIST = [ '_datasetName', '_experimentName' ] def __init__(self, dbClient): DmMongoCollection.__init__(self, 'datasets', dbClient) @@ -23,7 +23,7 @@ if __name__ == '__main__': datasetCollection = DatasetCollection(mongo) datasetInfo = {'name' : 'ds-001', 'owner' : 'sv', - 'experiment' : 'exp-001', + 'experimentName' : 'exp-001', 'voltage' : { 'gt' : 400}, 'current' : { 'lt' : 100}, } diff --git a/src/python/dm/common/mongodb/impl/dmMongoCollection.py b/src/python/dm/common/mongodb/impl/dmMongoCollection.py index 52bbe10e9c14c9987574896e7e3ddace1854576d..2d1664b682f13e967571968e8245783bb7c79cc8 100755 --- a/src/python/dm/common/mongodb/impl/dmMongoCollection.py +++ b/src/python/dm/common/mongodb/impl/dmMongoCollection.py @@ -53,7 +53,7 @@ class DmMongoCollection(object): return self.findByKey('_id', ObjectId(id)) def findByName(self, name): - return self.findByKey('name', name) + return self.findByKey('_name', name) def findByQueryDict(self, queryDict, returnFieldDict=ALL_FIELDS_DICT): return self.dbClient.findAsList(self.collectionName, queryDict, returnFieldDict) @@ -65,7 +65,7 @@ class DmMongoCollection(object): return self.dbClient.findAsList(self.collectionName, {}, {}) def listByName(self): - return self.findByName('name') + return self.findByName('_name') def listByKeys(self, keyList): returnFieldDict = {} @@ -95,7 +95,7 @@ class DmMongoCollection(object): return self.__addDbObject(objectDict) def addByName(self, objectDict): - return self.addByKey('name', objectDict) + return self.addByKey('_name', objectDict) def addByKeys(self, keyList, objectDict): queryDict = {} @@ -162,7 +162,7 @@ class DmMongoCollection(object): return self.updateByKey('_id', objectDict) def updateByName(self, objectDict): - return self.updateByKey('name', objectDict) + return self.updateByKey('_name', objectDict) def updateOrAddByKey(self, key, objectDict): value = objectDict.get(key) @@ -193,7 +193,7 @@ class DmMongoCollection(object): return self.updateOrAddByKeys(self.UNIQUE_KEYS_LIST, objectDict) def updateOrAddByName(self, objectDict): - return self.updateOrAddByKey('name', objectDict) + return self.updateOrAddByKey('_name', objectDict) ####################################################################### # Testing diff --git a/src/python/dm/common/mongodb/impl/fileCollection.py b/src/python/dm/common/mongodb/impl/fileCollection.py index 1bc00ca6858e4ceed772f29fad281bd18515d757..b794b3d126ac0abdf0221ad0e3cce45c367faa87 100755 --- a/src/python/dm/common/mongodb/impl/fileCollection.py +++ b/src/python/dm/common/mongodb/impl/fileCollection.py @@ -10,7 +10,7 @@ from dmMongoCollection import DmMongoCollection class FileCollection(DmMongoCollection): """Class responsible for updating file collection in mongo db.""" - UNIQUE_KEYS_LIST = [ 'name', 'experimentName' ] + UNIQUE_KEYS_LIST = [ '_fileName', '_experimentName' ] def __init__(self, dbClient): DmMongoCollection.__init__(self, 'files', dbClient) @@ -21,11 +21,11 @@ if __name__ == '__main__': from dmMongoClient import DmMongoClient mongo = DmMongoClient('dm') fileCollection = FileCollection(mongo) - fileInfo = {'name' : 'xyz-001', 'experimentName' : 'myexp-001', 'update' : 'sv2', 'locationList' : '[/opt/xyz, /data/xyz]'} - print fileCollection.updateByName(fileInfo) - print type(fileCollection.findByName('xyz-001')) + fileInfo = {'_fileName' : 'xyz-001', '_experimentName' : 'myexp-001', 'update' : 'sv2', 'locationList' : '[/opt/xyz, /data/xyz]'} + print fileCollection.updateByUniqueKeys(fileInfo) + #print type(fileCollection.findByName('xyz-001')) print fileCollection.findByQueryDict({'experiment' : 'exp-001'}, {'locationList' : 1}) - fileInfo['experimentName'] = 'ddm1' + fileInfo['_experimentName'] = 'ddm1' print fileCollection.addByUniqueKeys(fileInfo) diff --git a/src/python/dm/common/objects/fileMetadata.py b/src/python/dm/common/objects/fileMetadata.py index 16ecc4f1de94688bf38d6b3b1316ff5c8f33a2e5..e2e292ed6cd561871dec9b9cb0f5eaa8e3d4128b 100755 --- a/src/python/dm/common/objects/fileMetadata.py +++ b/src/python/dm/common/objects/fileMetadata.py @@ -4,7 +4,7 @@ from dmObject import DmObject class FileMetadata(DmObject): - DEFAULT_KEY_LIST = [ 'id', 'name', 'locationList' ] + DEFAULT_KEY_LIST = [ 'id', 'fileName', 'experimentName', 'locationList' ] def __init__(self, dict): DmObject.__init__(self, dict)