#!/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.workflow import Workflow from procRestApi import ProcRestApi class WorkflowRestApi(ProcRestApi): def __init__(self, username=None, password=None, host=None, port=None, protocol=None): ProcRestApi.__init__(self, username, password, host, port, protocol) @ProcRestApi.execute def addWorkflow(self, fileInfo): owner = fileInfo.get('owner') if not owner: raise InvalidRequest('Workflow metadata must contain owner key.') experimentWorkflowPath = fileInfo.get('experimentWorkflowPath') if not experimentWorkflowPath: raise InvalidRequest('Workflow metadata must contain experimentWorkflowPath key.') url = '%s/filesByExperimentAndPath/%s/%s' % (self.getContextRoot(), owner, Encoder.encode(experimentWorkflowPath)) url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo))) responseData = self.sendSessionRequest(url=url, method='POST') return Workflow(responseData) @ProcRestApi.execute def updateWorkflow(self, fileInfo): owner = fileInfo.get('owner') if not owner: raise InvalidRequest('Workflow metadata must contain owner key.') experimentWorkflowPath = fileInfo.get('experimentWorkflowPath') if not experimentWorkflowPath: raise InvalidRequest('Workflow metadata must contain experimentWorkflowPath key.') url = '%s/filesByExperimentAndPath/%s/%s' % (self.getContextRoot(), owner, Encoder.encode(experimentWorkflowPath)) url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo))) responseData = self.sendSessionRequest(url=url, method='PUT') return Workflow(responseData) @ProcRestApi.execute def updateWorkflowById(self, fileInfo): owner = fileInfo.get('owner') if not owner: raise InvalidRequest('Workflow metadata must contain owner key.') id = fileInfo.get('id') if not id: raise InvalidRequest('Workflow metadata must contain id key.') url = '%s/filesByExperimentAndId/%s/%s' % (self.getContextRoot(), owner, id) url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo))) responseData = self.sendSessionRequest(url=url, method='PUT') return Workflow(responseData) @ProcRestApi.execute def getWorkflows(self, owner, queryDict={}): if not owner: raise InvalidRequest('Invalid experiment name provided.') url = '%s/filesByExperiment/%s' % (self.getContextRoot(), owner) url += '?queryDict=%s' % (Encoder.encode(json.dumps(queryDict))) responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, Workflow) @ProcRestApi.execute def getWorkflowById(self, owner, id): if not owner: raise InvalidRequest('Invalid experiment name provided.') if not id: raise InvalidRequest('Invalid file id provided.') url = '%s/filesByExperimentAndId/%s/%s' % (self.getContextRoot(), owner, id) responseData = self.sendSessionRequest(url=url, method='GET') return Workflow(responseData) @ProcRestApi.execute def getWorkflowByName(self, owner, name): if not owner: raise InvalidRequest('Invalid owner name provided.') if not name: raise InvalidRequest('Invalid workflow name provided.') url = '%s/workflowsByOwner/%s/%s' % (self.getContextRoot(), owner, Encoder.encode(name)) responseData = self.sendSessionRequest(url=url, method='GET') return Workflow(responseData) ####################################################################### # Testing. if __name__ == '__main__': api = WorkflowRestApi()