From 60f9572e4e04e2d670dec853ad6d6a15d05bd5d7 Mon Sep 17 00:00:00 2001
From: "Barbara B. Frosik" <bfrosik@aps.anl.gov>
Date: Mon, 14 Sep 2015 19:51:05 +0000
Subject: [PATCH] modified storage service python code to include start/end
 dates when adding experiment

---
 sbin/create_dm_db.sh                               |  1 +
 .../dm/ds_web_service/api/experimentRestApi.py     |  6 +++++-
 .../dm/ds_web_service/cli/addExperimentCli.py      | 12 ++++++++++--
 .../service/experimentSessionController.py         |  8 +++++++-
 .../impl/experimentSessionControllerImpl.py        | 14 +++++++-------
 5 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/sbin/create_dm_db.sh b/sbin/create_dm_db.sh
index e2bd07b2..319b532f 100755
--- a/sbin/create_dm_db.sh
+++ b/sbin/create_dm_db.sh
@@ -221,3 +221,4 @@ $PG_CONTROL_SCRIPT restart
 echo "Database $DM_DB_NAME created successfully"
 echo
 
+
diff --git a/src/python/dm/ds_web_service/api/experimentRestApi.py b/src/python/dm/ds_web_service/api/experimentRestApi.py
index b2438352..155a679e 100755
--- a/src/python/dm/ds_web_service/api/experimentRestApi.py
+++ b/src/python/dm/ds_web_service/api/experimentRestApi.py
@@ -61,7 +61,7 @@ class ExperimentRestApi(DsRestApi):
         return Experiment(responseDict)
 
     @DsRestApi.execute
-    def addExperiment(self, name, experimentTypeId, description):
+    def addExperiment(self, name, experimentTypeId, description, startDate, endDate):
         url = '%s/experiments' % (self.getContextRoot())
         if name is None or not len(name):
             raise InvalidRequest('Experiment name must be provided.')
@@ -71,6 +71,10 @@ class ExperimentRestApi(DsRestApi):
         url += '&experimentTypeId=%s' % experimentTypeId
         if description is not None:
             url += '&description=%s' % Encoder.encode(description)
+        if startDate is not None:
+            url += '&startDate=%s' % Encoder.encode(startDate)
+        if endDate is not None:
+            url += '&endDate=%s' % Encoder.encode(endDate)
         responseDict = self.sendSessionRequest(url=url, method='POST')
         return Experiment(responseDict)
 
diff --git a/src/python/dm/ds_web_service/cli/addExperimentCli.py b/src/python/dm/ds_web_service/cli/addExperimentCli.py
index 0b4cf9e0..d1bc84ca 100755
--- a/src/python/dm/ds_web_service/cli/addExperimentCli.py
+++ b/src/python/dm/ds_web_service/cli/addExperimentCli.py
@@ -10,6 +10,8 @@ class AddExperimentCli(DsWebServiceSessionCli):
         self.addOption('', '--name', dest='name', help='Experiment name.')
         self.addOption('', '--type-id', dest='typeId', help='Experiment type id.')
         self.addOption('', '--description', dest='description', help='Experiment description.')
+        self.addOption('', '--startDate', dest='startDate', help='Experiment start date in format (15-AUG-15).')
+        self.addOption('', '--endDate', dest='endDate', help='Experiment end date in format (15-AUG-15).')
 
     def checkArgs(self):
         if self.options.name is None:
@@ -27,17 +29,23 @@ class AddExperimentCli(DsWebServiceSessionCli):
     def getDescription(self):
         return self.options.description
 
+    def getStartDate(self):
+        return self.options.startDate
+
+    def getEndDate(self):
+        return self.options.endDate
+
     def runCommand(self):
         self.parseArgs(usage="""
     dm-add-experiment --name=NAME --type-id=TYPEID
-        [--description=DESCRIPTION]
+        [--description=DESCRIPTION] [--startDate=STARTDATE] [--endDate=ENDDATE]
 
 Description:
     Add new experiment to the DM database. 
         """)
         self.checkArgs()
         api = ExperimentRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol())
-        experiment = api.addExperiment(self.getName(), self.getTypeId(), self.getDescription())
+        experiment = api.addExperiment(self.getName(), self.getTypeId(), self.getDescription(), self.getStartDate(), self.getEndDate())
         print experiment.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
 
 #######################################################################
diff --git a/src/python/dm/ds_web_service/service/experimentSessionController.py b/src/python/dm/ds_web_service/service/experimentSessionController.py
index 2fbf98ac..a1d664ab 100755
--- a/src/python/dm/ds_web_service/service/experimentSessionController.py
+++ b/src/python/dm/ds_web_service/service/experimentSessionController.py
@@ -57,7 +57,13 @@ class ExperimentSessionController(DmSessionController):
         description = kwargs.get('description')
         if description is not None:
             description = Encoder.decode(description)
-        response = self.experimentSessionControllerImpl.addExperiment(name, experimentTypeId, description).getFullJsonRep()
+        startDate = kwargs.get('startDate')
+        if startDate is not None:
+            startDate = Encoder.decode(startDate)
+        endDate = kwargs.get('endDate')
+        if endDate is not None:
+            endDate = Encoder.decode(endDate)
+        response = self.experimentSessionControllerImpl.addExperiment(name, experimentTypeId, description, startDate, endDate).getFullJsonRep()
         self.logger.debug('Returning: %s' % response)
         return response
 
diff --git a/src/python/dm/ds_web_service/service/impl/experimentSessionControllerImpl.py b/src/python/dm/ds_web_service/service/impl/experimentSessionControllerImpl.py
index 4ec9b5c5..d814ccc2 100755
--- a/src/python/dm/ds_web_service/service/impl/experimentSessionControllerImpl.py
+++ b/src/python/dm/ds_web_service/service/impl/experimentSessionControllerImpl.py
@@ -37,22 +37,22 @@ class ExperimentSessionControllerImpl(DmObjectManager):
         ExperimentManager.getInstance().updateExperimentWithStorageDataDirectory(experiment)
         return experiment
 
-    def addExperiment(self, name, experimentTypeId, description):
-        experiment = self.experimentDbApi.addExperiment(name, experimentTypeId, description)
+    def addExperiment(self, name, experimentTypeId, description, startDate, endDate):
+        experiment = self.experimentDbApi.addExperiment(name, experimentTypeId, description, startDate, endDate)
         return experiment
 
     def startExperiment(self, name):
         experiment = self.experimentDbApi.getExperimentWithUsers(name)
-        if experiment.get('startDate') is None:
-            experiment2 = self.experimentDbApi.setExperimentStartDateToNow(name)
-            experiment['startDate'] = experiment2['startDate']
+        #if experiment.get('startDate') is None:
+        #    experiment2 = self.experimentDbApi.setExperimentStartDateToNow(name)
+        #    experiment['startDate'] = experiment2['startDate']
         ExperimentManager.getInstance().createExperimentDataDirectory(experiment)
         return experiment
 
     def stopExperiment(self, name):
         experiment = self.experimentDbApi.getExperimentByName(name)
-        if experiment.get('endDate') is None:
-            experiment = self.experimentDbApi.setExperimentEndDateToNow(name)
+        #if experiment.get('endDate') is None:
+        #    experiment = self.experimentDbApi.setExperimentEndDateToNow(name)
         ExperimentManager.getInstance().updateExperimentWithStorageDataDirectory(experiment)
         return experiment
 
-- 
GitLab