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