made session dict usage a lot safer (using dict.setdefault("key, default) instead of directly using dict["key"])
authordurandn
Fri, 10 Apr 2015 17:46:38 +0200
changeset 94 71a4a7300c35
parent 93 3d6f92563efe
child 95 0a131f9b92a5
made session dict usage a lot safer (using dict.setdefault("key, default) instead of directly using dict["key"])
src/catedit/resources.py
src/catedit/templates/categories/workshop.html
--- a/src/catedit/resources.py	Tue Apr 14 12:58:54 2015 +0200
+++ b/src/catedit/resources.py	Fri Apr 10 17:46:38 2015 +0200
@@ -100,30 +100,30 @@
             if cat_manager_instance.persistence.session_compliant is True:
                 task=submit_changes.apply_async(
                     kwargs={
-                        "deleted_categories" : session.get(
+                        "deleted_categories" : session.setdefault(
                             "deleted_categories", {}
-                        ).get(repository, {}),
-                        "modified_categories" : session.get(
+                        ).setdefault(repository, {}),
+                        "modified_categories" : session.setdefault(
                             "modified_categories", {}
-                        ).get(repository, {}),
+                        ).setdefault(repository, {}),
                         "message" : args["commit_message"],
                         "repository" : repository,
-                        "token" : session["user_code"]
+                        "token" : session.get("user_code")
                     },
                     queue="repo_"+repository,
                     routing_key="task_for_"+repository
                 )
                             
                 session.setdefault("tasks", {}).setdefault(repository, []).append(task.id)
-                session["deleted_categories"][repository] = {}
-                session["modified_categories"][repository] = {}
+                session.setdefault("deleted_categories", {})[repository] = {}
+                session.setdefault("modified_categories", {})[repository] = {}
                 cache.clear()
                 return 204
         else:
             # is the edition occuring on an already modified category?
-            if (cat_id in session.get(
+            if (cat_id in session.setdefault(
                     "modified_categories", {}
-            ).get(repository, {}).keys()):
+            ).setdefault(repository, {}).keys()):
                 cat_graph = Graph()
                 cat_graph.parse(
                     source=StringIO(
@@ -137,7 +137,7 @@
             
             new_property_list=[]
             for (predicate, obj) in cat_data["properties"]:
-                if session["properties"][repository][predicate]["object_type"] == "uriref-category":
+                if session["properties"][repository].get(predicate, {}).get("object_type") == "uriref-category":
                     new_property_list.append(
                         (URIRef(session["properties"][repository][predicate]["rdflib_class"]), app.config["CATEGORY_NAMESPACE"][obj])
                     )
@@ -154,15 +154,15 @@
                               new_label=cat_data["label"],
                               new_other_properties=new_property_list)
 
-            session["modified_categories"][repository][cat.cat_id] = str(
+            session.setdefault("modified_categories", {}).setdefault(repository, {})[cat.cat_id] = str(
                 cat.cat_graph.serialize(format="turtle"), "utf-8"
             )
 
             # Now we must clean the deleted categories list in case the
             # modified category was deleted before being edited
-            session["deleted_categories"][repository] = {
+            session.setdefault("deleted_categories", {})[repository] = {
                 cat_name: cat_content for cat_name, cat_content
-                in session["deleted_categories"][repository].items()
+                in session.setdefault("deleted_categories", {}).setdefault(repository, {}).items()
                 if cat_name != cat.cat_id
             }
             logger.debug("put id: "+cat.cat_id)
@@ -184,11 +184,11 @@
         """
         property_list = []
         for (predicate, obj) in cat_data["properties"]:
-            if session["properties"][repository][predicate]["object_type"] == "uriref-category": # faire des get
+            if session["properties"][repository].get(predicate, {}).get("object_type", "") == "uriref-category": # faire des get
                 property_list.append(
                     (URIRef(session["properties"][repository][predicate]["rdflib_class"]), app.config["CATEGORY_NAMESPACE"][obj])
                 )
-            elif session["properties"][repository][predicate]["object_type"] == "uriref-link":
+            elif session["properties"][repository].get(predicate, {}).get("object_type", "") == "uriref-link":
                 property_list.append(
                     (URIRef(session["properties"][repository][predicate]["rdflib_class"]), URIRef(obj))
                 )
@@ -205,8 +205,8 @@
         
         
         
-        if cat.cat_id not in session["modified_categories"][repository].keys():
-            session["modified_categories"][repository][cat.cat_id] = str(
+        if cat.cat_id not in session.setdefault("modified_categories", {}).setdefault(repository, {}):
+            session.setdefault("modified_categories", {}).setdefault(repository, {})[cat.cat_id] = str(
                 cat.cat_graph.serialize(format="turtle"), "utf-8"
             )
 
@@ -221,8 +221,8 @@
             deletion list
         """
         # if cat_id is already in deleted categories, we restore it
-        if deleted_cat_id in session["deleted_categories"][repository].keys():
-            session["deleted_categories"][repository] = {
+        if deleted_cat_id in session.setdefault("deleted_categories", {}).setdefault(repository, {}):
+            session.setdefault("deleted_categories", {})[repository] = {
                 cat_name: cat_content for cat_name, cat_content
                 in session["deleted_categories"][repository].items()
                 if cat_name != deleted_cat_id
@@ -230,9 +230,7 @@
             # warning, not safe if 2 files share the same name (or category id)
             # but that shouldn't happen
         else:
-            session["deleted_categories"] \
-                   [repository] \
-                   [deleted_cat_id] = "deleted"
+            session.setdefault("deleted_categories", {}).setdefault(repository, {})[deleted_cat_id] = "deleted"
             # Maybe we can store something more useful in there, such as
             # category content when deleted to restore last edit?
             # It would be nice to have symetry between modified and
@@ -240,7 +238,7 @@
 
             # now we must clean the modified categories list in case the
             # deleted category was modified before
-            session["modified_categories"][repository] = {
+            session.setdefault("modified_categories", {})[repository] = {
                 cat_name: cat_content for cat_name, cat_content
                 in session["modified_categories"][repository].items()
                 if cat_name != deleted_cat_id
@@ -263,14 +261,13 @@
             cat_list = cat_manager_instance.list_categories()
             # first we edit what was already modified before the deletion
             logger.debug(
-                session.get("modified_categories", {}).get(repository, {})
+                session.setdefault("modified_categories", {}).setdefault(repository, {})
             )
             if (
-                    deleted_cat_id in
-                    session["deleted_categories"][repository].keys()
+                    deleted_cat_id in session.setdefault("deleted_categories", {}).setdefault(repository, {})
             ):
-                for element in session.get("modified_categories", {}) \
-                                      .get(repository, {}).keys():
+                for element in session.setdefault("modified_categories", {}) \
+                                      .setdefault(repository, {}):
                     logger.debug(str(element))
                     modified_cat_graph = Graph()
                     modified_cat_graph.parse(
@@ -310,10 +307,8 @@
                 # category
                 for cat in cat_list:
                     if (cat.cat_id not in (
-                            list(session["modified_categories"]
-                                        [repository].keys())
-                            + list(session["deleted_categories"]
-                                          [repository].keys())
+                            list(session.setdefault("modified_categories", {}).setdefault(repository, {}).keys())
+                            + list(session.setdefault("deleted_categories", {}).setdefault(repository, {}).keys())
                     )):
                         new_property_list = []
                         for (predicate, obj) in cat.properties:
@@ -332,9 +327,7 @@
                             cat.edit_category(
                                 new_other_properties=new_property_list
                             )
-                            session["modified_categories"] \
-                                   [repository] \
-                                   [cat.cat_id] = str(
+                            session.setdefault("modified_categories", {}).setdefault(repository, {})[cat.cat_id] = str(
                                 cat.cat_graph.serialize(format="turtle"),
                                 "utf-8"
                             )
@@ -361,14 +354,14 @@
 
         if modified_cat_id is None:
             return {
-                "modified_categories": session.get("modified_categories", {})
-                                              .get(repository, {}),
-                "deleted_categories": session.get("deleted_categories", {})
-                                             .get(repository, {})
+                "modified_categories": session.setdefault("modified_categories", {})
+                                              .setdefault(repository, {}),
+                "deleted_categories": session.setdefault("deleted_categories", {})
+                                             .setdefault(repository, {})
             }, 200
         else:
-            if modified_cat_id in session.get("modified_categories", {}) \
-                                         .get(repository, {}):
+            if modified_cat_id in session.setdefault("modified_categories", {}) \
+                                         .setdefault(repository, {}):
                 return {
                     "type": "modified",
                     "category": {
@@ -377,8 +370,8 @@
                                                 [modified_cat_id]
                     }
                 }, 200
-            if modified_cat_id in session.get("deleted_categories", {}) \
-                                         .get(repository, {}):
+            if modified_cat_id in session.setdefault("deleted_categories", {}) \
+                                         .setdefault(repository, {}):
                 return {
                     "type": "deleted",
                     "category": {
@@ -398,17 +391,17 @@
             is None, delete the whole changelist
         """
         if modified_cat_id is not None:
-            session["modified_categories"][repository] = {
+            session.setdefault("modified_categories", {})[repository] = {
                 cat_name: cat_content for cat_name, cat_content
-                in session["modified_categories"][repository].items()
+                in session.setdefault("modified_categories", {}).setdefault(repository, {}).items()
                 if cat_name != modified_cat_id
             }
-            session["deleted_categories"][repository] = {
+            session.setdefault("deleted_categories", {})[repository] = {
                 cat_name: cat_content for cat_name, cat_content
-                in session["deleted_categories"][repository].items()
+                in session.setdefault("deleted_categories", {}).setdefault(repository, {}).items()
                 if cat_name != modified_cat_id
             }
         else:
-            session["modified_categories"][repository] = {}
-            session["deleted_categories"][repository] = {}
+            session.setdefault("modified_categories", {})[repository] = {}
+            session.setdefault("deleted_categories", {})[repository] = {}
         return 204
--- a/src/catedit/templates/categories/workshop.html	Tue Apr 14 12:58:54 2015 +0200
+++ b/src/catedit/templates/categories/workshop.html	Fri Apr 10 17:46:38 2015 +0200
@@ -61,12 +61,12 @@
         <li>
           <b> Créer une catégorie: </b><a href="{{url_for('categories.editor', repository=current_repository)}}" title="Créer catégorie" class="btn btn-default {% if readonly %}disabled{% endif %}"><span class="glyphicon glyphicon-plus"/></a>
         </li>
-        {% if session["modified_categories"][current_repository] or session["deleted_categories"][current_repository] %}
+        {% if ("modified_categories" in session and session.get("modified_categories", {}).get(current_repository, {}) != {}) or ("deleted_categories" in session and session.get("deleted_categories", {}).get(current_repository, {}) != {}) %}
         <li>
           <b> Soumettre tous mes changements: </b><a href="{{ url_for('categories.submit', repository=current_repository)}}" title="Soumettre changements" class="btn btn-default" {% if readonly %}disabled{% endif %}><span class="glyphicon glyphicon-share"/></a>
         </li>
         {% endif %}
-        {% if session["modified_categories"][current_repository] or session["deleted_categories"][current_repository] %}
+        {% if ("modified_categories" in session and session.get("modified_categories", {}).get(current_repository, {}) != {}) or ("deleted_categories" in session and session.get("deleted_categories", {}).get(current_repository, {}) != {}) %}
         <li>
           <b> Supprimer tous mes changements: </b>
           <input name="csrf_token" value="{{ csrf_token() }}" type="hidden">
@@ -82,7 +82,7 @@
     </h4>
   </form>
   <p>
-  {% if session["modified_categories"][current_repository] or session["deleted_categories"][current_repository] %}
+  {% if ("modified_categories" in session and session.get("modified_categories", {}).get(current_repository, {}) != {}) or ("deleted_categories" in session and session.get("deleted_categories", {}).get(current_repository, {}) != {}) %}
   <div class="alert alert-info" role="alert">
   <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
   <span class="sr-only">Attention:</span>