Changeset ccbf8a9 in osmose-backend


Ignore:
Timestamp:
Sep 29, 2014 10:47:35 PM (5 years ago)
Author:
Frédéric Rodrigo <fred.rodrigo@…>
Branches:
master
Children:
3f10546
Parents:
1f3bffc
git-author:
Frédéric Rodrigo <fred.rodrigo@…> (29/09/2014 22:46:45)
git-committer:
Frédéric Rodrigo <fred.rodrigo@…> (29/09/2014 22:47:35)
Message:

Detect useless wikipedia:xy when topic is the same as primary wikipedia tag

File:
1 edited

Legend:

Unmodified
Added
Removed
  • plugins/TagFix_Wikipedia.py

    r043ae80 rccbf8a9  
    2121 
    2222from plugins.Plugin import Plugin 
     23from modules.downloader import urlread 
    2324import urllib 
     25import json 
    2426 
    2527 
     
    3436        self.errors[30315] = { "item": 3031, "level": 2, "tag": ["value", "wikipedia", "fix:chair"], "desc": T_(u"Invalid wikipedia suffix") } 
    3537        self.errors[30316] = { "item": 3031, "level": 2, "tag": ["value", "wikipedia", "fix:chair"], "desc": T_(u"Duplicate wikipedia tag as suffix and prefix") } 
     38        self.errors[30317] = { "item": 3031, "level": 2, "tag": ["value", "wikipedia", "fix:chair"], "desc": T_(u"Same wikipedia topic on other language") } 
    3639 
    3740        import re 
     
    6871                err.append((30313, 3, {"fix": {wikipediaTag: self.human_readable(tags[wikipediaTag])}} )) 
    6972 
     73        interwiki = False 
    7074        for tag in [t for t in tags if t.startswith(wikipediaTag+":")]: 
    7175            suffix = tag[len(wikipediaTag)+1:] 
    7276            if ":" in suffix: 
    7377                suffix = suffix.split(":")[0] 
     78 
     79            if wikipediaTag in tags: 
     80                if interwiki == False: 
     81                    try: 
     82                        lang, title = tags[wikipediaTag].split(':') 
     83                        json_str = urlread("http://"+lang+".wikipedia.org/w/api.php?action=query&prop=langlinks&titles="+urllib.quote(title)+"&redirects=&lllimit=500&format=json" , 30) 
     84                        interwiki = json.loads(json_str) 
     85                        interwiki = dict(map(lambda x: [x["lang"], x["*"]], interwiki["query"]["pages"].values()[0]["langlinks"])) 
     86                    except: 
     87                        interwiki = None 
     88 
     89                    if interwiki and suffix in interwiki and interwiki[suffix] == self.human_readable(tags[tag]): 
     90                        err.append((30317, 7, {"fix": [ 
     91                            {'-': [tag]}, 
     92                            {'-': [tag], '~': {wikipediaTag: suffix+':'+interwiki[suffix]}} 
     93                        ]} )) 
    7494 
    7595            if suffix in tags: 
     
    113133        errors = self.analyser.analyse(tags) 
    114134        errors_msg = [self.analyser.errors[e[0]]["desc"]["en"] for e in errors]+[e[2]["en"] for e in errors if "en" in e[2]] 
    115         errors_fix = [e[2].get("fix") for e in errors] 
     135        errors_fix = [] 
     136        for e in errors: 
     137            if isinstance(e[2].get("fix"), list): 
     138                errors_fix.extend(e[2].get("fix")) 
     139            else: 
     140                errors_fix.append(e[2].get("fix")) 
    116141        if has_error==False and errors_msg: 
    117142            print "FAIL:%s\nshould not have errors\nCurrent errors: %s\n"%(tags, errors_msg) 
     
    139164 
    140165        err += self.check( { "wikipedia": "fr:Tour Eiffel", 
    141                              "wikipedia:de" : "Eiffelturm"}, 
     166                             "wikipedia:de" : "Plop"}, 
    142167                           has_error=False) 
    143168        # add check on synonyme 
     
    200225        err += self.check( { "name" : "Rue Jules Verne", 
    201226                             "wikipedia:name": "fr:Jules Verne", 
    202                              "wikipedia:name:de" : "Jules Verne"}, 
     227                             "wikipedia:name:de" : "Foo Bar"}, 
    203228                           has_error=False) 
    204229 
     
    246271                           has_error=u"Duplicate wikipedia tag as suffix and prefix") 
    247272 
     273        # Same wikipedia topic on other language 
     274        err += self.check( {"wikipedia": "fr:Tour Eiffel", 
     275                            "wikipedia:en": "Eiffel Tower"}, 
     276                           has_error="Same wikipedia topic on other language", 
     277                           fix=[{"-": ["wikipedia:en"]}, 
     278                                {"-": ["wikipedia:en"], "~": {"wikipedia": "en:Eiffel Tower"}}]) 
     279 
     280        err += self.check( {"wikipedia": "fr:Tour Eiffel", 
     281                            "wikipedia:en": "Plop"}, 
     282                           has_error=False) 
     283 
    248284        if err: 
    249285            print "%i errors" % err 
    250286        assert not err 
    251          
Note: See TracChangeset for help on using the changeset viewer.