# HG changeset patch # User durandn # Date 1428919428 -7200 # Node ID 0a131f9b92a58e9a878350614f3a5a2fad272538 # Parent 71a4a7300c3596a82217a58496beec6899b43c40 Properties are now cached globally instead of being stored in the session diff -r 71a4a7300c35 -r 0a131f9b92a5 src/catedit/resources.py --- a/src/catedit/resources.py Fri Apr 10 17:46:38 2015 +0200 +++ b/src/catedit/resources.py Mon Apr 13 12:03:48 2015 +0200 @@ -10,6 +10,7 @@ from catedit.models import Category, CategoryManager import catedit.persistence from catedit.tasks import submit_changes +from catedit.utils import get_property_list from io import StringIO from flask import session @@ -137,17 +138,16 @@ new_property_list=[] for (predicate, obj) in cat_data["properties"]: - if session["properties"][repository].get(predicate, {}).get("object_type") == "uriref-category": + if get_property_list()[repository].get(predicate, {}).get("object_type") == "uriref-category": new_property_list.append( - (URIRef(session["properties"][repository][predicate]["rdflib_class"]), app.config["CATEGORY_NAMESPACE"][obj]) + (URIRef(get_property_list()[repository][predicate]["rdflib_class"]), app.config["CATEGORY_NAMESPACE"][obj]) ) - elif session["properties"][repository][predicate]["object_type"] == "uriref-link": new_property_list.append( - (URIRef(session["properties"][repository][predicate]["rdflib_class"]), URIRef(obj)) + (URIRef(get_property_list()[repository][predicate]["rdflib_class"]), URIRef(obj)) ) else: new_property_list.append( - (URIRef(session["properties"][repository][predicate]["rdflib_class"]), Literal(obj)) + (URIRef(get_property_list()[repository][predicate]["rdflib_class"]), Literal(obj)) ) cat.edit_category(new_description=cat_data["description"], @@ -184,17 +184,17 @@ """ property_list = [] for (predicate, obj) in cat_data["properties"]: - if session["properties"][repository].get(predicate, {}).get("object_type", "") == "uriref-category": # faire des get + if get_property_list()[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]) + (URIRef(get_property_list()[repository][predicate]["rdflib_class"]), app.config["CATEGORY_NAMESPACE"][obj]) ) - elif session["properties"][repository].get(predicate, {}).get("object_type", "") == "uriref-link": + elif get_property_list()[repository].get(predicate, {}).get("object_type", "") == "uriref-link": property_list.append( - (URIRef(session["properties"][repository][predicate]["rdflib_class"]), URIRef(obj)) + (URIRef(get_property_list()[repository][predicate]["rdflib_class"]), URIRef(obj)) ) else: property_list.append( - (URIRef(session["properties"][repository][predicate]["rdflib_class"]), Literal(obj)) + (URIRef(get_property_list()[repository][predicate]["rdflib_class"]), Literal(obj)) ) cat = Category( @@ -281,10 +281,9 @@ new_property_list = [] for (predicate, obj) in modified_cat.properties: if not ( - session["properties"] - [repository] - [predicate.toPython()] - ["object_type"] + get_property_list()[repository] + [predicate.toPython()] + ["object_type"] == "uriref-category" and (obj == app.config["CATEGORY_NAMESPACE"][deleted_cat_id]) ): @@ -313,10 +312,9 @@ new_property_list = [] for (predicate, obj) in cat.properties: if not ( - session["properties"] - [repository] - [predicate.toPython()] - ["object_type"] + get_property_list()[repository] + [predicate.toPython()] + ["object_type"] == "uriref-category" and (obj == app.config["CATEGORY_NAMESPACE"][deleted_cat_id]) ): diff -r 71a4a7300c35 -r 0a131f9b92a5 src/catedit/templates/categories/editor.html --- a/src/catedit/templates/categories/editor.html Fri Apr 10 17:46:38 2015 +0200 +++ b/src/catedit/templates/categories/editor.html Mon Apr 13 12:03:48 2015 +0200 @@ -63,9 +63,9 @@ - {% for predicate in session["properties"][current_repository] %} - {% if session["properties"][current_repository][predicate]["usable_in_editor"] %} - + {% for predicate in get_property_list()[current_repository] %} + {% if get_property_list()[current_repository][predicate]["usable_in_editor"] %} + {% endif %} {% endfor %} @@ -91,14 +91,14 @@ {% for property in form.properties %} - {% if session["properties"][current_repository][property.property_predicate.data]["object_type"]=="uriref-category" %} + {% if get_property_list()[current_repository][property.property_predicate.data]["object_type"]=="uriref-category" %} {% for cat in cat_list %} {% if property.property_object.data == cat.cat_id %} {% if cat.cat_id not in deleted_cat_list %} {{ property.property_predicate() }} {{ property.property_object() }} - {{ session["properties"][current_repository][property.property_predicate.data]["descriptive_label_fr"] }} + {{ get_property_list()[current_repository][property.property_predicate.data]["descriptive_label_fr"] }} {{ cat.cat_label }} @@ -113,10 +113,10 @@ {{ property.property_predicate() }} {{ property.property_object() }} - {{ session["properties"][current_repository][property.property_predicate.data]["descriptive_label_fr"] }} + {{ get_property_list()[current_repository][property.property_predicate.data]["descriptive_label_fr"] }} - {% if session["properties"][current_repository][property.property_predicate.data]["object_type"]=="uriref-link" %} + {% if get_property_list()[current_repository][property.property_predicate.data]["object_type"]=="uriref-link" %} {{ property.property_object.data }} {% else %} {{ property.property_object.data }} diff -r 71a4a7300c35 -r 0a131f9b92a5 src/catedit/templates/macros.html --- a/src/catedit/templates/macros.html Fri Apr 10 17:46:38 2015 +0200 +++ b/src/catedit/templates/macros.html Mon Apr 13 12:03:48 2015 +0200 @@ -72,15 +72,15 @@ {% if cat.cat_properties|length == 0 %}
Aucune autre propriété
{% else %} {% for (predicate, object) in cat.cat_properties %} -
{{ session["properties"][current_repository][predicate.toPython()]["descriptive_label_fr"] }}
+
{{ get_property_list()[current_repository][predicate.toPython()]["descriptive_label_fr"] }}
- {% if session["properties"][current_repository][predicate.toPython()]["object_type"]=="uriref-category" %} + {% if get_property_list()[current_repository][predicate.toPython()]["object_type"]=="uriref-category" %} {% for cat in cat_list %} {% if object == config["CATEGORY_NAMESPACE"][cat.cat_id] %} {{ cat.cat_label }} {% endif %} {% endfor %} - {% elif session["properties"][current_repository][predicate.toPython()]["object_type"]=="uriref-link" %} + {% elif get_property_list()[current_repository][predicate.toPython()]["object_type"]=="uriref-link" %} {{ object }} {% else %} {{ object }} diff -r 71a4a7300c35 -r 0a131f9b92a5 src/catedit/utils.py --- a/src/catedit/utils.py Fri Apr 10 17:46:38 2015 +0200 +++ b/src/catedit/utils.py Mon Apr 13 12:03:48 2015 +0200 @@ -2,13 +2,17 @@ utils.py: Module that lists utility functions used through the app """ -from catedit import app +from base64 import b64decode +from catedit import app, cache, github, log_api_rate +import json import logging from flask import session from rdflib import RDF, RDFS, URIRef from rdflib.compare import to_isomorphic, graph_diff +from flask.ext.github import GitHubError + logger = logging.getLogger(__name__) @@ -56,9 +60,9 @@ in_first = [] in_both = [] in_second = [] - logger.debug(rdf_in_both) - logger.debug(rdf_only_in_first) - logger.debug(rdf_only_in_second) + #TODO: vérifier encoding - logger.debug(rdf_in_both) + #TODO: vérifier encoding - logger.debug(rdf_only_in_first) + #TODO: vérifier encoding - logger.debug(rdf_only_in_second) for (final_list, diff_list) in [ (in_both, rdf_in_both), (in_first, rdf_only_in_first), @@ -70,17 +74,15 @@ elif triple[1] == RDF.Description: final_list.append(("description", triple[2].toPython())) else: - for predicate in session["properties"][repository].keys(): + for predicate in get_property_list()[repository].keys(): if triple[1] == \ - URIRef(session["properties"][repository][predicate]["rdflib_class"]): - if (session["properties"] - [repository] - [predicate] - ["object_type"] == "uriref-link" - or session["properties"] - [repository] - [predicate] - ["object_type"] == "literal"): + URIRef(get_property_list()[repository][predicate]["rdflib_class"]): + if (get_property_list()[repository] + [predicate] + ["object_type"] == "uriref-link" + or get_property_list()[repository] + [predicate] + ["object_type"] == "literal"): final_list.append( ( predicate, @@ -141,3 +143,42 @@ "modifications": modified_categories, "deletions": deleted_categories } + +def get_property_list(): + """ + Function to get the property list, also registered in templates + """ + cache_key = "property_lists_dict" + if cache.get(cache_key) is None: + property_list = { + repo: {} for repo + in app.config["PERSISTENCE_CONFIG"]["REPOSITORY_LIST"] + } + if app.config["PERSISTENCE_CONFIG"]["METHOD"] == "PersistenceToGithub": + for repo in app.config["PERSISTENCE_CONFIG"]["REPOSITORY_LIST"]: + try: + json_file=github.get( + "repos/" + + app.config["PERSISTENCE_CONFIG"]["REPOSITORY_OWNER"] + "/" + + repo + "/contents/properties/properties.json", + hooks=dict(response=log_api_rate) + ) + #TODO: vérifier encoding - logger.debug("repo: "+repo+" - properties: "+str(json.loads(str(b64decode(json_file["content"]), "utf-8")))) #wat + property_list[repo] = json.loads(str(b64decode(json_file["content"]), "utf-8"))["property_list"] + except GitHubError as ghe: + logger.debug( + "GitHub Error trying to get the property list. We'll assume " + + "there is none and use default list as defined in config.py" + ) + property_list[repo] = app.config["PROPERTY_LIST"] + else: + for repo in app.config["PERSISTENCE_CONFIG"]["REPOSITORY_LIST"]: + property_list[repo] = app.config["PROPERTY_LIST"] + rv = property_list + cache.set(cache_key, rv, timeout=3600) + return rv + else: + return cache.get(cache_key) +app.jinja_env.globals['get_property_list'] = get_property_list + + diff -r 71a4a7300c35 -r 0a131f9b92a5 src/catedit/views/categories.py --- a/src/catedit/views/categories.py Fri Apr 10 17:46:38 2015 +0200 +++ b/src/catedit/views/categories.py Mon Apr 13 12:03:48 2015 +0200 @@ -9,6 +9,7 @@ from catedit.views.utils import check_user_status_and_repo_access, \ get_current_category_list, get_commits, \ get_issues +from catedit.utils import get_property_list from io import StringIO from flask import render_template, request, redirect, url_for, abort, Blueprint, session @@ -318,7 +319,7 @@ cat_changes = cat_changes_api_instance.get(repository)[0] deleted_cat_dict = cat_changes["deleted_categories"] modified_cat_dict = cat_changes["modified_categories"] - logger.debug(changes_response) + #TODO: vérifier encoding - logger.debug(changes_response) for modified_cat_name in modified_cat_dict.keys(): modified_cat_rdf_graph = Graph() @@ -354,10 +355,7 @@ cat_form.label.data = current_cat.label cat_form.description.data = current_cat.description for (cat_predicate, cat_object) in current_cat_properties: - if session["properties"] \ - [repository] \ - [cat_predicate.toPython()] \ - ["object_type"] == "uriref-category": + if get_property_list()[repository][cat_predicate.toPython()]["object_type"] == "uriref-category": namespace, object_id = cat_object.split("#", 1) else: object_id = cat_object