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

added initial cataloging web service, with file interface and corresponding api and cli classes

parent c3353915
No related branches found
No related tags found
No related merge requests found
Showing
with 753 additions and 0 deletions
__version__ = "Development Snapshot"
__version__ = "Development Snapshot"
#!/usr/bin/env python
from dm.common.api.dmRestApi import DmRestApi
from dm.common.utility.configurationManager import ConfigurationManager
class CatRestApi(DmRestApi):
""" Base CAT DM REST api class. """
def __init__(self, username=None, password=None, host=None, port=None, protocol=None):
if host == None:
host = ConfigurationManager.getInstance().getCatWebServiceHost()
if port == None:
port = ConfigurationManager.getInstance().getCatWebServicePort()
DmRestApi.__init__(self, username, password, host, port, protocol)
#######################################################################
# Testing.
if __name__ == '__main__':
pass
#!/usr/bin/env python
from dm.common.utility.loggingManager import LoggingManager
from dm.common.utility.configurationManager import ConfigurationManager
class CatRestApiFactory:
CONFIG_SECTION_NAME = 'CatRestApiFactory'
USERNAME_KEY = 'username'
PASSWORD_FILE_KEY = 'passwordfile'
HOST_KEY = 'host'
PORT_KEY = 'port'
PROTOCOL_KEY = 'protocol'
__logger = None
__username = None
__password = None
__host = None
__port = None
__protocol = None
@classmethod
def getLogger(cls):
if cls.__logger is None:
cls.__logger = LoggingManager.getInstance().getLogger(cls.__name__)
return cls.__logger
@classmethod
def __getConfiguration(cls):
if cls.__username is None:
cls.__username = ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.USERNAME_KEY)
cls.__password = open(ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.PASSWORD_FILE_KEY)).read().strip()
cls.__host = ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.HOST_KEY)
cls.__port = ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.PORT_KEY)
cls.__protocol = ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.PROTOCOL_KEY)
return (cls.__username, cls.__password, cls.__host, cls.__port, cls.__protocol)
@classmethod
def getFileRestApi(cls):
from userRestApi import FileRestApi
(username, password, host, port, protocol) = cls.__getConfiguration()
api = FileRestApi(username, password, host, port, protocol)
return api
####################################################################
# Testing
if __name__ == '__main__':
pass
#!/usr/bin/env python
import os
import urllib
import json
from dm.common.utility.encoder import Encoder
from dm.common.exceptions.dmException import DmException
from dm.common.exceptions.invalidRequest import InvalidRequest
from dm.common.objects.fileMetadata import FileMetadata
from catRestApi import CatRestApi
class FileRestApi(CatRestApi):
def __init__(self, username=None, password=None, host=None, port=None, protocol=None):
CatRestApi.__init__(self, username, password, host, port, protocol)
@CatRestApi.execute
def addExperimentFile(self, fileInfo):
experimentName = fileInfo.get('experimentName')
if not experimentName:
raise InvalidRequest('File metadata must contain experimentName key.')
fileName = fileInfo.get('name')
if not fileName:
raise InvalidRequest('File metadata must contain name 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')
return FileMetadata(responseData)
@CatRestApi.execute
def updateExperimentFile(self, fileInfo):
experimentName = fileInfo.get('experimentName')
if not experimentName:
raise InvalidRequest('File metadata must contain experimentName key.')
fileName = fileInfo.get('name')
if not fileName:
raise InvalidRequest('File metadata must contain name 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')
return FileMetadata(responseData)
@CatRestApi.execute
def updateFileById(self, fileInfo):
id = fileInfo.get('id')
if not id:
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')
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')
return self.toDmObjectList(responseData, FileMetadata)
@CatRestApi.execute
def getExperimentFiles(self, experimentName, queryDict={}):
if not experimentName:
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')
return self.toDmObjectList(responseData, FileMetadata)
@CatRestApi.execute
def getFileById(self, id):
if not id:
raise InvalidRequest('Invalid file id provided.')
url = '%s/files/%s' % (self.getContextRoot(), id)
responseData = self.sendRequest(url=url, method='GET')
return FileMetadata(responseData)
@CatRestApi.execute
def getExperimentFile(self, experimentName, fileName):
if not experimentName:
raise InvalidRequest('Invalid experiment name provided.')
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')
return FileMetadata(responseData)
#######################################################################
# Testing.
if __name__ == '__main__':
api = FileRestApi()
print api.getFiles()
print api.getFileById('556de0059e058b0ef4c4413b')
print api.getFileByName('xyz-001')
import time
t = long(time.time())
fileInfo = {
'name' : 'sv-%s' % t,
'experimentName' : 'exp1',
'power' : 12,
'powerUnits' : 'kW',
'force' : 15,
'forceUnits' : 'N',
'cKey' : {'a' : 1, 'b' : 'B', 'c' : 2.2},
}
fileMetadata = api.addFileByName(fileInfo)
print '\nADDED FILE:\n', fileMetadata
fileInfo['updateKey'] = 'here is desc'
fileMetadata = api.updateFileByName(fileInfo)
print '\nUPDATED FILE:\n', fileMetadata
fileInfo['updateKey2'] = 'new desc'
fileInfo['id'] = fileMetadata.get('id')
fileMetadata = api.updateFileById(fileInfo)
print '\nUPDATED FILE:\n', fileMetadata
queryDict = { 'experimentName' : 'exp2' }
print '\nQUERY FILES:\n', api.getFiles(queryDict=queryDict)
__version__ = "Development Snapshot"
#!/usr/bin/env python
from dm.cat_web_service.api.fileRestApi import FileRestApi
from dm.common.exceptions.invalidRequest import InvalidRequest
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('', '--experiment', dest='experimentName', help='Experiment name.')
def checkArgs(self):
if self.options.experimentName is None:
raise InvalidRequest('Experiment name must be provided.')
if self.options.fileName is None:
raise InvalidRequest('File name must be provided.')
def getExperimentName(self):
return self.options.experimentName
def getFileName(self):
return self.options.fileName
def runCommand(self):
self.parseArgs(usage="""
dm-add-experiment-file --name=FILENAME --experiment=EXPERIMENTNAME
[key1:value1, key2:value2, ...]
Description:
Adds experiment file to the metadata catalog. All provided key/value pairs
are interpreted as file metadata.
""")
self.checkArgs()
api = FileRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol())
fileInfo = self.splitArgsIntoDict()
fileInfo['experimentName'] = self.getExperimentName()
fileInfo['name'] = self.getFileName()
fileMetadata = api.addExperimentFile(fileInfo)
print fileMetadata.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = AddExperimentFileCli()
cli.run()
#!/usr/bin/env python
from dm.common.cli.dmRestCli import DmRestCli
from dm.common.utility.configurationManager import ConfigurationManager
class CatWebServiceCli(DmRestCli):
""" DM CAT web service cli class. """
def __init__(self, validArgCount=0):
DmRestCli.__init__(self, validArgCount)
def getDefaultServiceHost(self):
return ConfigurationManager.getInstance().getCatWebServiceHost()
def getDefaultServicePort(self):
return ConfigurationManager.getInstance().getCatWebServicePort()
#!/usr/bin/env python
from dm.common.cli.dmRestSessionCli import DmRestSessionCli
from dm.common.utility.osUtility import OsUtility
from dm.common.utility.configurationManager import ConfigurationManager
class CatWebServiceSessionCli(DmRestSessionCli):
""" DM CAT web service session cli class. """
DEFAULT_SESSION_CACHE_FILE = OsUtility.getUserHomeDir() + '/.dm/.cat.session.cache'
def __init__(self, validArgCount=0):
DmRestSessionCli.__init__(self, validArgCount)
ConfigurationManager.getInstance().setSessionCacheFile(CatWebServiceSessionCli.DEFAULT_SESSION_CACHE_FILE)
def getDefaultServiceHost(self):
return ConfigurationManager.getInstance().getCatWebServiceHost()
def getDefaultServicePort(self):
return ConfigurationManager.getInstance().getCatWebServicePort()
#!/usr/bin/env python
from dm.cat_web_service.api.fileRestApi import FileRestApi
from dm.common.exceptions.invalidRequest import InvalidRequest
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('', '--experiment', dest='experimentName', help='Experiment name.')
def checkArgs(self):
if self.options.experimentName is None:
raise InvalidRequest('Experiment name must be provided.')
if self.options.fileName is None:
raise InvalidRequest('File name must be provided.')
def getExperimentName(self):
return self.options.experimentName
def getFileName(self):
return self.options.fileName
def runCommand(self):
self.parseArgs(usage="""
dm-get-experiment-file --name=FILENAME --experiment=EXPERIMENTNAME
Description:
Retrieve experiment file metadata from the catalog.
""")
self.checkArgs()
api = FileRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol())
fileMetadata = api.getExperimentFile(self.getExperimentName(), self.getFileName())
print fileMetadata.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = GetExperimentFileCli()
cli.run()
#!/usr/bin/env python
from dm.cat_web_service.api.fileRestApi import FileRestApi
from dm.common.exceptions.invalidRequest import InvalidRequest
from catWebServiceSessionCli import CatWebServiceSessionCli
class GetExperimentFilesCli(CatWebServiceSessionCli):
def __init__(self):
CatWebServiceSessionCli.__init__(self, validArgCount=self.ANY_NUMBER_OF_POSITIONAL_ARGS)
self.addOption('', '--experiment', dest='experimentName', help='Experiment name.')
def checkArgs(self):
if self.options.experimentName is None:
raise InvalidRequest('Experiment name must be provided.')
def getExperimentName(self):
return self.options.experimentName
def runCommand(self):
self.parseArgs(usage="""
dm-get-experiment-files --experiment=EXPERIMENTNAME
[key1:value1, key2:value2, ...]
Description:
Retrieve experiment files from the metadata catalog. Only those files that
match provided key/value metadata pairs will be returned. If no specific
metadata key/values are requested, all experiment files will be returned.
""")
self.checkArgs()
api = FileRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol())
queryDict = self.splitArgsIntoDict()
fileMetadataList = api.getExperimentFiles(self.getExperimentName(), queryDict)
for fileMetadata in fileMetadataList:
print fileMetadata.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = GetExperimentFilesCli()
cli.run()
#!/usr/bin/env python
from dm.cat_web_service.api.fileRestApi import FileRestApi
from dm.common.exceptions.invalidRequest import InvalidRequest
from catWebServiceSessionCli import CatWebServiceSessionCli
class GetFilesCli(CatWebServiceSessionCli):
def __init__(self):
CatWebServiceSessionCli.__init__(self, validArgCount=self.ANY_NUMBER_OF_POSITIONAL_ARGS)
def checkArgs(self):
pass
def runCommand(self):
self.parseArgs(usage="""
dm-get-files
[key1:value1, key2:value2, ...]
Description:
Retrieve files from the metadata catalog. Only those files that
match provided key/value metadata pairs will be returned. If no specific
metadata key/values are requested, all experiment files will be returned.
""")
self.checkArgs()
api = FileRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol())
queryDict = self.splitArgsIntoDict()
fileMetadataList = api.getFiles(queryDict)
for fileMetadata in fileMetadataList:
print fileMetadata.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = GetFilesCli()
cli.run()
#!/usr/bin/env python
from dm.cat_web_service.api.fileRestApi import FileRestApi
from dm.common.exceptions.invalidRequest import InvalidRequest
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('', '--experiment', dest='experimentName', help='Experiment name.')
def checkArgs(self):
if self.options.experimentName is None:
raise InvalidRequest('Experiment name must be provided.')
if self.options.fileName is None:
raise InvalidRequest('File name must be provided.')
def getExperimentName(self):
return self.options.experimentName
def getFileName(self):
return self.options.fileName
def runCommand(self):
self.parseArgs(usage="""
dm-update-experiment-file --name=FILENAME --experiment=EXPERIMENTNAME
[key1:value1, key2:value2, ...]
Description:
Updates experiment file in the metadata catalog. All provided key/value
pairs are interpreted as file metadata, and will be merged with existing
metadata, overwriting values for existing keys, and adding values for
new keys.
""")
self.checkArgs()
api = FileRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol())
fileInfo = self.splitArgsIntoDict()
fileInfo['experimentName'] = self.getExperimentName()
fileInfo['name'] = self.getFileName()
fileMetadata = api.updateExperimentFile(fileInfo)
print fileMetadata.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = UpdateExperimentFileCli()
cli.run()
__version__ = "Development Snapshot"
#!/usr/bin/env python
#
# DM CAT Web Service
#
from dm.common.service.dmRestWebServiceBase import DmRestWebServiceBase
from dm.common.utility.dmModuleManager import DmModuleManager
from dm.common.utility.configurationManager import ConfigurationManager
from catWebServiceRouteMapper import CatWebServiceRouteMapper
class CatWebService(DmRestWebServiceBase):
def __init__(self):
DmRestWebServiceBase.__init__(self, CatWebServiceRouteMapper)
def initDmModules(self):
self.logger.debug('Initializing dm modules')
# Add modules that will be started.
moduleManager = DmModuleManager.getInstance()
self.logger.debug('Initialized dm modules')
def getDefaultServerHost(self):
return ConfigurationManager.getInstance().getServiceHost()
def getDefaultServerPort(self):
return ConfigurationManager.getInstance().getServicePort()
####################################################################
# Run service
if __name__ == '__main__':
ConfigurationManager.getInstance().setServiceName('cat-web-service')
service = CatWebService();
service.run()
#!/usr/bin/env python
#
# Route mapper for DM CAT web service.
#
import sys
import os
import cherrypy
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
class CatWebServiceRouteMapper:
@classmethod
def setupRoutes(cls):
""" Setup RESTFul routes. """
logger = LoggingManager.getInstance().getLogger(cls.__name__)
contextRoot = ConfigurationManager.getInstance().getContextRoot()
logger.debug('Using context root: %s' % contextRoot)
# Get routes.
routes = LoginRouteDescriptor.getRoutes()
routes += FileRouteDescriptor.getRoutes()
# Add routes to dispatcher.
d = cherrypy.dispatch.RoutesDispatcher()
for route in routes:
logger.debug('Connecting route: %s' % route)
d.connect(route['name'], route['path'], action=route['action'], controller=route['controller'], conditions=dict(method=route['method']))
return d
#!/usr/bin/env python
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
class FileController(DmController):
def __init__(self):
DmController.__init__(self)
self.fileControllerImpl = FileControllerImpl()
@cherrypy.expose
@DmController.execute
def addExperimentFile(self, experimentName, fileName, **kwargs):
if not experimentName:
raise InvalidRequest('Invalid experiment name provided.')
if not fileName:
raise InvalidRequest('Invalid file name provided.')
encodedFileInfo = kwargs.get('fileInfo')
if not encodedFileInfo:
raise InvalidRequest('Invalid file info provided.')
fileInfo = json.loads(Encoder.decode(encodedFileInfo))
fileInfo['name'] = fileName
fileInfo['experimentName'] = experimentName
response = self.fileControllerImpl.addExperimentFile(fileInfo).getFullJsonRep()
self.logger.debug('Added file %s: %s' % (fileName,response))
return response
@cherrypy.expose
@DmController.execute
def updateExperimentFile(self, experimentName, fileName, **kwargs):
if not experimentName:
raise InvalidRequest('Invalid experiment name provided.')
if not fileName:
raise InvalidRequest('Invalid file name provided.')
encodedFileInfo = kwargs.get('fileInfo')
if not encodedFileInfo:
raise InvalidRequest('Invalid file info provided.')
fileInfo = json.loads(Encoder.decode(encodedFileInfo))
fileInfo['name'] = fileName
fileInfo['experimentName'] = experimentName
response = self.fileControllerImpl.updateExperimentFile(fileInfo).getFullJsonRep()
self.logger.debug('Updated file %s: %s' % (fileName,response))
return response
@cherrypy.expose
@DmController.execute
def updateFileById(self, id, **kwargs):
if not id:
raise InvalidRequest('Invalid file id provided.')
encodedFileInfo = kwargs.get('fileInfo')
if not encodedFileInfo:
raise InvalidRequest('Invalid file info provided.')
fileInfo = json.loads(Encoder.decode(encodedFileInfo))
response = self.fileControllerImpl.updateFileById(fileInfo).getFullJsonRep()
self.logger.debug('Updated file id %s: %s' % (id,response))
return response
@cherrypy.expose
@DmController.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))
@cherrypy.expose
@DmController.execute
def getExperimentFiles(self, experimentName, **kwargs):
if not experimentName:
raise InvalidRequest('Invalid experiment name provided.')
encodedQueryDict = kwargs.get('queryDict')
queryDict = {}
if encodedQueryDict:
queryDict = json.loads(Encoder.decode(encodedQueryDict))
return self.listToJson(self.fileControllerImpl.getExperimentFiles(experimentName, queryDict=queryDict))
@cherrypy.expose
@DmController.execute
def getFileById(self, id, **kwargs):
if not id:
raise InvalidRequest('Invalid id provided.')
response = self.fileControllerImpl.getFileById(id).getFullJsonRep()
self.logger.debug('Returning file id %s: %s' % (id,response))
return response
@cherrypy.expose
@DmController.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()
self.logger.debug('Returning file %s: %s' % (fileName,response))
return response
#!/usr/bin/env python
#
# User route descriptor.
#
from dm.common.utility.configurationManager import ConfigurationManager
from fileController import FileController
class FileRouteDescriptor:
@classmethod
def getRoutes(cls):
contextRoot = ConfigurationManager.getInstance().getContextRoot()
# Static instances shared between different routes
fileController = FileController()
# Define routes.
routes = [
# Add experiment file
{
'name' : 'addExperimentFile',
'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot,
'controller' : fileController,
'action' : 'addExperimentFile',
'method' : ['POST']
},
# Update file by id
{
'name' : 'updateFileById',
'path' : '%s/files/:(id)' % contextRoot,
'controller' : fileController,
'action' : 'updateFileById',
'method' : ['PUT']
},
# Update experiment file by name
{
'name' : 'updateExperimentFile',
'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot,
'controller' : fileController,
'action' : 'updateExperimentFile',
'method' : ['PUT']
},
# Get file info list
{
'name' : 'getFiles',
'path' : '%s/files' % contextRoot,
'controller' : fileController,
'action' : 'getFiles',
'method' : ['GET']
},
# Get experiment file info list
{
'name' : 'getExperimentFiles',
'path' : '%s/filesByExperiment/:(experimentName)' % contextRoot,
'controller' : fileController,
'action' : 'getExperimentFiles',
'method' : ['GET']
},
# Get file by id
{
'name' : 'getFileById',
'path' : '%s/files/:(id)' % contextRoot,
'controller' : fileController,
'action' : 'getFileById',
'method' : ['GET']
},
# Get experiment file by name
{
'name' : 'getExperimentFile',
'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot,
'controller' : fileController,
'action' : 'getExperimentFile',
'method' : ['GET']
},
]
return routes
__version__ = "Development Snapshot"
#!/usr/bin/env python
#
# Implementation for file controller.
#
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):
""" File controller implementation class. """
def __init__(self):
DmObjectManager.__init__(self)
self.fileMongoDbApi = FileMongoDbApi()
def addExperimentFile(self, fileInfo):
return self.fileMongoDbApi.addExperimentFile(fileInfo)
def updateExperimentFile(self, fileInfo):
return self.fileMongoDbApi.updateExperimentFile(fileInfo)
def updateFileById(self, fileInfo):
return self.fileMongoDbApi.updateFileById(fileInfo)
def getFiles(self, queryDict):
return self.fileMongoDbApi.getFiles(queryDict=queryDict)
def getExperimentFiles(self, experimentName, queryDict):
return self.fileMongoDbApi.getExperimentFiles(experimentName, queryDict=queryDict)
def getFileById(self, id):
return self.fileMongoDbApi.getFileById(id)
def getExperimentFile(self, experimentName, fileName):
return self.fileMongoDbApi.getExperimentFile(experimentName, fileName)
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