src/hdalab/management/commands/query_geo_inclusion.py
author ymh <ymh.work@gmail.com>
Wed, 11 Apr 2018 12:19:47 +0200
branchdocumentation
changeset 693 09e00f38d177
parent 359 46ad324f6fe4
permissions -rw-r--r--
Add hdabo/hdalab documentations
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
     2
'''
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
     3
Requête DBPedia afin de déterminer dans quel pays sont les tag de localisation.
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
     4
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
     5
**Usage**: ``django-admin query_geo_inclusion [options]``
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
     6
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
     7
'''
281
bc0f26b1acc2 Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents: 266
diff changeset
     8
from django.conf import settings
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
     9
from django.core.management.base import NoArgsCommand
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    10
from django.core.management.color import no_style
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    11
from hdabo.utils import show_progress
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    12
from hdabo.models import Tag
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    13
from hdalab.models import Country, GeoInclusion
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    14
from SPARQLWrapper import SPARQLWrapper, JSON
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    15
import re
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    16
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    17
class Command(NoArgsCommand):
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    18
    def handle_noargs(self, **options):
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    19
        self.style = no_style()
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    20
359
46ad324f6fe4 Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents: 283
diff changeset
    21
        GeoInclusion.objects.all().delete()
46ad324f6fe4 Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents: 283
diff changeset
    22
        Country.objects.all().delete()
46ad324f6fe4 Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents: 283
diff changeset
    23
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    24
        qs = Tag.objects.filter(category__label="Localisation").exclude(dbpedia_uri = None)
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    25
        total = qs.count()
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    26
281
bc0f26b1acc2 Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents: 266
diff changeset
    27
        #endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
bc0f26b1acc2 Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents: 266
diff changeset
    28
        endpoint = SPARQLWrapper(settings.DBPEDIA_URI_TEMPLATE % ( 'sparql', '' ))
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    29
        endpoint.setReturnFormat(JSON)
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    30
        sparqltext = """
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    31
            SELECT ?resource WHERE {
283
7a7035d3f7c9 correct time and country import
cavaliet
parents: 281
diff changeset
    32
             { <%s> ?resource <http://dbpedia.org/ontology/Country> . }
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    33
            UNION
283
7a7035d3f7c9 correct time and country import
cavaliet
parents: 281
diff changeset
    34
             { <%s> <http://dbpedia.org/ontology/country> ?resource . }
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    35
            }
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    36
        """
281
bc0f26b1acc2 Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents: 266
diff changeset
    37
        #resourceprefix = "http://dbpedia.org/resource/"
bc0f26b1acc2 Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents: 266
diff changeset
    38
        resourceprefix = settings.DBPEDIA_URI_TEMPLATE % ( 'resource', '' )
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    39
        identityuri = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    40
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    41
        writer = None
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    42
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    43
        for i,tag in enumerate(qs):
283
7a7035d3f7c9 correct time and country import
cavaliet
parents: 281
diff changeset
    44
            endpoint.setQuery(sparqltext % (tag.dbpedia_uri, tag.dbpedia_uri))
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    45
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    46
            results = endpoint.query().convert()['results']['bindings']
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    47
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    48
            if len(results) == 1: # We don't want places located in multiple countries
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    49
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    50
                resourceuri = results[0]['resource']['value']
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    51
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    52
                if re.match(resourceprefix, resourceuri):
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    53
                    countrytxt = re.findall('([^/]+$)', resourceuri)[0]
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    54
359
46ad324f6fe4 Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents: 283
diff changeset
    55
                    country, _ = Country.objects.get_or_create(dbpedia_uri=resourceuri)
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    56
                    GeoInclusion.objects.get_or_create(tag=tag, country=country)
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    57
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    58
                if resourceuri == identityuri:
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    59
                    countrytxt = '<is a country>'
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    60
359
46ad324f6fe4 Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents: 283
diff changeset
    61
                    country, _ = Country.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri)
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    62
                    GeoInclusion.objects.get_or_create(tag=tag, country=country)
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    63
122
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    64
            else:
fde8335a037c Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff changeset
    65
                countrytxt = '<unknown>'
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    66
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
    67
            writer = show_progress(i+1, total, '%s => %s'%(tag.label, countrytxt), 50, writer)