--- a/src/p4l/management/commands/get_subject_label.py Fri Aug 30 15:59:45 2013 +0200
+++ b/src/p4l/management/commands/get_subject_label.py Fri Aug 30 17:09:14 2013 +0200
@@ -1,70 +1,11 @@
# -*- coding: utf-8 -*-
-
-from django.conf import settings
from django.core.management import BaseCommand
from p4l.models import Subject
-from p4l.utils import show_progress
-import logging
-import requests
+from p4l.utils import fill_label_for_model
-logger = logging.getLogger(__name__)
class Command(BaseCommand):
-
- query = """
-PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
-PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
-PREFIX owl:<http://www.w3.org/2002/07/owl#>
-PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
-SELECT ?uri ?label
-WHERE {
- ?uri skos:prefLabel|skos:label ?label .
- ?uri skos:inScheme ?sch .
- FILTER (?uri = $root) .
- FILTER (?sch = <http://skos.um.es/unescothes/CS000> || ?sch = <http://skos.um.es/unescothes/CS000/Countries>) .
-}
-"""
-
- def fill_label(self):
- # Loads Subjects label from sparkl query
- subjects = Subject.objects.filter(label=None)
- total_subjects = len(subjects)
- writer = None
- i = 0
- found = 0
- for s in subjects:
- i += 1
- res = requests.get(
- settings.SPARQL_QUERY_ENDPOINT,
- params={'query':self.query, 'timeout':10, '$root' : "<"+s.subject+">"},
- headers={'accept':'application/sparql-results+json'},
- )
- if not res.ok:
- continue
- elif res.text:
- json_res = res.json()
- if 'results' in json_res and 'bindings' in json_res['results'] and len(json_res['results']['bindings'])>0:
- # json_res['results']['bindings'] has several languages. If we find french, we save the french label.
- # If not, we save the first one.
- tmp_dict = {}
- first_label = None
- # We create a temporary dict with the lang code and the label
- for b in json_res['results']['bindings']:
- if 'label' in b and 'value' in b['label'] and 'xml:lang' in b['label']:
- tmp_dict[b['label']['xml:lang']] = b['label']['value']
- if not first_label:
- first_label = b['label']['value']
- if 'fr' in tmp_dict or first_label:
- if 'fr' in tmp_dict:
- s.label = tmp_dict['fr']
- else:
- s.label = first_label
- l = s.label
- s.save()
- found += 1
- writer = show_progress(i, total_subjects, l, 50, writer=writer)
- print("Processing Subjects Sparql Done. %d found on %d" % (found, total_subjects))
def handle(self, *args, **options):
- self.fill_label()
+ fill_label_for_model(Subject, 'subject', 'http://skos.um.es/unescothes/CS000')