# HG changeset patch # User durandn # Date 1428680798 -7200 # Node ID 71a4a7300c3596a82217a58496beec6899b43c40 # Parent 3d6f92563efee16bf565d1004d5924ba66839664 made session dict usage a lot safer (using dict.setdefault("key, default) instead of directly using dict["key"]) diff -r 3d6f92563efe -r 71a4a7300c35 src/catedit/resources.py --- 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 diff -r 3d6f92563efe -r 71a4a7300c35 src/catedit/templates/categories/workshop.html --- 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 @@
- {% 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, {}) != {}) %}