#!/usr/bin/env python import os import urllib 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.experimentType import ExperimentType from dsRestApi import DsRestApi class ExperimentDsApi(DsRestApi): def __init__(self, username=None, password=None, host=None, port=None, protocol=None): DsRestApi.__init__(self, username, password, host, port, protocol) @DsRestApi.execute def getExperimentTypes(self): url = '%s/experimentTypes' % (self.getContextRoot()) responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, ExperimentType) @DsRestApi.execute def getExperiments(self): url = '%s/experiments' % (self.getContextRoot()) responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, Experiment) @DsRestApi.execute def getExperimentsByStation(self, stationName): url = '%s/experimentsByStation/%s' % (self.getContextRoot(), stationName) if not stationName: raise InvalidRequest('Experiment station name must be provided.') responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, Experiment) @DsRestApi.execute def getExperimentByName(self, name): url = '%s/experimentsByName/%s' % (self.getContextRoot(), name) if name is None or not len(name): raise InvalidRequest('Experiment name must be provided.') responseDict = self.sendSessionRequest(url=url, method='GET') return Experiment(responseDict) @DsRestApi.execute def getExperimentById(self, id): url = '%s/experimentsById/%s' % (self.getContextRoot(), id) if id is None: raise InvalidRequest('Experiment id must be provided.') responseDict = self.sendSessionRequest(url=url, method='GET') return Experiment(responseDict) @DsRestApi.execute def startExperiment(self, name): url = '%s/experiments/start' % (self.getContextRoot()) if name is None or not len(name): raise InvalidRequest('Experiment name must be provided.') url += '?name=%s' % Encoder.encode(name) responseDict = self.sendSessionRequest(url=url, method='PUT') return Experiment(responseDict) @DsRestApi.execute def updateExperiment(self, name): url = '%s/experiments/update' % (self.getContextRoot()) if name is None or not len(name): raise InvalidRequest('Experiment name must be provided.') url += '?name=%s' % Encoder.encode(name) responseDict = self.sendSessionRequest(url=url, method='PUT') return Experiment(responseDict) @DsRestApi.execute def stopExperiment(self, name): url = '%s/experiments/stop' % (self.getContextRoot()) if name is None or not len(name): raise InvalidRequest('Experiment name must be provided.') url += '?name=%s' % Encoder.encode(name) responseDict = self.sendSessionRequest(url=url, method='PUT') return Experiment(responseDict) @DsRestApi.execute def addExperiment(self, name, stationName, typeName, description, startDate, endDate): url = '%s/experiments' % (self.getContextRoot()) if not name: raise InvalidRequest('Experiment name must be provided.') url += '?name=%s' % Encoder.encode(name) if not stationName: raise InvalidRequest('Experiment station name must be provided.') url += '&stationName=%s' % Encoder.encode(stationName) if not typeName: raise InvalidRequest('Experiment type must be provided.') url += '&typeName=%s' % Encoder.encode(typeName) if description is not None: url += '&description=%s' % Encoder.encode(description) if startDate is not None: url += '&startDate=%s' % Encoder.encode(startDate) if endDate is not None: url += '&endDate=%s' % Encoder.encode(endDate) responseDict = self.sendSessionRequest(url=url, method='POST') return Experiment(responseDict) ####################################################################### # Testing. if __name__ == '__main__': api = ExperimentDsApi('sveseli', 'sveseli', 'zagreb.svdev.net', 33336, 'http') print api.startExperiment('experiment1')