# HG changeset patch # User ymh # Date 1374136766 -7200 # Node ID 5d9223bb3aabc1fec6f025fa6dd0318e12bcf2ba # Parent 9a7c391fb123bb256064774c4cf1d2dedebe33fe Add other wikipedia. change joconde notice preview (as in bug #17508) diff -r 9a7c391fb123 -r 5d9223bb3aab .settings/org.eclipse.core.resources.prefs --- 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 diff -r 9a7c391fb123 -r 5d9223bb3aab src/core/models/term.py --- 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): diff -r 9a7c391fb123 -r 5d9223bb3aab src/core/settings.py --- 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'カテゴリ:同名の地名', + }, +}) diff -r 9a7c391fb123 -r 5d9223bb3aab src/core/urls.py --- /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\w{2})/', login_required(SparqlEndpointProxy.as_view()), name='wp_sparql_proxy'), +) \ No newline at end of file diff -r 9a7c391fb123 -r 5d9223bb3aab src/core/views.py --- 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 diff -r 9a7c391fb123 -r 5d9223bb3aab src/core/wp_utils.py --- 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'] diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/forms.py --- 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) diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/locale/en/LC_MESSAGES/django.mo Binary file src/jocondelab/locale/en/LC_MESSAGES/django.mo has changed diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/locale/en/LC_MESSAGES/django.po --- 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 \n" "Language-Team: LANGUAGE \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" diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/locale/en/LC_MESSAGES/djangojs.mo Binary file src/jocondelab/locale/en/LC_MESSAGES/djangojs.mo has changed diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/locale/en/LC_MESSAGES/djangojs.po --- 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 \n" "Language-Team: LANGUAGE \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" diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/locale/fr/LC_MESSAGES/django.mo Binary file src/jocondelab/locale/fr/LC_MESSAGES/django.mo has changed diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/locale/fr/LC_MESSAGES/django.po --- 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 \n" "Language-Team: LANGUAGE \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" diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/locale/fr/LC_MESSAGES/djangojs.mo Binary file src/jocondelab/locale/fr/LC_MESSAGES/djangojs.mo has changed diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/locale/fr/LC_MESSAGES/djangojs.po --- 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 \n" "Language-Team: LANGUAGE \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" diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/management/commands/import_terms.py --- 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 ) diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/settings.py --- 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 diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/static/jocondelab/js/jocondelab.js --- 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 = "

"+item.label+"

" + (item.original_label !== item.label ? "

" + gettext("Redirected from: ") + item.original_label+"

":"") + "" + - "" + - "
" + item.abstract + "
" ; - + (item.thumbnail?"":"") + + "
" + item.abstract + "
" ; 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(""); 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("OK"); } }); @@ -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(); diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/templates/jocondelab/base.html --- 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 %} {% endblock %} diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/templates/jocondelab/term_edit.html --- 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 @@ {% if term.validated %} - OK + OK {% else %} - OK + OK {% endif %} @@ -188,12 +191,12 @@
- - - - - - + + + + + +
ref{{ notice.ref }}
domn{{ notice.domn }}
deno{{ notice.deno }}
titr{{ notice.titr }}
pdec{{ notice.pdec }}
lieux{{ notice.lieux }}
inv{{ notice.inv }}
titr{{ notice.titr | truncatewords:100}}
autr{{ notice.autr | truncatewords:100}}
paut{{ notice.paut | truncatewords:100 }}
sref{{ notice.sref | truncatewords:100}}
drep{{ notice.drep | truncatewords:100}}
lieux{{ notice.lieux | truncatewords:100}}
diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/urls.py --- 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), diff -r 9a7c391fb123 -r 5d9223bb3aab src/jocondelab/views.py --- 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)