Forked from
DM / dm-docs
261 commits behind, 664 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
fileRestApi.py 4.80 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.')
fileName = fileInfo.get('fileName')
if not fileName:
raise InvalidRequest('File metadata must contain fileName key.')
url = '%s/filesByExperiment/%s/%s' % (self.getContextRoot(), experimentName, fileName)
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.')
fileName = fileInfo.get('fileName')
if not fileName:
raise InvalidRequest('File metadata must contain fileName key.')
url = '%s/filesByExperiment/%s/%s' % (self.getContextRoot(), experimentName, fileName)
url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo)))
responseData = self.sendSessionRequest(url=url, method='PUT')
return FileMetadata(responseData)
@CatRestApi.execute
def updateFileById(self, fileInfo):
id = fileInfo.get('id')
if not id:
raise InvalidRequest('File metadata must contain id key.')
url = '%s/files/%s' % (self.getContextRoot(), id)
url += '?fileInfo=%s' % (Encoder.encode(json.dumps(fileInfo)))
responseData = self.sendSessionRequest(url=url, method='PUT')
return FileMetadata(responseData)
@CatRestApi.execute
def getFiles(self, queryDict={}):
url = '%s/files' % (self.getContextRoot())
url += '?queryDict=%s' % (Encoder.encode(json.dumps(queryDict)))
responseData = self.sendSessionRequest(url=url, method='GET')
return self.toDmObjectList(responseData, FileMetadata)
@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 getFileById(self, id):
if not id:
raise InvalidRequest('Invalid file id provided.')
url = '%s/files/%s' % (self.getContextRoot(), id)
responseData = self.sendSessionRequest(url=url, method='GET')
return FileMetadata(responseData)
@CatRestApi.execute
def getExperimentFile(self, experimentName, fileName):
if not experimentName:
raise InvalidRequest('Invalid experiment name provided.')
if not fileName:
raise InvalidRequest('Invalid file name provided.')
url = '%s/filesByExperiment/%s/%s' % (self.getContextRoot(), experimentName, fileName)
responseData = self.sendSessionRequest(url=url, method='GET')
return FileMetadata(responseData)
#######################################################################
# Testing.
if __name__ == '__main__':
api = FileRestApi()
print api.getFiles()
print api.getFileById('556de0059e058b0ef4c4413b')
print api.getFileByName('xyz-001')
import time
t = long(time.time())
fileInfo = {
'fileName' : '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)