From 20f98460c559317c626001508313f43e4aa46d9f Mon Sep 17 00:00:00 2001
From: Sinisa Veseli <sveseli@aps.anl.gov>
Date: Wed, 2 Dec 2015 17:18:56 +0000
Subject: [PATCH] DAQ interfaces changed in order to allow simultaneous daqs
 for the same experiment

---
 .../service/experimentRouteDescriptor.py      | 17 +++++--
 .../service/experimentSessionController.py    | 44 +++++++++++--------
 2 files changed, 38 insertions(+), 23 deletions(-)

diff --git a/src/python/dm/daq_web_service/service/experimentRouteDescriptor.py b/src/python/dm/daq_web_service/service/experimentRouteDescriptor.py
index 84d18d50..7fc1ae82 100755
--- a/src/python/dm/daq_web_service/service/experimentRouteDescriptor.py
+++ b/src/python/dm/daq_web_service/service/experimentRouteDescriptor.py
@@ -22,7 +22,7 @@ class ExperimentRouteDescriptor:
             # Start experiment daq
             {
                 'name' : 'startDaq',
-                'path' : '%s/experiments/startDaq' % contextRoot,
+                'path' : '%s/experimentsByName/:(experimentName)/startDaq/:(dataDirectory)' % contextRoot,
                 'controller' : experimentSessionController,
                 'action' : 'startDaq',
                 'method' : ['POST']
@@ -31,16 +31,25 @@ class ExperimentRouteDescriptor:
             # Stop experiment daq
             {
                 'name' : 'stopDaq',
-                'path' : '%s/experiments/stopDaq' % contextRoot,
+                'path' : '%s/experimentsByName/:(experimentName)/stopDaq/:(dataDirectory)' % contextRoot,
                 'controller' : experimentSessionController,
                 'action' : 'stopDaq',
                 'method' : ['POST']
             },
 
+            # Get daq info
+            {
+                'name' : 'getDaqInfo',
+                'path' : '%s/experimentDaqs/:(id)' % contextRoot,
+                'controller' : experimentSessionController,
+                'action' : 'getDaqInfo',
+                'method' : ['GET']
+            },
+
             # Upload experiment data 
             {
                 'name' : 'upload',
-                'path' : '%s/experiments/upload' % contextRoot,
+                'path' : '%s/experimentsByName/:(experimentName)/upload/:(dataDirectory)' % contextRoot,
                 'controller' : experimentSessionController,
                 'action' : 'upload',
                 'method' : ['POST']
@@ -49,7 +58,7 @@ class ExperimentRouteDescriptor:
             # Get upload info
             {
                 'name' : 'getUploadInfo',
-                'path' : '%s/experiments/upload/:(id)' % contextRoot,
+                'path' : '%s/experimentUploads/:(id)' % contextRoot,
                 'controller' : experimentSessionController,
                 'action' : 'getUploadInfo',
                 'method' : ['GET']
diff --git a/src/python/dm/daq_web_service/service/experimentSessionController.py b/src/python/dm/daq_web_service/service/experimentSessionController.py
index 6878b62e..ec8c578b 100755
--- a/src/python/dm/daq_web_service/service/experimentSessionController.py
+++ b/src/python/dm/daq_web_service/service/experimentSessionController.py
@@ -19,12 +19,10 @@ class ExperimentSessionController(DmSessionController):
     @cherrypy.expose
     @DmSessionController.require(DmSessionController.isAdministrator())
     @DmSessionController.execute
-    def startDaq(self, **kwargs):
-        experimentName = kwargs.get('experimentName')
+    def startDaq(self, experimentName, dataDirectory, **kwargs):
         if not experimentName:
             raise InvalidRequest('Missing experiment name.')
         experimentName = Encoder.decode(experimentName)
-        dataDirectory = kwargs.get('dataDirectory')
         if not dataDirectory:
             raise InvalidRequest('Missing data directory.')
         dataDirectory = Encoder.decode(dataDirectory)
@@ -32,9 +30,6 @@ class ExperimentSessionController(DmSessionController):
         encodedDaqInfo = kwargs.get('daqInfo')
         if encodedDaqInfo is not None:
             daqInfo = json.loads(Encoder.decode(encodedDaqInfo))
-        else:
-            daqInfo['experimentName'] = experimentName
-            daqInfo['dataDirectory'] = dataDirectory
         response = self.experimentSessionControllerImpl.startDaq(experimentName, dataDirectory, daqInfo).getFullJsonRep()
         self.logger.debug('Returning: %s' % response)
         return response
@@ -42,29 +37,40 @@ class ExperimentSessionController(DmSessionController):
     @cherrypy.expose
     @DmSessionController.require(DmSessionController.isAdministrator())
     @DmSessionController.execute
-    def stopDaq(self, **kwargs):
-        experimentName = kwargs.get('experimentName')
+    def stopDaq(self, experimentName, dataDirectory, **kwargs):
         if not experimentName:
             raise InvalidRequest('Missing experiment name.')
         experimentName = Encoder.decode(experimentName)
-        response = self.experimentSessionControllerImpl.stopDaq(experimentName).getFullJsonRep()
+        if not dataDirectory:
+            raise InvalidRequest('Missing data directory.')
+        dataDirectory = Encoder.decode(dataDirectory)
+        response = self.experimentSessionControllerImpl.stopDaq(experimentName, dataDirectory).getFullJsonRep()
         self.logger.debug('Returning: %s' % response)
         return response
 
     @cherrypy.expose
     @DmSessionController.require(DmSessionController.isAdministrator())
     @DmSessionController.execute
-    def upload(self, **kwargs):
-        encodedDaqInfo = kwargs.get('daqInfo')
-        if not encodedDaqInfo:
-            raise InvalidRequest('Invalid DAQ info provided.')
-        daqInfo = json.loads(Encoder.decode(encodedDaqInfo))
+    def getDaqInfo(self, id, **kwargs):
+        response = self.experimentSessionControllerImpl.getDaqInfo(id).getFullJsonRep()
+        self.logger.debug('Returning: %s' % response)
+        return response
 
-        if not daqInfo.has_key('experimentName'):
-            raise InvalidRequest('Experiment name is missing.')
-        if not daqInfo.has_key('dataDirectory'):
-            raise InvalidRequest('Data directory is missing.')
-        response = self.experimentSessionControllerImpl.upload(daqInfo).getFullJsonRep()
+    @cherrypy.expose
+    @DmSessionController.require(DmSessionController.isAdministrator())
+    @DmSessionController.execute
+    def upload(self, experimentName, dataDirectory, **kwargs):
+        if not experimentName:
+            raise InvalidRequest('Missing experiment name.')
+        experimentName = Encoder.decode(experimentName)
+        if not dataDirectory:
+            raise InvalidRequest('Missing data directory.')
+        dataDirectory = Encoder.decode(dataDirectory)
+        daqInfo = {}
+        encodedDaqInfo = kwargs.get('daqInfo')
+        if encodedDaqInfo:
+            daqInfo = json.loads(Encoder.decode(encodedDaqInfo))
+        response = self.experimentSessionControllerImpl.upload(experimentName, dataDirectory, daqInfo).getFullJsonRep()
         self.logger.debug('Returning: %s' % response)
         return response
 
-- 
GitLab