diff --git a/doc/sphinx/source/dm.ds_web_service.api.rst b/doc/sphinx/source/dm.ds_web_service.api.rst index 00894151f61c41fcdf0a493433e97d844b500773..e42cde42e7303ca4349249891362684d430d6d9d 100644 --- a/doc/sphinx/source/dm.ds_web_service.api.rst +++ b/doc/sphinx/source/dm.ds_web_service.api.rst @@ -7,6 +7,6 @@ ExperimentDsApi .. autoclass:: dm.ds_web_service.api.experimentDsApi.ExperimentDsApi() :show-inheritance: - :members: __init__, getExperimentTypes, getExperiments, getExperimentsByStation + :members: __init__, getExperimentTypes, getExperiments, getExperimentsByStation, getExperimentByName, getExperimentById, addExperiment diff --git a/src/python/dm/ds_web_service/api/experimentDsApi.py b/src/python/dm/ds_web_service/api/experimentDsApi.py index b0e97e893bd35e9220d413f967a836525343958a..0271700fd66f00d3cfc6a3aab2e67f9379093748 100755 --- a/src/python/dm/ds_web_service/api/experimentDsApi.py +++ b/src/python/dm/ds_web_service/api/experimentDsApi.py @@ -88,11 +88,13 @@ class ExperimentDsApi(DsRestApi): :returns: list of Experiment objects + :raises InvalidRequest: if station name is empty or None + :raises AuthorizationError: in case user is not authorized to manage the given DM station :raises DmException: in case of any other errors - >>> experimentList = api.getExperiments() + >>> experimentList = api.getExperimentsByStation() >>> for experiment in experimentList: >>> print experiment['id'], experiment['name'] ''' @@ -103,16 +105,52 @@ class ExperimentDsApi(DsRestApi): responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, Experiment) - @DsRestApi.execute + @DsRestApi.execute2 def getExperimentByName(self, name): + ''' + Get experiment. + + :param name: experiment name + :type name: str + + :returns: Experiment object + + :raises InvalidRequest: if experiment name is empty or None + + :raises AuthorizationError: in case user is not authorized to manage the DM station to which this experiment belongs + + :raises DmException: in case of any other errors + + >>> experiment = api.getExperimentByName('test01') + >>> print experiment['id'] + ''' + url = '%s/experimentsByName/%s' % (self.getContextRoot(), name) if name is None or not len(name): raise InvalidRequest('Experiment name must be provided.') responseDict = self.sendSessionRequest(url=url, method='GET') return Experiment(responseDict) - @DsRestApi.execute + @DsRestApi.execute2 def getExperimentById(self, id): + ''' + Get experiment. + + :param id: experiment id + :type id: int + + :returns: Experiment object + + :raises InvalidRequest: if experiment id is None + + :raises AuthorizationError: in case user is not authorized to manage the DM station to which this experiment belongs + + :raises DmException: in case of any other errors + + >>> experiment = api.getExperimentById(123) + >>> print experiment['name'] + ''' + url = '%s/experimentsById/%s' % (self.getContextRoot(), id) if id is None: raise InvalidRequest('Experiment id must be provided.') @@ -146,8 +184,43 @@ class ExperimentDsApi(DsRestApi): responseDict = self.sendSessionRequest(url=url, method='PUT') return Experiment(responseDict) - @DsRestApi.execute + @DsRestApi.execute2 def addExperiment(self, name, stationName, typeName, description, startDate, endDate): + ''' + Add experiment. + + :param name: experiment name + :type name: str + + :param stationName: DM station name + :type stationName: str + + :param typeName: experiment type + :type typeName: str + + :param description: experiment description + :type description: str + + :param startDate: experiment start date + :type startDate: str + + :param endDate: experiment end date + :type endDate: str + + :returns: Experiment object + + :raises InvalidRequest: if one of the required arguments (experiment name, station name and experiment type) is empty or None + + :raises AuthorizationError: in case user is not authorized to manage the DM station to which this experiment belongs + + :raises ObjectAlreadyExists: if experiment with a given name already exists + + :raises DmException: in case of any other errors + + >>> experiment = api.addExperiment(name='test01', stationName='TEST', typeName='TEST') + >>> print experiment['id'] + ''' + url = '%s/experiments' % (self.getContextRoot()) if not name: raise InvalidRequest('Experiment name must be provided.')