Parcourir la source

Merge branch 'release/v0.1.9'

Jérôme BUISINE il y a 4 ans
Parent
commit
e3355333cd

+ 18 - 14
expe/config.py

@@ -2,27 +2,31 @@
 import os
 
 # env variables
-WEB_API_PREFIX_URL_KEY       = 'WEB_API_PREFIX_URL'
-WEB_API_PREFIX_URL           = os.environ.get(WEB_API_PREFIX_URL_KEY) \
-                               if os.environ.get(WEB_API_PREFIX_URL_KEY) is not None else 'api'
+WEB_API_PREFIX_URL_KEY         = 'WEB_API_PREFIX_URL'
+WEB_API_PREFIX_URL             = os.environ.get(WEB_API_PREFIX_URL_KEY) \
+                                 if os.environ.get(WEB_API_PREFIX_URL_KEY) is not None else 'api'
 
 # api variables
-DIRAN_DOMAIN_NAME            = "https://diran.univ-littoral.fr/"
-GET_SCENE_QUALITIES_API_URL  = DIRAN_DOMAIN_NAME + WEB_API_PREFIX_URL + "/listSceneQualities?sceneName={0}"
-GET_SCENE_IMAGE_API_URL      = DIRAN_DOMAIN_NAME + WEB_API_PREFIX_URL + "/getImage?sceneName={0}&imageQuality={1}"
-GET_SCENES_API_URL           = DIRAN_DOMAIN_NAME + WEB_API_PREFIX_URL + "/listScenes"
+DIRAN_DOMAIN_NAME              = "https://diran.univ-littoral.fr/"
+GET_SCENE_QUALITIES_API_URL    = DIRAN_DOMAIN_NAME + WEB_API_PREFIX_URL + "/listSceneQualities?sceneName={0}"
+GET_SCENE_IMAGE_API_URL        = DIRAN_DOMAIN_NAME + WEB_API_PREFIX_URL + "/getImage?sceneName={0}&imageQuality={1}"
+GET_SCENES_API_URL             = DIRAN_DOMAIN_NAME + WEB_API_PREFIX_URL + "/listScenes"
 
 # folder variables
-model_expe_folder            = "expes_models/{0}/{1}"
-output_expe_folder           = "expes_results"
-output_expe_folder_name_day  = "expes_results/{0}/{1}"
-output_tmp_folder            = "tmp"
+# TODO : dispatch into day and experiment ID
+model_expe_folder              = "expes_models/{0}/{1}"
+output_expe_folder             = "expes_results"
+output_expe_folder_date        = "expes_results/date"
+output_expe_folder_id          = "expes_results/expeId"
+output_expe_folder_name_id_day = "expes_results/expeId/{0}/{1}/{2}/{3}"
+output_expe_folder_name_day    = "expes_results/date/{0}/{1}/{2}"
+output_tmp_folder              = "tmp"
 
 # expes list
-expe_name_list              = ["quest_one_image"]
+expe_name_list                 = ["quest_one_image"]
 
