Skip to content
Snippets Groups Projects
datasetRestApi.py 5.63 KiB
Newer Older
#!/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.datasetMetadata import DatasetMetadata
from dm.common.objects.fileMetadata import FileMetadata
from catRestApi import CatRestApi

class DatasetRestApi(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 addExperimentDataset(self, datasetInfo):
        experimentName = datasetInfo.get('experimentName')
        if not experimentName:
            raise InvalidRequest('Dataset metadata must contain experimentName key.')
        datasetName = datasetInfo.get('datasetName')
        if not datasetName:
            raise InvalidRequest('Dataset metadata must contain datasetName key.')
        url = '%s/datasetsByExperiment/%s/%s' % (self.getContextRoot(), experimentName, datasetName)
        url += '?datasetInfo=%s' % (Encoder.encode(json.dumps(datasetInfo)))
        responseData = self.sendSessionRequest(url=url, method='POST')
        return DatasetMetadata(responseData)

    @CatRestApi.execute
    def updateExperimentDataset(self, datasetInfo):
        experimentName = datasetInfo.get('experimentName')
        if not experimentName:
            raise InvalidRequest('Dataset metadata must contain experimentName key.')
        datasetName = datasetInfo.get('datasetName')
        if not datasetName:
            raise InvalidRequest('Dataset metadata must contain datasetName key.')
        url = '%s/datasetsByExperiment/%s/%s' % (self.getContextRoot(), experimentName, datasetName)
        url += '?datasetInfo=%s' % (Encoder.encode(json.dumps(datasetInfo)))
        responseData = self.sendSessionRequest(url=url, method='PUT')
        return DatasetMetadata(responseData)

    @CatRestApi.execute
    def updateDatasetById(self, datasetInfo):
        id = datasetInfo.get('id')
        if not id:
            raise InvalidRequest('Dataset metadata must contain id key.')
        url = '%s/datasets/%s' % (self.getContextRoot(), id)
        url += '?datasetInfo=%s' % (Encoder.encode(json.dumps(datasetInfo)))
        responseData = self.sendSessionRequest(url=url, method='PUT')
        return DatasetMetadata(responseData)

    @CatRestApi.execute
    def getDatasets(self, queryDict={}):
        url = '%s/datasets' % (self.getContextRoot())
        url += '?queryDict=%s' % (Encoder.encode(json.dumps(queryDict)))
        responseData = self.sendSessionRequest(url=url, method='GET')
        return self.toDmObjectList(responseData, DatasetMetadata)

    @CatRestApi.execute
    def getExperimentDatasets(self, experimentName, queryDict={}):
        if not experimentName:
            raise InvalidRequest('Invalid experiment name provided.')
        url = '%s/datasetsByExperiment/%s' % (self.getContextRoot(), experimentName)
        url += '?queryDict=%s' % (Encoder.encode(json.dumps(queryDict)))
        responseData = self.sendSessionRequest(url=url, method='GET')
        return self.toDmObjectList(responseData, DatasetMetadata)

    @CatRestApi.execute
    def getDatasetById(self, id):
        if not id:
            raise InvalidRequest('Invalid dataset id provided.')
        url = '%s/datasets/%s' % (self.getContextRoot(), id)
        responseData = self.sendSessionRequest(url=url, method='GET')
        return DatasetMetadata(responseData)

    @CatRestApi.execute
    def getExperimentDataset(self, experimentName, datasetName):
        if not experimentName:
            raise InvalidRequest('Invalid experiment name provided.')
        if not datasetName:
            raise InvalidRequest('Invalid dataset name provided.')
        url = '%s/datasetsByExperiment/%s/%s' % (self.getContextRoot(), experimentName, datasetName)
        responseData = self.sendSessionRequest(url=url, method='GET')
        return DatasetMetadata(responseData)

    @CatRestApi.execute
    def getExperimentDatasetFiles(self, experimentName, datasetName):
        if not experimentName:
            raise InvalidRequest('Invalid experiment name provided.')
        if not datasetName:
            raise InvalidRequest('Invalid dataset name provided.')
        url = '%s/filesByExperimentDataset/%s/%s' % (self.getContextRoot(), experimentName, datasetName)
        responseData = self.sendSessionRequest(url=url, method='GET')
        return self.toDmObjectList(responseData, FileMetadata)

#######################################################################
# Testing.

if __name__ == '__main__':
    api = DatasetRestApi()
    print api.getDatasets()
    print api.getDatasetById('556de0059e058b0ef4c4413b')
    print api.getDatasetByName('xyz-001')

    import time
    t = long(time.time())
    datasetInfo = {
        'datasetName' : 'sv-%s' % t,
        'experimentName' : 'exp1',
        'power' : 12,
        'powerUnits' : 'kW',
        'force' : 15,
        'forceUnits' : 'N',
        'cKey' : {'a' : 1, 'b' : 'B', 'c' : 2.2},
    }
    datasetMetadata = api.addDatasetByName(datasetInfo)

    print '\nADDED DATASET:\n', datasetMetadata
 
    datasetInfo['updateKey'] = 'here is desc'
    datasetMetadata = api.updateDatasetByName(datasetInfo)
    print '\nUPDATED DATASET:\n', datasetMetadata

    datasetInfo['updateKey2'] = 'new desc'
    datasetInfo['id'] = datasetMetadata.get('id')
    datasetMetadata = api.updateDatasetById(datasetInfo)
    print '\nUPDATED DATASET:\n', datasetMetadata

    queryDict = { 'experimentName' : 'exp2' }
    print '\nQUERY DATASETS:\n', api.getDatasets(queryDict=queryDict)