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