-# configure experimentss labels
-expes_configuration         = {
+# configure experiments labels
+expes_configuration            = {
 
     # First experiments configuration
     'quest_one_image':{

+ 1 - 0
expe/expes/run.py

@@ -75,6 +75,7 @@ def run_quest_one_image(request, model_filepath, output_file):
         # TODO : check `i` variable 
         # update of `quest`
         # qp.update(qualities[i], answer)
+        # Use of previous stim
         qp.update(qualities[iteration], answer) 
         entropy = qp.get_entropy()
 

+ 18 - 0
expe/templates/expe/expe_indications.html

@@ -12,6 +12,24 @@
     <br />
     <h5>{{indication}}</h5>
 
+    <br />
+    <br />
+
+    <div class="row">
+        <div class="col-md-4 offset-md-4">
+            <form method="GET" action="/expe">
+                <div class="form-group">
+                    <input type="hidden" name="scene" value="{{scene_name}}"/>
+                    <input type="hidden" name="expe" value="{{expe_name}}"/>
+                    <input type="hidden" name="iteration" value="0"/>
+
+                    <label for="experimentId">Select experiment identifier:</label>
+                    <input type="text" class="form-control" name="experimentId" placeholder="Enter your experiment identifier"/>
+                </div>
+            </form>
+        </div>
+    </div>
+
     <p id="expeIndication"><strong>Press enter to begin experiments</strong></p>
 
 {% endblock %}

+ 123 - 23
expe/templates/expe/expe_results.html

@@ -1,6 +1,7 @@
 {% extends 'base.html' %}
 
 {% load staticfiles %}
+{% load apptags %}
 
 {% block title %}
     Expe {{ expe_name }}
@@ -26,36 +27,135 @@
             <br/>
             {% if folders %}
 
+                <!-- List of items which has identifier when user pass experiment -->
+                <h3>By experiment identifier</h3>
                 <ul class="list-group">
+                    {% with folders|get_value_from_dict:'expeId' as id_folder %}
 
-                {% for name, folder in folders.items %} 
-                    
-                        <li class="list-group-item">
-                            
-                            <div class="row">
-                                <div class="col-md-10">{{name}} </div>
-                                <div class="col-md-1 download-list" data-download-path="{{expe}}/{{name}}"><i class="fas fa-download"></i></div>
-                                <div class="col-md-1 date-folder-list"><i class="fas fa-arrow-circle-right"></i></div>
-                            </div>
-                            
-                            <ul class="list-group files-list" style="display: none">
+                        {% for id_name, id in id_folder.items %} 
+                                            
+                            <li class="list-group-item">
+                                
+                                <div class="row">
+                                    <div class="col-md-10">{{id_name}} </div>
+                                    <div class="col-md-1 download-list" data-download-path="expeId/{{expe}}/{{id_name}}"><i class="fas fa-download"></i></div>
+                                    <div class="col-md-1 date-folder-list"><i class="fas fa-arrow-circle-right"></i></div>
+                                </div>
+                                
+                                <ul class="list-group files-list" style="display: none">
+
+                                    <hr />
+                                    
+                                    {% for day_name, day in id.items %} 
+                                        
+                                        <li class="list-group-item">
+                                            
+                                            <div class="row">
+                                                <div class="col-md-10">{{day_name}} </div>
+                                                <div class="col-md-1 download-list" data-download-path="expeId/{{expe}}/{{id_name}}/{{day_name}}"><i class="fas fa-download"></i></div>
+                                                <div class="col-md-1 date-folder-list"><i class="fas fa-arrow-circle-right"></i></div>
+                                            </div>
+                                            
+                                            <ul class="list-group files-list" style="display: none">
+
+                                                <hr />
+                                                <li class="list-group-item">
+                                                
+                                                {% for user_name, user in day.items %}
+
+
+                                                        <div class="row">
+                                                            <div class="col-md-10"><strong>User: </strong>{{user_name}} </div>
+                                                            <div class="col-md-1 download-list" data-download-path="expeId/{{expe}}/{{id_name}}/{{day_name}}/{{user_name}}"><i class="fas fa-download"></i></div>
+                                                            <div class="col-md-1 date-folder-list"><i class="fas fa-arrow-circle-right"></i></div>
+                                                        </div>
+                                                        
+
+                                                        <ul class="list-group files-list" style="display: none">
+
+                                                            <hr />
+                                                            {% for file in user %}
+
+                                                                <li class="list-group-item">
+                                                                
+                                                                    <div class="row">
+                                                                        <div class="col-md-11">{{file}}</div>
+                                                                        <div class="col-md-1 download-list" data-download-path="expeId/{{expe}}/{{id_name}}/{{day_name}}/{{user_name}}/{{file}}"><i class="fas fa-download"></i></div>
+                                                                    </div>
+                                                                            
+                                                                </li>
+                                                            {% endfor %}
+                                                        
+                                                        </ul>
+                                                </li>
+                                                {% endfor %}
+                                            </ul>
+                                        </li>
+                                    {% endfor %} 
+
+                                    </ul>
+                                </li>
+                            {% endfor %} 
+                    {% endwith %}
+                </ul>
 
-                                <hr />
-                                {% for file in folder %}
-                                    <li class="list-group-item">
+
+                <!-- List of items which does not have identifier when user pass experiment -->
+                <h3>By date</h3>
+                <ul class="list-group">
+                
+                    {% with folders|get_value_from_dict:'date' as date_folder %}
+                        {% for day_name, day in date_folder.items %} 
+                            
+                                <li class="list-group-item">
+                                    
+                                    <div class="row">
+                                        <div class="col-md-10">{{day_name}} </div>
+                                        <div class="col-md-1 download-list" data-download-path="date/{{expe}}/{{day_name}}"><i class="fas fa-download"></i></div>
+                                        <div class="col-md-1 date-folder-list"><i class="fas fa-arrow-circle-right"></i></div>
+                                    </div>
                                     
-                                        <div class="row">
-                                            <div class="col-md-11">{{file}} </div>
-                                            <div class="col-md-1 download-list" data-download-path="{{expe}}/{{name}}/{{file}}"><i class="fas fa-download"></i></div>
-                                        </div>
+                                    <ul class="list-group files-list" style="display: none">
+
+                                        <hr />
+                                        <li class="list-group-item">
+                                        
+                                        {% for user_name, user in day.items %}
+
+
+                                                <div class="row">
+                                                    <div class="col-md-10"><strong>User: </strong>{{user_name}} </div>
+                                                    <div class="col-md-1 download-list" data-download-path="date/{{expe}}/{{day_name}}/{{user_name}}"><i class="fas fa-download"></i></div>
+                                                    <div class="col-md-1 date-folder-list"><i class="fas fa-arrow-circle-right"></i></div>
+                                                </div>
                                                 
-                                    </li>
-                                {% endfor %}
-                            </ul>
-                        </li>
-                {% endfor %}
+
+                                                <ul class="list-group files-list" style="display: none">
+
+                                                    <hr />
+                                                    {% for file in user %}
+
+                                                        <li class="list-group-item">
+                                                        
+                                                            <div class="row">
+                                                                <div class="col-md-11">{{file}}</div>
+                                                                <div class="col-md-1 download-list" data-download-path="date/{{expe}}/{{day_name}}/{{user_name}}/{{file}}"><i class="fas fa-download"></i></div>
+                                                            </div>
+                                                                    
+                                                        </li>
+                                                    {% endfor %}
+                                                
+                                                </ul>
+                                        </li>
+                                        {% endfor %}
+                                    </ul>
+                                </li>
+                        {% endfor %} 
+                    {% endwith %}
+
 
                 </ul>
+
             {% csrf_token %}
 
             {% else %}

+ 71 - 10
expe/views.py

@@ -75,11 +75,13 @@ def indications(request):
 
     # get param 
     expe_name = request.GET.get('expe')
+    scene_name = request.GET.get('scene')
 
     # get base data
     data = get_base_data()
     # expe parameters
     data['expe_name']  = expe_name
+    data['scene_name'] = scene_name
     data['question']   = cfg.expes_configuration[expe_name]['text']['question']
     data['indication'] = cfg.expes_configuration[expe_name]['text']['indication']
 
@@ -107,12 +109,23 @@ def expe(request):
 
     # create output folder for expe_result
     current_day = datetime.strftime(datetime.utcnow(), "%Y-%m-%d")
-    results_folder = os.path.join(settings.MEDIA_ROOT, cfg.output_expe_folder_name_day.format(expe_name, current_day))
 
+    user_identifier = request.session.get('id')
+    experiment_id = request.session.get('experimentId')
+
+    print("ExperimentId is : " + experiment_id)
+
+    # check if experimentId is used or not
+    if len(experiment_id) == 0:
+        output_expe_folder = cfg.output_expe_folder_name_day.format(expe_name, current_day, user_identifier)
+    else:
+        output_expe_folder = cfg.output_expe_folder_name_id_day.format(expe_name, experiment_id, current_day, user_identifier)
+
+    results_folder = os.path.join(settings.MEDIA_ROOT, output_expe_folder)
     if not os.path.exists(results_folder):
         os.makedirs(results_folder)
 
-    result_filename = scene_name + '_' + request.session.get('id') + '_' + request.session.get('timestamp') +".csv"
+    result_filename = scene_name + '_' + request.session.get('timestamp') +".csv"
     results_filepath = os.path.join(results_folder, result_filename)
 
     if not os.path.exists(results_filepath):
@@ -146,6 +159,7 @@ def expe(request):
         # here generic expe params
         del request.session['expe']
         del request.session['scene']
+        del request.session['experimentId']
         del request.session['qualities']
         del request.session['timestamp']
 
@@ -181,19 +195,62 @@ def list_results(request, expe=None):
     else:
         if expe in cfg.expe_name_list:
 
-            folder_path = os.path.join(settings.MEDIA_ROOT, cfg.output_expe_folder, expe)
+            folder_date_path = os.path.join(settings.MEDIA_ROOT, cfg.output_expe_folder_date, expe)
+            folder_id_path   = os.path.join(settings.MEDIA_ROOT, cfg.output_expe_folder_id, expe)
 
-            # init folder dictionnary
-            folders = {}
+            # extract date files
+            folders_date = {}
 
-            if os.path.exists(folder_path):
+            if os.path.exists(folder_date_path):
             
-                days = sorted(os.listdir(folder_path), reverse=True)
+                days = sorted(os.listdir(folder_date_path), reverse=True)
 
+                # get all days
                 for day in days:
-                    day_path = os.path.join(folder_path, day)
-                    filenames = os.listdir(day_path)
-                    folders[day] = filenames
+                    day_path = os.path.join(folder_date_path, day)
+                    users = os.listdir(day_path)
+
+                    folders_user = {}
+                    # get all users files
+                    for user in users:
+                        user_path = os.path.join(day_path, user)
+                        filenames = os.listdir(user_path)
+                        folders_user[user] = filenames
+                    
+                    # attach users to this day
+                    folders_date[day] = folders_user
+
+            # extract expe id files
+            folders_id = {}
+
+            if os.path.exists(folder_id_path):
+                
+                ids = sorted(os.listdir(folder_id_path), reverse=True)
+
+                # get all days
+                for identifier in ids:
+                    id_path = os.path.join(folder_id_path, identifier)
+                    days = sorted(os.listdir(id_path), reverse=True)
+
+                    folder_days = {}
+                    # get all days
+                    for day in days:
+                        day_path = os.path.join(id_path, day)
+                        users = os.listdir(day_path)
+
+                        folders_user = {}
+                        # get all users files
+                        for user in users:
+                            user_path = os.path.join(day_path, user)
+                            filenames = os.listdir(user_path)
+                            folders_user[user] = filenames
+                        
+                        # attach users to this day
+                        folder_days[day] = folders_user
+
+                    folders_id[identifier] = folder_days
+
+            folders = { 'date': folders_date, 'expeId': folders_id}
         else:
             raise Http404("Expe does not exists")
 
@@ -286,6 +343,10 @@ def refresh_data(request, expe_name, scene_name):
     # update unique timestamp each time new experiments is launched
     request.session['timestamp'] = datetime.strftime(datetime.utcnow(), "%Y-%m-%d_%Hh%Mm%Ss")
 
+    # retrieve and store experimentId
+    expe_id = request.GET.get('experimentId')
+    request.session['experimentId'] = expe_id
+
     # TODO : add in cache ref_image
     # get reference image
     #ref_image = api.get_image(scene_name, 'max')

+ 1 - 1
static/css/expe.css

@@ -12,7 +12,7 @@ body {
 }
 
 #expeIndication{
-    margin-top: 30%;
+    margin-top: 20%;
 }
 
 

+ 2 - 1
static/js/indications.js

@@ -15,7 +15,8 @@ const checkKey = e => {
      }
      else if (e.keyCode === KEYCODE_ENTER) {
           // right arrow
-          const params = `?scene=${scene}&expe=${expe}&iteration=0`
+          const experimentId = document.getElementsByName('experimentId')[0].value
+          const params = `?scene=${scene}&expe=${expe}&experimentId=${experimentId}&iteration=0`
           console.log(expeUrl + params)
           window.location = expeUrl + params
      }