Parcourir la source

Experiment id added and saved data way update

Jérôme BUISINE il y a 4 ans
Parent
commit
6488f954f3
3 fichiers modifiés avec 212 ajouts et 53 suppressions
  1. 17 14
      expe/config.py
  2. 123 23
      expe/templates/expe/expe_results.html
  3. 72 16
      expe/views.py

+ 17 - 14
expe/config.py

@@ -2,28 +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
 # TODO : dispatch into day and experiment ID
-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"
+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':{

+ 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 %}

+ 72 - 16
expe/views.py

@@ -93,7 +93,6 @@ def expe(request):
     
     # get param 
     expe_name = request.GET.get('expe')
-    expe_id = request.GET.get('expeId')
     scene_name = request.GET.get('scene')
     
     # unique user ID during session (user can launch multiple exeperiences)
@@ -102,20 +101,31 @@ def expe(request):
 
     # first time expe is launched add expe information
     if 'expe' not in request.session or expe_name != request.session.get('expe'):
-        refresh_data(request, expe_name, expe_id, scene_name)
+        refresh_data(request, expe_name, scene_name)
 
     # refresh if scene_name changed
     if 'scene' not in request.session or scene_name != request.session.get('scene'):
-        refresh_data(request, expe_name, expe_id, scene_name)
+        refresh_data(request, expe_name, scene_name)
 
     # 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):
@@ -149,7 +159,7 @@ def expe(request):
         # here generic expe params
         del request.session['expe']
         del request.session['scene']
-        del request.session['expeId']
+        del request.session['experimentId']
         del request.session['qualities']
         del request.session['timestamp']
 
@@ -185,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")
 
@@ -276,12 +329,11 @@ def download_result(request):
 
 
 
-def refresh_data(request, expe_name, expe_id, scene_name):
+def refresh_data(request, expe_name, scene_name):
     '''
     Utils method to refresh data from session
     '''
     request.session['expe'] = expe_name
-    request.session['expeId'] = expe_id
     request.session['scene'] = scene_name
 
     request.session['expe_started'] = False
@@ -291,6 +343,10 @@ def refresh_data(request, expe_name, expe_id, 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')