Skip to content
Snippets Groups Projects
Commit 06334f66 authored by sveseli's avatar sveseli
Browse files

more work on mongodb catalogging prototype

parent c3ec6728
No related branches found
No related tags found
No related merge requests found
Showing
with 125 additions and 85 deletions
......@@ -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',
......
......@@ -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())
......
......@@ -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.
......
......@@ -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())
......
......@@ -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()
......
#!/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']
},
......
......@@ -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
......@@ -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):
......
#!/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__':
......
......@@ -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'})
......@@ -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},
}
......
......@@ -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
......
......@@ -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)
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment