Parcourir la source

Fix: Server rendering crashes when leaving expe #4

Jérôme BUISINE il y a 4 ans
Parent
commit
6f3fdfb925
5 fichiers modifiés avec 40 ajouts et 39 suppressions
  1. 5 7
      DOCUMENTATION.md
  2. 3 5
      expe/config.py
  3. 22 20
      expe/expes/run.py
  4. 1 1
      expe/templates/expe/expe.html
  5. 9 6
      expe/views.py

+ 5 - 7
DOCUMENTATION.md

@@ -31,12 +31,10 @@ An example for the `quest_one_image` key experience:
     'params':{
         'iterations': 10
     },
+
+    # if others custom session param are directly set for experience
     'session_params': [
-        'expe_percentage',
-        'expe_orientation',
-        'expe_position',
-        'expe_stim',
-        'expe_previous_iteration'
+        'expe_data',
     ],
 
     # template file used in django `expe` route
@@ -118,7 +116,7 @@ line += ";" + str(previous_percentage)
 line += ";" + str(previous_orientation) 
 line += ";" + str(previous_position) 
 line += ";" + str(answer) 
-line += ";" + str(answer_time) 
+line += ";" + str(expe_answer_time) 
 line += ";" + str(entropy) 
 line += '\n'
 
@@ -143,5 +141,5 @@ If you want to create your own template, specify your template path into configu
 
 Example of way to use your experience data into template:
 ```python
-{{expe_data|get_value_from_dict:'image_path'}}
+{{request.session.expe_data|get_value_from_dict:'image_path'}}
 ```

+ 3 - 5
expe/config.py

@@ -34,12 +34,10 @@ expes_configuration         = {
         'params':{
             'iterations': 10
         },
+       
+        # if others custom session param are directly set for experience
         'session_params': [
-            'expe_percentage',
-            'expe_orientation',
-            'expe_position',
-            'expe_stim',
-            'expe_previous_iteration'
+            'expe_data',
         ],
 
         # template file used in django `expe` route

+ 22 - 20
expe/expes/run.py

@@ -43,18 +43,21 @@ def run_quest_one_image(request, model_filepath, output_file):
         if request.session['expe_previous_iteration'] == iteration:
             return None
         else:
+            current_expe_data = request.session['expe_data']
             answer = int(request.GET.get('answer'))
-            answer_time = time.time() - request.session['answer_time']
-            print("Answer time is ", answer_time)
-            previous_percentage = request.session.get('expe_percentage')
-            previous_orientation = request.session.get('expe_orientation')
-            previous_position = request.session.get('expe_position')
-            previous_stim = request.session.get('expe_stim')
+            expe_answer_time = time.time() - current_expe_data['expe_answer_time']
+            previous_percentage = current_expe_data['expe_percentage']
+            previous_orientation = current_expe_data['expe_orientation']
+            previous_position = current_expe_data['expe_position']
+            previous_stim = current_expe_data['expe_stim']
+
+            print("Answer time is ", expe_answer_time)
 
     # 3. Load or create Quest instance
     # default params
+    # TODO : add specific thresholds information for scene
     thresholds = np.arange(50, 10000, 50)
-    stim_space=np.asarray(qualities)
+    stim_space = np.asarray(qualities)
     slopes = np.arange(0.0001, 0.001, 0.00003)
 
     # check if necessary to construct `quest` object
@@ -81,7 +84,7 @@ def run_quest_one_image(request, model_filepath, output_file):
         line += ";" + str(previous_orientation) 
         line += ";" + str(previous_position) 
         line += ";" + str(answer) 
-        line += ";" + str(answer_time) 
+        line += ";" + str(expe_answer_time) 
         line += ";" + str(entropy) 
         line += '\n'
 
@@ -123,21 +126,20 @@ def run_quest_one_image(request, model_filepath, output_file):
     if img_merge is not None:
         img_merge.save(filepath_img)
 
-    # 6. Prepare session data for current iteration and data for view
-    # set current step data
-    request.session['expe_percentage'] = percentage
-    request.session['expe_orientation'] = orientation
-    request.session['expe_position'] = position
-    request.session['answer_time'] = time.time()
-    request.session['expe_previous_iteration'] = iteration
-    request.session['expe_stim'] = str(next_stim)
+    # 6. Prepare experience data for current iteration and data for view
     
-    # expe is now started
-    request.session['expe_started'] = True
-
     # here you can save whatever you need for you experience
     data_expe = {
-        'image_path': filepath_img
+        'image_path': filepath_img,
+        'expe_percentage': percentage,
+        'expe_orientation': orientation,
+        'expe_position': position,
+        'expe_answer_time': time.time(),
+        'expe_previous_iteration': iteration,
+        'expe_stim': str(next_stim)
     }
+    
+    # expe is now started
+    request.session['expe_started'] = True
 
     return data_expe

+ 1 - 1
expe/templates/expe/expe.html

@@ -18,7 +18,7 @@
 
     <!-- TODO : Load    img from bitmap with javascript `loadImg.js` -->
     {% if not request.session.expe_finished %}
-        <img id="expeImg" src="{{expe_data|get_value_from_dict:'image_path'}}" data-img="{{request.session.img_merged}}"/>
+        <img id="expeImg" src="{{request.session.expe_data|get_value_from_dict:'image_path'}}" data-img="{{request.session.img_merged}}"/>
     {% endif %}
 
     {% block javascripts %}

+ 9 - 6
expe/views.py

@@ -148,18 +148,21 @@ def expe(request):
         del request.session['scene']
         del request.session['qualities']
         del request.session['timestamp']
-        del request.session['answer_time']
 
         # specific current expe session params (see `config.py`)
         for key in cfg.expes_configuration[expe_name]['session_params']:
             del request.session[key]
 
-    # get base data
+    # set expe current data into session (replace only if experience data changed)
+    if expe_data is not None:
+        request.session['expe_data'] = expe_data
+
+        # get base data
     data = get_base_data(expe_name)
-    # expe parameters
-    data['expe_name']       = expe_name
-    data['expe_data']       = expe_data
-    data['end_text']        = cfg.expes_configuration[expe_name]['text']['end_text']
+
+    # other experiences information
+    data['expe_name']            = expe_name
+    data['end_text']             = cfg.expes_configuration[expe_name]['text']['end_text']
 
     return render(request, cfg.expes_configuration[expe_name]['template'], data)