Skip to content
Snippets Groups Projects
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)