#!/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()