--- 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])
):
--- 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 @@
<option id="property_type_default" label="Liste des propriétés ..." selected="selected">
Liste des propriétés ...
</option>
- {% for predicate in session["properties"][current_repository] %}
- {% if session["properties"][current_repository][predicate]["usable_in_editor"] %}
- <option value='{{ predicate }}' label="{{ session['properties'][current_repository][predicate]['descriptive_label_fr'] }}" class="{{ session['properties'][current_repository][predicate]['object_type'] }}">{{ session["properties"][current_repository][predicate]["descriptive_label_fr"] }}</option>
+ {% for predicate in get_property_list()[current_repository] %}
+ {% if get_property_list()[current_repository][predicate]["usable_in_editor"] %}
+ <option value='{{ predicate }}' label="{{ get_property_list()[current_repository][predicate]['descriptive_label_fr'] }}" class="{{ get_property_list()[current_repository][predicate]['object_type'] }}">{{ session["properties"][current_repository][predicate]["descriptive_label_fr"] }}</option>
{% endif %}
{% endfor %}
</select>
@@ -91,14 +91,14 @@
{% for property in form.properties %}
<tr id="properties-{{property_count}}">
<input id="properties-{{property_count}}-csrf_token" name="properties-{{property_count}}-csrf_token" value="{{ csrf_token() }}" type="hidden">
- {% 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() }}
<td id="predicate_td{{ property_count }}">
- <strong>{{ session["properties"][current_repository][property.property_predicate.data]["descriptive_label_fr"] }}</strong>
+ <strong>{{ get_property_list()[current_repository][property.property_predicate.data]["descriptive_label_fr"] }}</strong>
</td>
<td id="object_td{{property_count-1}}">
{{ cat.cat_label }}
@@ -113,10 +113,10 @@
{{ property.property_predicate() }}
{{ property.property_object() }}
<td id="predicate_td{{ property_count }}">
- <strong>{{ session["properties"][current_repository][property.property_predicate.data]["descriptive_label_fr"] }}</strong>
+ <strong>{{ get_property_list()[current_repository][property.property_predicate.data]["descriptive_label_fr"] }}</strong>
</td>
<td id="object_td{{ property_count }}">
- {% 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" %}
<a href="{{ property.property_object.data }}">{{ property.property_object.data }}</a>
{% else %}
{{ property.property_object.data }}
--- 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 %} <dt></dt><dd>Aucune autre propriété</dd>
{% else %}
{% for (predicate, object) in cat.cat_properties %}
- <dt>{{ session["properties"][current_repository][predicate.toPython()]["descriptive_label_fr"] }}</dt>
+ <dt>{{ get_property_list()[current_repository][predicate.toPython()]["descriptive_label_fr"] }}</dt>
<dd>
- {% 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" %}
<a href="{{ object }}">{{ object }}</a>
{% else %}
{{ object }}
--- 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
+
+
--- 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