Skip to content
Snippets Groups Projects
experimentRestApi.py 4.52 KiB
Newer Older
from dm.common.constants import dmProcessingStatus
from dm.common.utility.encoder import Encoder
from dm.common.exceptions.dmException import DmException
from dm.common.objects.experiment import Experiment
from dm.common.objects.uploadInfo import UploadInfo
from dm.common.objects.pluginInfo import PluginInfo
from dm.common.objects.daqInfo import DaqInfo
from daqRestApi import DaqRestApi

class ExperimentRestApi(DaqRestApi):
    
    def __init__(self, username=None, password=None, host=None, port=None, protocol=None):
        DaqRestApi.__init__(self, username, password, host, port, protocol)

    @DaqRestApi.execute
    def startDaq(self, experimentName, dataDirectory, daqInfo={}):
            raise InvalidRequest('Experiment name must be provided.')
            raise InvalidRequest('Experiment data directory must be provided.')
        url = '%s/experimentsByName/%s/startDaq/%s' % (self.getContextRoot(), Encoder.encode(experimentName), Encoder.encode(dataDirectory))
        url += '?daqInfo=%s' % (Encoder.encode(json.dumps(daqInfo)))
        responseDict = self.sendSessionRequest(url=url, method='POST')
    def stopDaq(self, experimentName, dataDirectory):
        if not experimentName:
            raise InvalidRequest('Experiment name must be provided.')
        if not dataDirectory:
            raise InvalidRequest('Experiment data directory must be provided.')
        url = '%s/experimentsByName/%s/stopDaq/%s' % (self.getContextRoot(), Encoder.encode(experimentName), Encoder.encode(dataDirectory))
        responseDict = self.sendSessionRequest(url=url, method='POST')
        return DaqInfo(responseDict)

    @DaqRestApi.execute
    def getDaqInfo(self, id):
        if not id:
            raise InvalidRequest('Daq id must be provided.')
        url = '%s/experimentDaqs/%s' % (self.getContextRoot(),id)
        responseDict = self.sendSessionRequest(url=url, method='GET')
        return DaqInfo(responseDict)
    @DaqRestApi.execute
    def listDaqs(self, status=None):
        if not status:
            status = dmProcessingStatus.DM_PROCESSING_STATUS_ANY
        url = '%s/experimentDaqsByStatus/%s' % (self.getContextRoot(),status)
        responseData = self.sendSessionRequest(url=url, method='GET')
        return self.toDmObjectList(responseData, DaqInfo)

    @DaqRestApi.execute
    def upload(self, experimentName, dataDirectory, daqInfo={}):
            raise InvalidRequest('Experiment name must be provided.')
            raise InvalidRequest('Experiment data directory must be provided.')
        url = '%s/experimentsByName/%s/upload/%s' % (self.getContextRoot(), Encoder.encode(experimentName), Encoder.encode(dataDirectory))
        url += '?daqInfo=%s' % (Encoder.encode(json.dumps(daqInfo)))
        responseDict = self.sendSessionRequest(url=url, method='POST')
        return UploadInfo(responseDict)

    @DaqRestApi.execute
    def getUploadInfo(self, id):
        url = '%s/experimentUploads/%s' % (self.getContextRoot(),id)
        if not id:
            raise InvalidRequest('Upload id must be provided.')
        responseDict = self.sendSessionRequest(url=url, method='GET')
        return UploadInfo(responseDict)
    @DaqRestApi.execute
    def listUploads(self, status=None):
        if not status:
            status = dmProcessingStatus.DM_PROCESSING_STATUS_ANY
        url = '%s/experimentUploadsByStatus/%s' % (self.getContextRoot(),status)
        responseData = self.sendSessionRequest(url=url, method='GET')
        return self.toDmObjectList(responseData, UploadInfo)

    @DaqRestApi.execute
    def stopUpload(self, id):
        url = '%s/experimentUploads/stopUpload/%s' % (self.getContextRoot(),id)
        if not id:
            raise InvalidRequest('Upload id must be provided.')
        responseDict = self.sendSessionRequest(url=url, method='POST')
        return UploadInfo(responseDict)

    @DaqRestApi.execute
    def getProcessingPlugins(self):
        url = '%s/processingPlugins' % (self.getContextRoot())
        responseData = self.sendSessionRequest(url=url, method='GET')
        return self.toDmObjectList(responseData, PluginInfo)

#######################################################################
# Testing.

if __name__ == '__main__':
    api = ExperimentRestApi('sveseli', 'sveseli', 'zagreb.svdev.net', 33336, 'http')
    print api.startDaq('experiment1', '/tmp/data/experiment1')