--- a/.settings/org.eclipse.core.resources.prefs Thu Jul 11 14:26:00 2013 +0200
+++ b/.settings/org.eclipse.core.resources.prefs Thu Jul 18 10:39:26 2013 +0200
@@ -15,6 +15,7 @@
encoding//src/core/settings.py=utf-8
encoding//src/core/templatetags/core_extras.py=utf-8
encoding//src/core/templatetags/utils.py=utf-8
+encoding//src/core/urls.py=utf-8
encoding//src/core/utils.py=utf-8
encoding//src/core/wp_utils.py=utf-8
encoding//src/jocondelab/config.py=utf-8
@@ -29,8 +30,14 @@
encoding//src/jocondelab/migrations/0002_add_country_table.py=utf-8
encoding//src/jocondelab/migrations/0003_auto_add_indexes_on_countries.py=utf-8
encoding//src/jocondelab/models.py=utf-8
+encoding//src/jocondelab/settings.py=utf-8
encoding//src/jocondelab/utils.py=utf-8
encoding//src/jocondelab/views.py=utf-8
encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/SPARQLWrapper/__init__.py=utf8
encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/rdflib_sqlalchemy/__init__.py=utf-8
+encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/api.py=utf-8
+encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/exceptions.py=utf-8
+encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/hooks.py=utf-8
+encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/models.py=utf-8
+encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/sessions.py=utf-8
encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/wikitools/wiki.py=utf-8
--- a/src/core/models/term.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/core/models/term.py Thu Jul 18 10:39:26 2013 +0200
@@ -116,8 +116,21 @@
return [l.label for l in self.alternative_labels.all() if l.label != self.label]
@property
+ def wikipedia_language_version(self):
+ if not self.wikipedia_url:
+ return None
+ for lang, urls in settings.WIKIPEDIA_URLS.iteritems(): # @UndefinedVariable
+ if self.wikipedia_url.startswith(urls['base_url']):
+ return lang
+ return None
+
+ @property
def wikipedia_revision_permalink(self):
- return settings.WIKIPEDIA_VERSION_PERMALINK_TEMPLATE % (unicode(self.wikipedia_revision_id))
+ tmpl_str = settings.WIKIPEDIA_URLS.get(self.wikipedia_language_version, {}).get('permalink_tmpl',None) # @UndefinedVariable
+ if tmpl_str:
+ return tmpl_str % (unicode(self.wikipedia_revision_id))
+ else:
+ return None
@property
def url_status_text(self):
--- a/src/core/settings.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/core/settings.py Thu Jul 18 10:39:26 2013 +0200
@@ -18,9 +18,58 @@
REPR_CONTEXT = getattr(settings,'REPR_CONTEXT' , 'http://data.culture.fr/thesaurus/resource/ark:/67717/T523')
SREP_CONTEXT = getattr(settings,'SREP_CONTEXT' , 'http://data.culture.fr/thesaurus/resource/ark:/67717/T507')
-WIKIPEDIA_BASE_URL = getattr(settings, "WIKIPEDIA_BASE_URL", "http://fr.wikipedia.org/")
-WIKIPEDIA_PAGE_URL = getattr(settings, "WIKIPEDIA_PAGE_URL", WIKIPEDIA_BASE_URL+"wiki")
-WIKIPEDIA_API_URL = getattr(settings, "WIKIPEDIA_API_URL", WIKIPEDIA_BASE_URL +"w/api.php")
-WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = getattr(settings, 'WIKIPEDIA_VERSION_PERMALINK_TEMPLATE', WIKIPEDIA_BASE_URL +"w/index.php?oldid=%s")
+
+WIKIPEDIA_URLS = getattr(settings, "WIKIPEDIA_URLS", {
+ 'fr': {
+ 'base_url': "http://fr.wikipedia.org",
+ 'page_url': "http://fr.wikipedia.org/wiki",
+ 'api_url': "http://fr.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://fr.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://fr.dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://fr.dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': False,
+ 'disambiguation_cat' : u'Catégorie:Homonymie',
+ },
+ 'en': {
+ 'base_url': "http://en.wikipedia.org",
+ 'page_url': "http://en.wikipedia.org/wiki",
+ 'api_url': "http://en.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://en.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': False,
+ 'disambiguation_cat' : u'Category:Disambiguation pages',
+ },
+ 'it': {
+ 'base_url': "http://it.wikipedia.org",
+ 'page_url': "http://it.wikipedia.org/wiki",
+ 'api_url': "http://it.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://it.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://it.dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://it.dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': True,
+ 'disambiguation_cat' : u'Categoria:Disambigua',
+ },
+ 'de': {
+ 'base_url': "http://de.wikipedia.org",
+ 'page_url': "http://de.wikipedia.org/wiki",
+ 'api_url': "http://de.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://de.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://de.dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://de.dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': True,
+ 'disambiguation_cat' : u'Kategorie:Begriffsklärung',
+ },
+ 'ja': {
+ 'base_url': "http://ja.wikipedia.org",
+ 'page_url': "http://ja.wikipedia.org/wiki",
+ 'api_url': "http://ja.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://ja.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://ja.dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://ja.dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': False,
+ 'disambiguation_cat' : u'カテゴリ:同名の地名',
+ },
+})
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/core/urls.py Thu Jul 18 10:39:26 2013 +0200
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jul 17, 2013
+
+@author: ymh
+'''
+from core.views import SparqlEndpointProxy
+from django.conf.urls import patterns, url
+from django.contrib.auth.decorators import login_required
+
+
+urlpatterns = patterns('',
+ url(r'^proxy-sparql/(?P<wp_lang>\w{2})/', login_required(SparqlEndpointProxy.as_view()), name='wp_sparql_proxy'),
+)
\ No newline at end of file
--- a/src/core/views.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/core/views.py Thu Jul 18 10:39:26 2013 +0200
@@ -1,1 +1,27 @@
# Create your views here.
+from core import settings
+from django.http.response import HttpResponseNotFound, HttpResponse,\
+ HttpResponseBadRequest
+from django.views.generic import View
+import requests
+from requests.exceptions import HTTPError
+
+class SparqlEndpointProxy(View):
+
+ def get(self, request, wp_lang):
+ params = request.GET.dict()
+ if not wp_lang or wp_lang not in settings.WIKIPEDIA_URLS:
+ return HttpResponseBadRequest("The wp_lang parameter is compulsory and must be in %s" % repr(settings.WIKIPEDIA_URLS.keys())) # @UndefinedVariable
+
+ url = settings.WIKIPEDIA_URLS.get(wp_lang, {}).get('dbpedia_sparql_url', None) # @UndefinedVariable
+ if not url or not url.startswith("http"):
+ return HttpResponseNotFound("No or bad url for %s: %s" % (wp_lang,repr(url)))
+
+ try:
+ resp = requests.get(url, params=params)
+ return HttpResponse(content=resp.text, content_type=resp.headers.get('content-type'))
+ except HTTPError as e:
+ return HttpResponse(unicode(e), status=e.status_code)
+
+
+
\ No newline at end of file
--- a/src/core/wp_utils.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/core/wp_utils.py Thu Jul 18 10:39:26 2013 +0200
@@ -9,12 +9,13 @@
import urllib2
logger = logging.getLogger(__name__)
-site = None
+sites = {}
-def __get_site():
- global site
+def __get_site(lang):
+ site = sites.get(lang, None)
if site is None:
- site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
+ site = wiki.Wiki(settings.WIKIPEDIA_URLS[lang]['api_url']) # @UndefinedVariable
+ sites[lang] = site
return site
@@ -52,14 +53,14 @@
return urlquote(label.replace(" ", "_"))
-def __is_homonymie(page_dict):
+def __is_homonymie(page_dict, lang):
for cat in page_dict.get(u"categories", []):
- if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
+ if settings.WIKIPEDIA_URLS[lang]['disambiguation_cat'] in cat.get(u"title", u""):
return True
return False
-def query_wikipedia_title(site, label=None, pageid=None):
+def query_wikipedia_title(site, lang, label=None, pageid=None):
params = {'action':'query', 'prop':'info|categories|langlinks', 'inprop':'url', 'lllimit':'500', 'cllimit':'500'}
@@ -101,7 +102,7 @@
alternative_url = None
alternative_pageid = None
- if __is_homonymie(page):
+ if __is_homonymie(page, lang):
status = TERM_URL_STATUS_DICT["homonyme"]
elif u"redirect" in page:
status = TERM_URL_STATUS_DICT["redirection"]
@@ -131,7 +132,7 @@
if status == TERM_URL_STATUS_DICT['match'] or status == TERM_URL_STATUS_DICT['redirection']:
- dbpedia_uri = settings.DBPEDIA_URI_TEMPLATE % (urlize_for_wikipedia(new_label))
+ dbpedia_uri = settings.WIKIPEDIA_URLS[lang]['dbpedia_uri'] % (urlize_for_wikipedia(new_label))
else:
dbpedia_uri = None
@@ -140,23 +141,22 @@
-def get_or_create_term(term_label, term_uri, term_lang, thesaurus, wp_label_transform=(lambda l:l), skip_wp_query=False):
+def get_or_create_term(term_label, term_uri, term_lang, thesaurus, lang, wp_label_transform=(lambda l:l), skip_wp_query=False):
term_label_normalized = normalize_term(term_label)
# We get the wikipedia references for the tag_label
# We get or create the tag object
- global site
term, created = Term.objects.get_or_create(uri=term_uri, defaults = {'label':term_label, 'thesaurus':thesaurus, 'normalized_label':term_label_normalized, 'lang' : term_lang}) # @UndefinedVariable
if created:
- wikipedia_revision_id = process_term(__get_site(), term, label=wp_label_transform(term_label_normalized))
+ wikipedia_revision_id = process_term(__get_site(lang), term, lang, label=wp_label_transform(term_label_normalized))
term_label_obj = TermLabel(label=term_label, term=term, lang=term_lang)
term_label_obj.save()
elif term.wikipedia_pageid and not skip_wp_query:
- wp_res = query_wikipedia_title(__get_site(), pageid=term.wikipedia_pageid)
+ wp_res = query_wikipedia_title(__get_site(lang), lang, pageid=term.wikipedia_pageid)
wikipedia_revision_id = wp_res['revision_id']
term.wikipedia_revision_id = wikipedia_revision_id
term.save()
@@ -167,18 +167,23 @@
return term, wikipedia_revision_id, created
-def process_term(site, term, label=None, verbosity=0):
-
- if site == None:
- site = wiki.Wiki(settings.WIKIPEDIA_API_URL) # @UndefinedVariable
-
+def process_term(site, term, lang, label=None, verbosity=0):
+
if not label:
label = term.label
- elif label.startswith(settings.WIKIPEDIA_PAGE_URL):
- url_parts = urlparse(label)
- label = urllib2.unquote(str(url_parts.path.split('/')[-1])).decode("utf-8")
+ else:
+ for lang_code, urls in settings.WIKIPEDIA_URLS.iteritems():
+ if label.startswith(urls['page_url']):
+ # lang is overrided when an url is passed as a label.
+ lang = lang_code
+ url_parts = urlparse(label)
+ label = urllib2.unquote(str(url_parts.path.split('/')[-1])).decode("utf-8")
+ break
- wp_res = query_wikipedia_title(site, label=label)
+ if site == None:
+ site = __get_site(lang)
+
+ wp_res = query_wikipedia_title(site, lang, label=label)
new_label = wp_res['new_label']
alternative_label= wp_res['alternative_label']
status = wp_res['status']
--- a/src/jocondelab/forms.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/forms.py Thu Jul 18 10:39:26 2013 +0200
@@ -13,6 +13,7 @@
from django.utils.html import format_html, escape
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
+from jocondelab import settings
import json
class ThesaurusTreeWidget(Widget):
@@ -59,6 +60,7 @@
class ModifyWpLinkForm(Form):
term_id = fields.IntegerField(required=True)
label = fields.CharField(required=True, min_length=1)
+ wp_lang = fields.ChoiceField(label=_('Wikipedia version'), required=False, choices=tuple([(k,k) for k in settings.WIKIPEDIA_URLS]))
class LinkSemanticLevelForm(Form):
term_id = fields.IntegerField(required=True)
Binary file src/jocondelab/locale/en/LC_MESSAGES/django.mo has changed
--- a/src/jocondelab/locale/en/LC_MESSAGES/django.po Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/locale/en/LC_MESSAGES/django.po Thu Jul 18 10:39:26 2013 +0200
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-07-10 17:11+0200\n"
+"POT-Creation-Date: 2013-07-18 10:33+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -20,114 +20,118 @@
msgid "language"
msgstr "language"
-#: forms.py:44 forms.py:46
+#: forms.py:45 forms.py:47
msgid "Open Dialog"
msgstr "Open thesaurus"
-#: forms.py:77 templates/jocondelab/term_list.html:20
+#: forms.py:63
+msgid "Wikipedia version"
+msgstr "Wikipedia version"
+
+#: forms.py:79 templates/jocondelab/term_list.html:20
msgid "thesaurus"
msgstr "thesaurus"
-#: forms.py:78
+#: forms.py:80
msgid "thesaurus tree"
msgstr "thesaurus tree"
-#: forms.py:79 forms.py:82 templates/jocondelab/term_edit.html:72
+#: forms.py:81 forms.py:84 templates/jocondelab/term_edit.html:75
msgid "label"
msgstr "label"
-#: forms.py:80
+#: forms.py:82
msgid "link_status"
msgstr "link status"
-#: forms.py:81
+#: forms.py:83
msgid "validated"
msgstr "valid."
-#: forms.py:81
+#: forms.py:83
msgid "yes"
msgstr "yes"
-#: forms.py:81
+#: forms.py:83
msgid "no"
msgstr "no"
-#: forms.py:82
+#: forms.py:84
msgid "order_by"
msgstr "order by"
-#: forms.py:82 templates/jocondelab/term_edit.html:171
+#: forms.py:84 templates/jocondelab/term_edit.html:174
#: templates/jocondelab/term_list.html:20
msgid "nb notice"
msgstr "nb of notice"
-#: forms.py:82 templates/jocondelab/term_list.html:20
+#: forms.py:84 templates/jocondelab/term_list.html:20
msgid "level"
msgstr "level"
-#: forms.py:83
+#: forms.py:85
msgid "order_dir"
msgstr "sort order"
-#: forms.py:83
+#: forms.py:85
msgid "asc"
msgstr "asc."
-#: forms.py:83
+#: forms.py:85
msgid "desc"
msgstr "desc."
-#: settings.py:41
+#: settings.py:42
msgid "French"
msgstr "French"
-#: templates/jocondelab/term_edit.html:65
+#: templates/jocondelab/term_edit.html:68
msgid "prev"
msgstr "prev"
-#: templates/jocondelab/term_edit.html:66
+#: templates/jocondelab/term_edit.html:69
#: templates/jocondelab/partial/pagination.html:27
#: templates/jocondelab/partial/pagination.html:29
msgid "next"
msgstr "next"
-#: templates/jocondelab/term_edit.html:76
+#: templates/jocondelab/term_edit.html:79
msgid "alternative labels"
msgstr "alternative labels"
-#: templates/jocondelab/term_edit.html:86
+#: templates/jocondelab/term_edit.html:89
msgid "id"
msgstr "id"
-#: templates/jocondelab/term_edit.html:90
+#: templates/jocondelab/term_edit.html:93
msgid "uri"
msgstr "uri"
-#: templates/jocondelab/term_edit.html:94
+#: templates/jocondelab/term_edit.html:97
msgid "ancestors"
msgstr "ancestors"
-#: templates/jocondelab/term_edit.html:102
+#: templates/jocondelab/term_edit.html:105
msgid "info wikipedia"
msgstr "Wikipedia info"
-#: templates/jocondelab/term_edit.html:111
+#: templates/jocondelab/term_edit.html:114
msgid "Créer page WK"
msgstr "Create WK page"
-#: templates/jocondelab/term_edit.html:111
+#: templates/jocondelab/term_edit.html:114
msgid "Need wikipedia article"
msgstr "Need wikipedia article"
-#: templates/jocondelab/term_edit.html:142
+#: templates/jocondelab/term_edit.html:145
msgid "Rech. joconde"
msgstr "Joconde search"
-#: templates/jocondelab/term_edit.html:148
+#: templates/jocondelab/term_edit.html:151
msgid "Edition wk"
msgstr "WK Edition"
-#: templates/jocondelab/term_edit.html:175
+#: templates/jocondelab/term_edit.html:178
msgid "notices"
msgstr "notices"
Binary file src/jocondelab/locale/en/LC_MESSAGES/djangojs.mo has changed
--- a/src/jocondelab/locale/en/LC_MESSAGES/djangojs.po Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/locale/en/LC_MESSAGES/djangojs.po Thu Jul 18 10:39:26 2013 +0200
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-07-10 17:11+0200\n"
+"POT-Creation-Date: 2013-07-18 10:33+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,28 +16,32 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: static/jocondelab/js/jocondelab.js:12
+#: static/jocondelab/js/jocondelab.js:14
msgid "Redirected from: "
msgstr "Redirected from: "
-#: static/jocondelab/js/jocondelab.js:58
+#: static/jocondelab/js/jocondelab.js:16
+msgid "Source wikipedia"
+msgstr "Wikipedia source"
+
+#: static/jocondelab/js/jocondelab.js:67
#, c-format
msgid "Confirmez-vous la suppression du lien Wikipédia pour le terme \"%s\" ?"
msgstr ""
"Do you confirm the deletion of the wikipedia link for the term \"%s\" ?"
-#: static/jocondelab/js/jocondelab.js:180
+#: static/jocondelab/js/jocondelab.js:192
msgid "Confirmez-vous la validation de ce terme ?"
msgstr "Do you confirm this term validation ?"
-#: static/jocondelab/js/jocondelab.js:183
+#: static/jocondelab/js/jocondelab.js:195
msgid "Confirmez-vous l'invalidation de cette fiche ?"
msgstr "Do you confirm this notice validation ?"
-#: static/jocondelab/js/jocondelab.js:312
+#: static/jocondelab/js/jocondelab.js:326
msgid "Ok"
msgstr "Ok"
-#: static/jocondelab/js/jocondelab.js:325
+#: static/jocondelab/js/jocondelab.js:339
msgid "Cancel"
msgstr "Cancel"
Binary file src/jocondelab/locale/fr/LC_MESSAGES/django.mo has changed
--- a/src/jocondelab/locale/fr/LC_MESSAGES/django.po Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/locale/fr/LC_MESSAGES/django.po Thu Jul 18 10:39:26 2013 +0200
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-07-10 17:11+0200\n"
+"POT-Creation-Date: 2013-07-18 10:33+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,114 +21,119 @@
msgid "language"
msgstr "langue"
-#: forms.py:44 forms.py:46
+#: forms.py:45 forms.py:47
msgid "Open Dialog"
msgstr "Ouvrir thésaurus"
-#: forms.py:77 templates/jocondelab/term_list.html:20
+#: forms.py:63
+#, fuzzy
+msgid "Wikipedia version"
+msgstr "Version wikipedia"
+
+#: forms.py:79 templates/jocondelab/term_list.html:20
msgid "thesaurus"
msgstr "thésaurus"
-#: forms.py:78
+#: forms.py:80
msgid "thesaurus tree"
msgstr "Arbre du thésaurus"
-#: forms.py:79 forms.py:82 templates/jocondelab/term_edit.html:72
+#: forms.py:81 forms.py:84 templates/jocondelab/term_edit.html:75
msgid "label"
msgstr "label"
-#: forms.py:80
+#: forms.py:82
msgid "link_status"
msgstr "statut lien"
-#: forms.py:81
+#: forms.py:83
msgid "validated"
msgstr "validé"
-#: forms.py:81
+#: forms.py:83
msgid "yes"
msgstr "oui"
-#: forms.py:81
+#: forms.py:83
msgid "no"
msgstr "non"
-#: forms.py:82
+#: forms.py:84
msgid "order_by"
msgstr "ord. par"
-#: forms.py:82 templates/jocondelab/term_edit.html:171
+#: forms.py:84 templates/jocondelab/term_edit.html:174
#: templates/jocondelab/term_list.html:20
msgid "nb notice"
msgstr "nb notice"
-#: forms.py:82 templates/jocondelab/term_list.html:20
+#: forms.py:84 templates/jocondelab/term_list.html:20
msgid "level"
msgstr "niveau"
-#: forms.py:83
+#: forms.py:85
msgid "order_dir"
msgstr "ordre tri"
-#: forms.py:83
+#: forms.py:85
msgid "asc"
msgstr "asc."
-#: forms.py:83
+#: forms.py:85
msgid "desc"
msgstr "desc."
-#: settings.py:41
+#: settings.py:42
msgid "French"
msgstr "Français"
-#: templates/jocondelab/term_edit.html:65
+#: templates/jocondelab/term_edit.html:68
msgid "prev"
msgstr "préc."
-#: templates/jocondelab/term_edit.html:66
+#: templates/jocondelab/term_edit.html:69
#: templates/jocondelab/partial/pagination.html:27
#: templates/jocondelab/partial/pagination.html:29
msgid "next"
msgstr "suiv."
-#: templates/jocondelab/term_edit.html:76
+#: templates/jocondelab/term_edit.html:79
msgid "alternative labels"
msgstr "Autres labels"
-#: templates/jocondelab/term_edit.html:86
+#: templates/jocondelab/term_edit.html:89
msgid "id"
msgstr "id"
-#: templates/jocondelab/term_edit.html:90
+#: templates/jocondelab/term_edit.html:93
msgid "uri"
msgstr "uri"
-#: templates/jocondelab/term_edit.html:94
+#: templates/jocondelab/term_edit.html:97
msgid "ancestors"
msgstr "ancêtres"
-#: templates/jocondelab/term_edit.html:102
+#: templates/jocondelab/term_edit.html:105
msgid "info wikipedia"
msgstr "info wikipedia"
-#: templates/jocondelab/term_edit.html:111
+#: templates/jocondelab/term_edit.html:114
msgid "Créer page WK"
msgstr "Créer page WK"
-#: templates/jocondelab/term_edit.html:111
+#: templates/jocondelab/term_edit.html:114
msgid "Need wikipedia article"
msgstr "Besoin article Wikipedia"
-#: templates/jocondelab/term_edit.html:142
+#: templates/jocondelab/term_edit.html:145
msgid "Rech. joconde"
msgstr "Rech. Joconde"
-#: templates/jocondelab/term_edit.html:148
+#: templates/jocondelab/term_edit.html:151
msgid "Edition wk"
msgstr "Edition wk"
-#: templates/jocondelab/term_edit.html:175
+#: templates/jocondelab/term_edit.html:178
msgid "notices"
msgstr "notices"
@@ -175,5 +180,5 @@
msgid "login"
msgstr "connex."
-msgid "English"
-msgstr "Anglais"
+#~ msgid "English"
+#~ msgstr "Anglais"
Binary file src/jocondelab/locale/fr/LC_MESSAGES/djangojs.mo has changed
--- a/src/jocondelab/locale/fr/LC_MESSAGES/djangojs.po Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/locale/fr/LC_MESSAGES/djangojs.po Thu Jul 18 10:39:26 2013 +0200
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-07-10 17:11+0200\n"
+"POT-Creation-Date: 2013-07-18 10:33+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,27 +17,31 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: static/jocondelab/js/jocondelab.js:12
+#: static/jocondelab/js/jocondelab.js:14
msgid "Redirected from: "
msgstr "Redirigé de : "
-#: static/jocondelab/js/jocondelab.js:58
+#: static/jocondelab/js/jocondelab.js:16
+msgid "Source wikipedia"
+msgstr "Source wikipedia"
+
+#: static/jocondelab/js/jocondelab.js:67
#, c-format
msgid "Confirmez-vous la suppression du lien Wikipédia pour le terme \"%s\" ?"
msgstr "Confirmez-vous la suppression du lien Wikipédia pour le terme \"%s\" ?"
-#: static/jocondelab/js/jocondelab.js:180
+#: static/jocondelab/js/jocondelab.js:192
msgid "Confirmez-vous la validation de ce terme ?"
msgstr "Confirmez-vous la validation de ce terme ?"
-#: static/jocondelab/js/jocondelab.js:183
+#: static/jocondelab/js/jocondelab.js:195
msgid "Confirmez-vous l'invalidation de cette fiche ?"
msgstr "Confirmez-vous la validation de cette fiche ?"
-#: static/jocondelab/js/jocondelab.js:312
+#: static/jocondelab/js/jocondelab.js:326
msgid "Ok"
msgstr "Ok"
-#: static/jocondelab/js/jocondelab.js:325
+#: static/jocondelab/js/jocondelab.js:339
msgid "Cancel"
msgstr "Annuler"
--- a/src/jocondelab/management/commands/import_terms.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/management/commands/import_terms.py Thu Jul 18 10:39:26 2013 +0200
@@ -56,6 +56,11 @@
default= False,
help= 'skip wikipedia query'
),
+ make_option('-l','--lang',
+ dest= 'wp_lang',
+ default= 'fr',
+ help= 'wikipedia language'
+ ),
)
@@ -64,6 +69,7 @@
batch_size = options.get('batch_size', 50)
skip_wp_query = options.get('skip_wp_query', False)
+ wp_lang = options.get('wp_lang', 'fr')
transaction.enter_transaction_management()
transaction.managed()
@@ -95,6 +101,7 @@
term_uri=unicode(s),
term_lang=lang,
thesaurus = thes,
+ lang = wp_lang,
wp_label_transform = THESAURUS_LABEL_TRANSFORM.get(thes.label,lambda l:l),
skip_wp_query=skip_wp_query
)
--- a/src/jocondelab/settings.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/settings.py Thu Jul 18 10:39:26 2013 +0200
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Django settings for jocondelab project.
DEBUG = True
@@ -183,11 +184,59 @@
}
}
-WIKIPEDIA_BASE_URL = "http://fr.wikipedia.org/"
-WIKIPEDIA_PAGE_URL = WIKIPEDIA_BASE_URL + "wiki"
-WIKIPEDIA_API_URL = WIKIPEDIA_BASE_URL +"w/api.php"
-WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = WIKIPEDIA_BASE_URL + "w/index.php?oldid=%s"
-DBPEDIA_URI_TEMPLATE = "http://fr.dbpedia.org/resource/%s"
+WIKIPEDIA_URLS = {
+ 'fr': {
+ 'base_url': "http://fr.wikipedia.org",
+ 'page_url': "http://fr.wikipedia.org/wiki",
+ 'api_url': "http://fr.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://fr.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://fr.dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://fr.dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': False,
+ 'disambiguation_cat' : u'Catégorie:Homonymie',
+ },
+ 'en': {
+ 'base_url': "http://en.wikipedia.org",
+ 'page_url': "http://en.wikipedia.org/wiki",
+ 'api_url': "http://en.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://en.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': False,
+ 'disambiguation_cat' : u'Category:Disambiguation pages',
+ },
+ 'it': {
+ 'base_url': "http://it.wikipedia.org",
+ 'page_url': "http://it.wikipedia.org/wiki",
+ 'api_url': "http://it.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://it.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://it.dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://it.dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': True,
+ 'disambiguation_cat' : u'Categoria:Disambigua',
+ },
+ 'de': {
+ 'base_url': "http://de.wikipedia.org",
+ 'page_url': "http://de.wikipedia.org/wiki",
+ 'api_url': "http://de.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://de.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://de.dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://de.dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': True,
+ 'disambiguation_cat' : u'Kategorie:Begriffsklärung',
+ },
+ 'ja': {
+ 'base_url': "http://ja.wikipedia.org",
+ 'page_url': "http://ja.wikipedia.org/wiki",
+ 'api_url': "http://ja.wikipedia.org/w/api.php",
+ 'permalink_tmpl': "http://ja.wikipedia.org/w/index.php?oldid=%s",
+ 'dbpedia_uri' : "http://ja.dbpedia.org/resource/%s",
+ 'dbpedia_sparql_url' : "http://ja.dbpedia.org/sparql",
+ 'dbpedia_sparql_use_proxy': False,
+ 'disambiguation_cat' : u'カテゴリ:同名の地名',
+ },
+}
+
JOCONDE_IMG_BASE_URL = "http://www.culture.gouv.fr/Wave/image/joconde"
JOCONDE_NOTICE_BASE_URL = "http://www.culture.gouv.fr/public/mistral/joconde_fr?ACTION=CHERCHER&FIELD_98=REF&VALUE_98="
JOCONDE_TERM_TREE_MAX_CHILDREN = 50
--- a/src/jocondelab/static/jocondelab/js/jocondelab.js Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/static/jocondelab/js/jocondelab.js Thu Jul 18 10:39:26 2013 +0200
@@ -8,19 +8,21 @@
wp_infobox.find('img').off('error');
+
+
var html_str = "<h3>"+item.label+"</h3>" +
(item.original_label !== item.label ? "<h4>" + gettext("Redirected from: ") + item.original_label+"</h4>":"") +
"<div class='wp-infobox-wp-link'>" +
- "<a target='_blank' href='"+ item.url +"'>Source wikipedia</a>" +
+ "<a target='_blank' href='"+ item.url +"'>" + gettext("Source wikipedia") + "</a>" +
"</div>" +
- "<img class='wp-img"+ ((!item.thumbnail)?" wp-missing-img":"") + "' src=\""+ item.thumbnail+"\"/>" +
- "<div>" + item.abstract + "</div>" ;
-
+ (item.thumbnail?"<img class='wp-img' src=\""+ item.thumbnail+"\"/>":"") +
+ "<div>" + item.abstract + "</div>" ;
wp_infobox.html(html_str);
wp_infobox.find('img').error(function(){
- $(this).addClass('wp-missing-img');
+ $(this).attr('src',static_url+"jocondelab/img/Wikipedia-logo-v2-fr.png");
+ $(this).off('error');
});
wp_infobox
@@ -29,21 +31,28 @@
.show();
}
-function get_dp_sparql(resource_url) {
+function get_dp_sparql(resource_url, wp_lang) {
return "select distinct ?s ?t ?y ?l ?r where { " +
"<"+resource_url+"> rdfs:label ?s . " +
"OPTIONAL { <"+resource_url+"> dbpedia-owl:thumbnail ?t } . " +
- "OPTIONAL { <"+resource_url+"> dbpedia-owl:abstract ?y . FILTER(langMatches(lang(?y), \"fr\")) } . "+
+ "OPTIONAL { <"+resource_url+"> dbpedia-owl:abstract ?y . FILTER(langMatches(lang(?y), \""+wp_lang+"\")) } . "+
"OPTIONAL { <"+resource_url+"> foaf:isPrimaryTopicOf ?l } " +
"OPTIONAL { <"+resource_url+"> dbpedia-owl:wikiPageRedirects ?r } " +
"} LIMIT 100"
}
-function get_dp_ajax(resource_url) {
+function get_dp_ajax(resource_url, wp_lang) {
+ var url;
+ if(wikipedia_urls[wp_lang]['dbpedia_sparql_use_proxy']) {
+ url = wp_sparql_proxy_url.replace(/XY(\/?)$/,wp_lang+"$1");
+ }
+ else {
+ url = wikipedia_urls[wp_lang]['dbpedia_sparql_url'];
+ }
return $.ajax({
- url: "http://fr.dbpedia.org/sparql",
+ url: url,
data: {
- query: get_dp_sparql(resource_url),
+ query: get_dp_sparql(resource_url, wp_lang),
format: "application/sparql-results+json"
},
dataType: "json",
@@ -90,8 +99,9 @@
// Wikipedia search management (new tag)
$("#wp_search").autocomplete({
source: function( request, response ) {
+ var wp_lang = $('#wp_lang').val()
$.ajax({
- url : "http://fr.wikipedia.org/w/api.php",
+ url : wikipedia_urls[wp_lang]['api_url'],
dataType: "jsonp",
data : {
action: "opensearch",
@@ -126,20 +136,22 @@
focus: function(event,ui) {
var page_name = ui.item.label.replace(/ /g, "_");
- var resource_url = "http://fr.dbpedia.org/resource/" + page_name;
- var request = get_dp_ajax(resource_url),
+ var wp_lang_code = $('#wp_lang').val();
+ var resource_url = wikipedia_urls[wp_lang_code]['dbpedia_uri'].replace(/\%s/,page_name);
+ var wp_page_url = wikipedia_urls[wp_lang_code]['page_url'] + "/" + page_name;
+ var request = get_dp_ajax(resource_url, wp_lang_code),
chained = request.then(function(data) {
- res = data.results.bindings.length>0?data.results.bindings[0]:{y:"",l:"http://fr.wikipedia.org/"+page_name,t:"", r:""};
- if(res.r) {
- return get_dp_ajax(res.r.value);
- }
- else {
- return data;
- }
+ res = data.results.bindings.length>0?data.results.bindings[0]:{y:"",l:wp_page_url,t:"", r:""};
+ if(res.r) {
+ return get_dp_ajax(res.r.value, wp_lang_code);
+ }
+ else {
+ return data;
+ }
});
chained.done(function(data) {
- res = data.results.bindings.length>0?data.results.bindings[0]:{s:ui.item.label, y:"",l:"http://fr.wikipedia.org/"+page_name,t:"", r:""};
+ res = data.results.bindings.length>0?data.results.bindings[0]:{s:ui.item.label, y:"",l:wp_page_url,t:"", r:""};
var item = {
label : res.s?res.s.value:ui.item.label,
original_label : ui.item.label,
@@ -163,13 +175,13 @@
};
$('#wp_search').keyup(function(e){
if((e.keyCode==13) && ($("#wp_search").val()!="") && (select_done==false)){
- update_link($("#wp_search").val());
+ update_link($("#wp_search").val(), $("#wp_lang").val());
}
select_done = false;
});
$("#ok_search").click(function(){
if($("#wp_search").val()!=""){
- update_link($("#wp_search").val());
+ update_link($("#wp_search").val(), $("#wp_lang").val());
}
});
// Validate sheet management : the radiobutton name has is "'gr_validated' + datasheet.hda_id"
@@ -217,7 +229,7 @@
});
}
-function update_link(tag_label)
+function update_link(tag_label, wp_lang)
{
$("#ok_search").html("<img src='"+static_url+"jocondelab/img/indicator.gif'>");
var url = modify_wp_link_url;
@@ -226,7 +238,8 @@
type: 'POST',
data: {csrfmiddlewaretoken:global_csrf_token,
term_id:term_id,
- label:tag_label
+ label:tag_label,
+ wp_lang:wp_lang
},
// bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
//dataType: 'json',
@@ -240,6 +253,7 @@
complete: function(){
// We empty the input and hide the ok button
$("#wp_search").val("");
+ $("#wp_lang").val(wp_lang);
$("#ok_search").html("<b>OK</b>");
}
});
@@ -401,7 +415,6 @@
$('.pagination a').click(function(e) {
e.preventDefault();
- console.log(this);
var values = this.href.slice(window.location.href.indexOf('?') + 1)
$('#term-explorer-container').load(term_list_table_url, values, function() {
init_edit_page();
--- a/src/jocondelab/templates/jocondelab/base.html Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/base.html Thu Jul 18 10:39:26 2013 +0200
@@ -34,7 +34,7 @@
{% block js_declaration %}
<script type="text/javascript">
var term_tree_json_url = "{% url 'term_tree' 0 %}";
- var term_tree_valid_thesaurus = JSON.parse('{{ term_tree_valid_thesaurus | safe }}') ;
+ var term_tree_valid_thesaurus = {% if term_tree_valid_thesaurus %}JSON.parse('{{ term_tree_valid_thesaurus | safe }}'){% else %}[]{% endif %} ;
</script>
{% endblock %}
--- a/src/jocondelab/templates/jocondelab/term_edit.html Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/term_edit.html Thu Jul 18 10:39:26 2013 +0200
@@ -15,6 +15,9 @@
var validate_term_url = "{% url 'validate_term' %}";
var term_list_table_url = "{% url 'term_list_table' %}";
var link_semantic_level_url = "{% url 'editon_link_semantic_level' %}";
+ var wp_sparql_proxy_url = "{% url 'wp_sparql_proxy' 'XY' %}";
+ var wikipedia_urls = JSON.parse('{{ wikipedia_urls | safe }}');
+ var select_done = false;
$(document).ready(function(){
init_term_events();
@@ -160,9 +163,9 @@
</span>
<span>
{% if term.validated %}
- <span><input type="text" name="wp_search" id="wp_search" size="30" disabled="disabled" /> <span id="ok_search_disabled" class="hand_cursor_disabled"><b>OK</b></span></span>
+ <span><select name="wp_lang" id="wp_lang" disabled="disabled"><option value="fr" selected="selected">fr</option></select><input type="text" name="wp_search" id="wp_search" size="30" disabled="disabled" /> <span id="ok_search_disabled" class="hand_cursor_disabled"><b>OK</b></span></span>
{% else %}
- <span><input type="text" name="wp_search" id="wp_search" size="30" /> <span id="ok_search" class="hand_cursor"><b>OK</b></span></span>
+ <span><select name="wp_lang" id="wp_lang">{% for wp_lang in wikipedia_lang_list %}<option value="{{ wp_lang }}" {% if wp_lang == 'fr' %}selected="selected"{% endif %}>{{ wp_lang }}</option>{% endfor %}</select><input type="text" name="wp_search" id="wp_search" size="30" /> <span id="ok_search" class="hand_cursor"><b>OK</b></span></span>
{% endif %}
</span>
</td>
@@ -188,12 +191,12 @@
<div class="notice-desc">
<table>
<tr><td class="notice-field-title">ref</td><td class="notice-field-val"><a target="_blank" href="{{JOCONDE_NOTICE_BASE_URL}}{{ notice.ref }}">{{ notice.ref }}</a></td></tr>
- <tr><td class="notice-field-title">domn</td><td class="notice-field-val">{{ notice.domn }}</td></tr>
- <tr><td class="notice-field-title">deno</td><td class="notice-field-val">{{ notice.deno }}</td></tr>
- <tr><td class="notice-field-title">titr</td><td class="notice-field-val">{{ notice.titr }}</td></tr>
- <tr><td class="notice-field-title">pdec</td><td class="notice-field-val">{{ notice.pdec }}</td></tr>
- <tr><td class="notice-field-title">lieux</td><td class="notice-field-val">{{ notice.lieux }}</td></tr>
- <tr><td class="notice-field-title">inv</td><td class="notice-field-val">{{ notice.inv }}</td></tr>
+ <tr><td class="notice-field-title">titr</td><td class="notice-field-val">{{ notice.titr | truncatewords:100}}</td></tr>
+ <tr><td class="notice-field-title">autr</td><td class="notice-field-val">{{ notice.autr | truncatewords:100}}</td></tr>
+ <tr><td class="notice-field-title">paut</td><td class="notice-field-val">{{ notice.paut | truncatewords:100 }}</td></tr>
+ <tr><td class="notice-field-title">sref</td><td class="notice-field-val">{{ notice.sref | truncatewords:100}}</td></tr>
+ <tr><td class="notice-field-title">drep</td><td class="notice-field-val">{{ notice.drep | truncatewords:100}}</td></tr>
+ <tr><td class="notice-field-title">lieux</td><td class="notice-field-val">{{ notice.lieux | truncatewords:100}}</td></tr>
</table>
</div>
</td>
--- a/src/jocondelab/urls.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/urls.py Thu Jul 18 10:39:26 2013 +0200
@@ -1,9 +1,10 @@
from .views import (TermListView, TermEditView, TermModifyWpLink,
TermRemoveWpLink, TermValidate, TermWikipediaEdition,
TermLinkSemanticLevelEdition, ThesaurusTree)
+from core import urls as core_urls
from django.conf.urls import patterns, include, url
from django.contrib import admin
-from django.contrib.auth import urls as auth_url
+from django.contrib.auth import urls as auth_urls
from django.contrib.auth.decorators import login_required
from jocondelab.views import TermListTableView
@@ -14,7 +15,8 @@
admin.autodiscover()
urlpatterns = patterns('',
- url(r'^auth/', include(auth_url)),
+ url(r'^auth/', include(auth_urls)),
+ url(r'^core/', include(core_urls)),
url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', name='joconde_logout'),
url(r'^admin/', include(admin.site.urls)),
url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
--- a/src/jocondelab/views.py Thu Jul 11 14:26:00 2013 +0200
+++ b/src/jocondelab/views.py Thu Jul 18 10:39:26 2013 +0200
@@ -117,6 +117,8 @@
context['link_semantic_level_choice'] = TERM_WK_LINK_SEMANTIC_LEVEL_CHOICES
context['JOCONDE_IMG_BASE_URL'] = settings.JOCONDE_IMG_BASE_URL
context['JOCONDE_NOTICE_BASE_URL'] = settings.JOCONDE_NOTICE_BASE_URL
+ context['wikipedia_lang_list'] = settings.WIKIPEDIA_URLS.keys()
+ context['wikipedia_urls'] = json.dumps(settings.WIKIPEDIA_URLS)
field_index = {
'DOMN' : 1,
@@ -252,8 +254,9 @@
def process_term(self, request):
label = self.form_values['label']
+ wp_lang = self.form_values['wp_lang']
- wp_process_term(None, self.term, label)
+ wp_process_term(None, self.term, wp_lang, label=label)
return HttpResponse(status=204)