# HG changeset patch # User Nicolas DURAND # Date 1416929077 -3600 # Node ID 73b18cb88583b9d1207de0963cbe15989bb774ec # Parent f7bc7942969aa9c26e3dbf8bb4ac7854ab82a591 Updated property edition + cache to "get" method so it doesn't generate as many requests to Github API diff -r f7bc7942969a -r 73b18cb88583 src/catedit/api.py --- a/src/catedit/api.py Mon Nov 24 11:05:08 2014 +0100 +++ b/src/catedit/api.py Tue Nov 25 16:24:37 2014 +0100 @@ -1,6 +1,6 @@ from flask.ext.restful import Resource, fields, Api, reqparse from flask import request -from app import app +from app import app, cache from models import Category, CategoryManager from rdflib import Graph, RDF from utils import * @@ -20,6 +20,8 @@ class CategoryAPI(Resource): # returns category cat_id + @classmethod + @cache.memoize(timeout=600) def get(self, cat_id=None): # load file cat_id # TODO: load list if cat_id=None @@ -31,9 +33,11 @@ response=[] for c in cat_manager_instance.list_cat(): response.append(c.cat_graph.serialize(format='turtle')) + # print response return response # update category cat_id + @classmethod def put(self, cat_id): args = cat_parser.parse_args() cat_manager_instance = CategoryManager() @@ -45,16 +49,27 @@ args["property_predicate"], args["property_object"]): if property_object: - new_property_list.append((property_predicate, property_object)) - # print new_property_list + property_object_to_append=property_object + # if URIRef category, we must prefix id with namespace + if app.config["PROPERTY_LIST"] \ + [property_predicate] \ + ["object_type"] == "uriref-category" : + property_object_to_append = app.config["ONTOLOGY_NAMESPACE"] \ + +property_object + print property_object_to_append + new_property_list.append((property_predicate, property_object_to_append)) + print new_property_list c = cat_manager_instance.load_cat(cat_id) c.edit_category(new_description=args["description"], new_label=args["label"], new_other_properties=new_property_list) cat_manager_instance.save_cat(c, message=args["commit_message"]) + cache.delete_memoized(CategoryAPI.get,cat_id) + cache.delete_memoized(CategoryAPI.get,None) return c.cat_graph.serialize(format='turtle'), 200 # Maybe not send the whole cat back, see if it's worth it + @classmethod def post(self): args = cat_parser.parse_args() property_list = [] @@ -70,11 +85,16 @@ other_properties=property_list) cat_manager_instance = CategoryManager() cat_manager_instance.save_cat(c, message=args["commit_message"]) + cache.delete_memoized("get",cat_id) + cache.delete_memoized("get",None) return c.cat_graph.serialize(format='turtle'), 201 + @classmethod def delete(self, cat_id): cat_manager_instance = CategoryManager() cat_manager_instance.delete_cat(cat_id) + cache.delete_memoized(CategoryAPI.get,cat_id) + cache.delete_memoized(CategoryAPI.get,None) return 204 api.add_resource(CategoryAPI, diff -r f7bc7942969a -r 73b18cb88583 src/catedit/app.py --- a/src/catedit/app.py Mon Nov 24 11:05:08 2014 +0100 +++ b/src/catedit/app.py Tue Nov 25 16:24:37 2014 +0100 @@ -1,5 +1,6 @@ from flask import Flask, session from flask.ext.github import GitHub +from flask.ext.cache import Cache from settings import * from config import * from logging import * @@ -7,6 +8,7 @@ # set up app and database app = Flask(__name__) app.config.from_object(appSettings) +cache = Cache(app, config={"CACHE_TYPE": "simple"}) # app.config.from_object(systemSettings) github = GitHub(app) diff -r f7bc7942969a -r 73b18cb88583 src/catedit/models.py --- a/src/catedit/models.py Mon Nov 24 11:05:08 2014 +0100 +++ b/src/catedit/models.py Tue Nov 25 16:24:37 2014 +0100 @@ -46,7 +46,9 @@ app.config["PROPERTY_LIST"] [predicate] ["rdflib_class"], - Literal(obj))) + app.config["PROPERTY_LIST"] + [predicate] + ["object_rdflib_class"](obj))) else: self.cat_graph = graph @@ -123,7 +125,9 @@ app.config["PROPERTY_LIST"] [predicate] ["rdflib_class"], - Literal(obj))) + app.config["PROPERTY_LIST"] + [predicate] + ["object_rdflib_class"](obj))) """ @@ -156,6 +160,7 @@ def list_cat(self): p = app.config["PERSISTENCE_METHOD"]() cat_serial_list = p.list() + # print cat_serial_list cat_list=[] for cat_serial in cat_serial_list: loaded_cat_graph = Graph() diff -r f7bc7942969a -r 73b18cb88583 src/catedit/persistence.py --- a/src/catedit/persistence.py Mon Nov 24 11:05:08 2014 +0100 +++ b/src/catedit/persistence.py Tue Nov 25 16:24:37 2014 +0100 @@ -137,6 +137,7 @@ +"/contents/" +app.config["CATEGORIES_PATH"]) filenames_list = [ file["name"] for file in files_in_repo ] + # print filenames_list except GitHubError: pass file_content_list=[] diff -r f7bc7942969a -r 73b18cb88583 src/catedit/settings.py --- a/src/catedit/settings.py Mon Nov 24 11:05:08 2014 +0100 +++ b/src/catedit/settings.py Tue Nov 25 16:24:37 2014 +0100 @@ -36,25 +36,29 @@ "subClassOf": { "descriptive_label_fr" : "Sous-classe de", "descriptive_label_en" : "Subclass of", + "object_type" : "uriref-category", "rdflib_class" : RDFS.subClassOf, - "rdflib_object" : "uriref", + "object_rdflib_class" : URIRef, }, "value": { "descriptive_label_fr" : "Valeur", "descriptive_label_en" : "Value", + "object_type" : "literal", "rdflib_class" : RDF.value, - "rdflib_object" : "literal", + "object_rdflib_class" : Literal, }, "type": { "descriptive_label_fr" : "Type", "descriptive_label_en" : "Type", + "object_type" : "uriref-category", "rdflib_class" : RDF.type, - "rdflib_object" : "uriref", + "object_rdflib_class" : URIRef, }, "resource": { "descriptive_label_fr" : "Ressource", "descriptive_label_en" : "Resource", + "object_type" : "uriref-link", "rdflib_class" : RDFS.Resource, - "rdflib_object" : "uriref", + "object_rdflib_class" : URIRef, }, } diff -r f7bc7942969a -r 73b18cb88583 src/catedit/static/js/property_functions.js --- a/src/catedit/static/js/property_functions.js Mon Nov 24 11:05:08 2014 +0100 +++ b/src/catedit/static/js/property_functions.js Tue Nov 25 16:24:37 2014 +0100 @@ -14,57 +14,101 @@ } }, - addProperty : function(divName, type){ - var selectElement = document.getElementById('property_type_selector'); - var selectedOptionValue = selectElement.options[selectElement.selectedIndex].value; - var selectedOptionText = selectElement.options[selectElement.selectedIndex].text - var selectedOptionObject = selectElement.options[selectElement.selectedIndex].label - var newProperty = document.createElement('div'); - newProperty.setAttribute('id','property_div'+(createdProperties+1)); - newProperty.setAttribute('class','row property-row'); - var optionObjectHTML = ""; - switch(selectedOptionObject) { - case "literal": - optionObjectHTML = ''; - break; - default: - optionObjectHTML='' - } + addProperty : function(divToReveal, divToAddFieldsTo){ + var selectElement = document.getElementById('property_selector'); + if (selectElement.options[selectElement.selectedIndex].id != "property_type_default") { + var selectedOptionValue = selectElement.options[selectElement.selectedIndex].value; + var selectedOptionText = selectElement.options[selectElement.selectedIndex].text; + var propertyOptionObjectType = selectElement.options[selectElement.selectedIndex].label; + var propertyObjectValue = "default: something went wrong" + switch(propertyOptionObjectType) { + case "literal": + propertyObjectValue = document.getElementById('literal-field').value; + propertyObjectText = document.getElementById('literal-field').value; + break; + case "uriref-category": + var selectingCatBox = document.getElementById('uriref-category-field'); + propertyObjectText = selectingCatBox[selectingCatBox.selectedIndex].innerHTML; + propertyObjectValue = selectingCatBox.value; + break; + case "uriref-link": + propertyObjectValue = document.getElementById('uriref-link-field').value; + propertyObjectText = document.getElementById('uriref-link-field').value; + break; + default: + optionObject='' + } - var newPropertyHTML = '
\ - \ - ' - +optionObjectHTML+ - ' \ -
'; + if (((propertyObjectValue != "") && (propertyOptionObjectType == "literal")) || + ((propertyObjectValue != "") && (propertyOptionObjectType == "uriref-link")) || + ((propertyObjectValue != "default") && (propertyOptionObjectType == "uriref-category"))) { + var newProperty = document.createElement('tr'); + newProperty.setAttribute('id','property_tr'+(createdProperties+1)); + var newPropertyHTML = ' \ + \ + \ + '+selectedOptionText+' \ + \ + ' + +propertyObjectText+ + ' \ + \ + \ + '; - newProperty.innerHTML = newPropertyHTML ; - parentElement=document.getElementById(divName) ; - parentElement.insertBefore(newProperty, parentElement.firstChild); - createdProperties++; - propertyCount++; - if (propertyCount > 0) { - document.getElementById(divName).className="visible"; + newProperty.innerHTML = newPropertyHTML ; + parentElement=document.getElementById(divToAddFieldsTo) ; + parentElement.insertBefore(newProperty, parentElement.firstChild); + createdProperties++; + propertyCount++; + if (propertyCount > 0) { + document.getElementById(divToReveal).className="visible"; + } + } } }, - removeProperty : function(index){ + removeProperty : function(index, divToReveal){ if (propertyCount > 0) { - divItem=document.getElementById("property_div"+index); - divItem.parentNode.removeChild(divItem); - propertyCount--; - if (propertyCount == 0) { - document.getElementById(divName).className="hidden"; - } + divItem=document.getElementById("property_tr"+index); + divItem.parentNode.removeChild(divItem); + propertyCount--; + if (propertyCount == 0) { + document.getElementById(divToReveal).className="hidden"; + } } }, - helloWorld : function() { - alert('Hello World! -' + propertyCount); - } - + displayCorrespondingField : function() { + propertySelectItem = document.getElementById("property_selector"); + switch(propertySelectItem[propertySelectItem.selectedIndex].label) + { + case "property_type_default": + document.getElementById("literal-field").className = "hidden form-control"; + document.getElementById("uriref-category-field").className = "hidden form-control"; + document.getElementById("uriref-link-field").className = "hidden form-control"; + break; + case "literal": + document.getElementById("literal-field").className = "visible form-control"; + document.getElementById("uriref-category-field").className = "hidden form-control"; + document.getElementById("uriref-link-field").className = "hidden form-control"; + break; + case "uriref-category": + document.getElementById("literal-field").className = "hidden form-control"; + document.getElementById("uriref-category-field").className = "visible form-control"; + document.getElementById("uriref-link-field").className = "hidden form-control"; + break; + case "uriref-link": + document.getElementById("literal-field").className = "hidden form-control"; + document.getElementById("uriref-category-field").className = "hidden form-control"; + document.getElementById("uriref-link-field").className = "visible form-control"; + break; + default: + document.getElementById("literal-field").className = "hidden form-control"; + document.getElementById("uriref-category-field").className = "hidden form-control"; + document.getElementById("uriref-link-field").className = "hidden form-control"; + } + } }; }()); diff -r f7bc7942969a -r 73b18cb88583 src/catedit/templates/cateditor.html --- a/src/catedit/templates/cateditor.html Mon Nov 24 11:05:08 2014 +0100 +++ b/src/catedit/templates/cateditor.html Tue Nov 25 16:24:37 2014 +0100 @@ -42,14 +42,14 @@ {% endif %} {% if not session["user_logged"] %} {% endif %} {% if form.label.errors or form.description.errors or form.commit_message.errors %}
@@ -57,7 +57,7 @@ Erreur: - vous n'avez pas rempli certains champs obligatoires + Vous n'avez pas rempli certains champs obligatoires.
{% endif %}

{% if cat_id: %} Edition : Catégorie existante{% else %}Création : Nouvelle catégorie{% endif %}

@@ -77,37 +77,74 @@ {{ form.description.label }}
{{ form.description(size=150, class="form-control", readonly=readonly, placeholder=description_placeholder) }}
- - + + + +
-