Forked from
DM / dm-docs
261 commits behind, 771 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
fileRestApi.py 4.96 KiB
#!/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.')
experimentFilePath = fileInfo.get('experimentFilePath')
if not experimentFilePath:
raise InvalidRequest('File metadata must contain experimentFilePath key.')
url = '%s/filesByExperimentAndPath/%s/%s' % (self.getContextRoot(), experimentName, Encoder.encode(experimentFilePath))
url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo)))
responseData = self.sendSessionRequest(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.')
experimentFilePath = fileInfo.get('experimentFilePath')
if not experimentFilePath:
raise InvalidRequest('File metadata must contain experimentFilePath key.')
url = '%s/filesByExperimentAndPath/%s/%s' % (self.getContextRoot(), experimentName, Encoder.encode(experimentFilePath))
url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo)))
responseData = self.sendSessionRequest(url=url, method='PUT')
return FileMetadata(responseData)
@CatRestApi.execute
def updateExperimentFileById(self, fileInfo):
experimentName = fileInfo.get('experimentName')
if not experimentName:
raise InvalidRequest('File metadata must contain experimentName key.')
id = fileInfo.get('id')
if not id:
raise InvalidRequest('File metadata must contain id key.')
url = '%s/filesByExperimentAndId/%s/%s' % (self.getContextRoot(), experimentName, id)
url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo)))
responseData = self.sendSessionRequest(url=url, method='PUT')
return FileMetadata(responseData)
@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.sendSessionRequest(url=url, method='GET')
return self.toDmObjectList(responseData, FileMetadata)
@CatRestApi.execute
def getExperimentFileById(self, experimentName, id):
if not experimentName:
raise InvalidRequest('Invalid experiment name provided.')
if not id:
raise InvalidRequest('Invalid file id provided.')
url = '%s/filesByExperimentAndId/%s/%s' % (self.getContextRoot(), experimentName, id)
responseData = self.sendSessionRequest(url=url, method='GET')
return FileMetadata(responseData)
@CatRestApi.execute
def getExperimentFile(self, experimentName, experimentFilePath):
if not experimentName:
raise InvalidRequest('Invalid experiment name provided.')
if not experimentFilePath:
raise InvalidRequest('Invalid experiment file path provided.')
url = '%s/filesByExperimentAndPath/%s/%s' % (self.getContextRoot(), experimentName, Encoder.encode(experimentFilePath))
responseData = self.sendSessionRequest(url=url, method='GET')
return FileMetadata(responseData)
#######################################################################
# Testing.
if __name__ == '__main__':
api = FileRestApi()
import time
t = long(time.time())
fileInfo = {
'experimentFilePath' : '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)