Forked from
DM / dm-docs
261 commits behind, 782 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
datasetRestApi.py 5.63 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.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)