def init(self, logger):
        Plugin.init(self, logger)
        self.errors[2070] = {"item": 2070, "level": 2, "tag": ["tag", "fix:chair"], "desc": T_(u"Missing tag by cooccurrence") }

        bdd = update_cache("http://taginfo.openstreetmap.org/download/taginfo-db.db.bz2", 30, bz2_decompress=True)

        if not os.path.exists(bdd):
            self.info = {}
            for type in ['nodes', 'ways', 'relations']:
                self.info[type] = {}
            return

        # Taginfo wiki extract database
        con = sqlite3.connect(bdd)

        with con:
            cur = con.cursor()
            cur.execute(sql01)
            self.info = {}
            for type in ['nodes', 'ways', 'relations']:
                cur.execute(sql02 % {'type':'nodes'})
                rows = cur.fetchall()
                info = {}
                for row in rows:
                    if row[1] in info:
                        info[row[1]].append(row)
                    else:
                         info[row[1]] = [row]
                self.info[type] = info
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[703] = { "item": 5010, "level": 2, "tag": ["name", "fix:chair"], "desc": T_(u"Word not found in dictionary") }
        self.errors[704] = { "item": 5010, "level": 1, "tag": ["value", "fix:chair"], "desc": T_(u"Encoding problem") }

        self.DictKnownWords = [""]
        self.DictCorrections = {}
        self.DictUnknownWords = []
        self.DictCommonWords = [""]
        self.DictEncoding = {}
        self.apostrophe = None

        self.init_dictionaries()

        # Inconsistencies: words and dict and bad dict
        #self.LogInformation(u"Mot(s) à corriger et à accepter")
        #for k in self.DictCorrectionsK:
        #    if k in self.DictKnownWords:
        #        self.DictKnownWords.remove(k)
        #        self.LogInformation(u"  " + k)

        # Inconsistencies:
        #self.LogInformation(u"Correction(s) absentes du dictionnaire")
        #for k in self.DictCorrectionsK:
        #    for v in self.DictCorrections[k].split("|"):
        #        if v not in self.DictKnownWords:
        #            self.LogInformation(u"  " + k + " => " + self.DictCorrections[k])
        #            self.DictCorrectionsK.remove(k)
        #            self.DictCorrections.pop(k)
        #            break

        self.DictKnownWords = set(self.DictKnownWords)
        self.DictUnknownWords = set(self.DictUnknownWords)
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[30310] = {
            "item": 3031,
            "level": 2,
            "tag": ["value", "wikipedia", "fix:chair"],
            "desc": T_(u"Not a Wikipedia URL"),
        }
        self.errors[30311] = {
            "item": 3031,
            "level": 2,
            "tag": ["value", "wikipedia", "fix:chair"],
            "desc": T_(u"Wikipedia URL instead of article title"),
        }
        self.errors[30312] = {
            "item": 3031,
            "level": 2,
            "tag": ["value", "wikipedia", "fix:chair"],
            "desc": T_(u"Missing Wikipedia language before article title"),
        }
        self.errors[30313] = {
            "item": 3031,
            "level": 2,
            "tag": ["value", "wikipedia", "fix:chair"],
            "desc": T_(u"Use human Wikipedia page title"),
        }
        self.errors[30314] = {
            "item": 3031,
            "level": 2,
            "tag": ["value", "wikipedia", "fix:chair"],
            "desc": T_(u"Missing primary Wikipedia tag"),
        }
        self.errors[30315] = {
            "item": 3031,
            "level": 2,
            "tag": ["value", "wikipedia", "fix:chair"],
            "desc": T_(u"Invalid wikipedia suffix"),
        }
        self.errors[30316] = {
            "item": 3031,
            "level": 2,
            "tag": ["value", "wikipedia", "fix:chair"],
            "desc": T_(u"Duplicate wikipedia tag as suffix and prefix"),
        }
        self.errors[30317] = {
            "item": 3031,
            "level": 2,
            "tag": ["value", "wikipedia", "fix:chair"],
            "desc": T_(u"Same wikipedia topic on other language"),
        }

        import re

        self.wiki_regexp = re.compile(u"(https?://)?([^\.]+)\.wikipedia.+/wiki/(.+)")
        self.lang_regexp = re.compile(u"[-a-z]+:.*")
        self.lang_restriction_regexp = re.compile(u"^[a-z]{2}$")

        self.Language = self.father.config.options.get("language")
        if not isinstance(self.Language, basestring):
            self.Language = None
Exemple #4
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.Language = self.father.config.options.get("language")
        if not self.Language:
            # no language
            return False
        elif isinstance(self.Language, list):
            # more than one language
            return False  # Checked by Name_Multilingual

        self.errors[50601] = self.def_class(
            item=5060,
            level=1,
            tags=['name', 'fix:chair'],
            title=T_('Default and local language name not the same'))
        self.errors[50602] = self.def_class(
            item=5060,
            level=1,
            tags=['name', 'fix:chair'],
            title=T_('Local language name without default name'))
        self.errors[50603] = self.def_class(
            item=5060,
            level=1,
            tags=['name', 'fix:chair'],
            title=T_('Language name without default name'))

        self.Language = self.father.config.options.get("language").split(
            '_')[0]
        self.LocalName = re.compile("^name:[a-z][a-z](_.*$|$)")
Exemple #5
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.Language = self.father.config.options.get("language")
        if not self.Language:
            # no language
            return False
        if not isinstance(self.Language,
                          basestring) and len(self.Language) != 1:
            # more than one language
            return False  # Checked by Name_Multilingual

        if not isinstance(self.Language, basestring):
            self.Language = None

        self.errors[50601] = {
            "item": 5060,
            "level": 1,
            "tag": ["name", "fix:chair"],
            "desc": T_(u"Default and local language name not the same")
        }
        self.errors[50602] = {
            "item": 5060,
            "level": 1,
            "tag": ["name", "fix:chair"],
            "desc": T_(u"Local language name without default name")
        }
        self.errors[50603] = {
            "item": 5060,
            "level": 1,
            "tag": ["name", "fix:chair"],
            "desc": T_(u"Language name without default name")
        }

        self.Language = self.father.config.options.get("language")
        self.LocalName = re.compile("^name:[a-z][a-z](_.*$|$)")
Exemple #6
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[3090] = {
         "item": 3090,
         "level": 3,
         "tag": ["value", "fix:chair"],
         "desc": T_(u"Bad date format")
     }
     self.tag_date = [
         "date",
         "start_date",
         "end_date",
         "paved:date",
         "date_closed",
         "built_date",
         "opening_date",
         "check_date",
         "open_date",
         "construction:date",
         "temporary:date_on",  # Construction
         "mhs:inscription_date",  # Heritage
     ]
     self.default_date = datetime.datetime(9999, 12, 1)
     self.Year = re.compile(u"^[12][0-9][0-9][0-9]$")
     self.Day1 = re.compile(u"^[12][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$")
     self.Day2 = re.compile(u"^[0-9][0-9]/[0-9][0-9]/[12][0-9][0-9][0-9]$")
     self.Aprox = re.compile(
         u"^(?:early|mid|late|before|after|spring|summer|autumn|winter) [^ ]+"
     )
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[11701] = {
         "item": 1170,
         "level": 2,
         "tag": ["relation", "multipolygon", "fix:chair"],
         "desc": T_(u"Inadequate role for multipolygon")
     }
     self.errors[11702] = {
         "item": 1170,
         "level": 2,
         "tag": ["relation", "multipolygon", "fix:chair"],
         "desc": T_(u"Inadequate member for multipolygon")
     }
     self.errors[11703] = {
         "item": 1170,
         "level": 1,
         "tag": ["relation", "multipolygon", "fix:imagery"],
         "desc": T_(u"Missing outer role for multipolygon")
     }
     self.errors[11704] = {
         "item": 1170,
         "level": 3,
         "tag": ["relation", "multipolygon", "fix:chair"],
         "desc": T_(u"This multipolygon is a simple polygon")
     }
    def init(self, logger):
        Plugin.init(self, logger)
        tags = capture_tags = {}
        self.errors[50109001] = {'item': 5010, 'level': 2, 'tag': mapcss.list_(u'name', u'fix:chair'), 'desc': mapcss.tr(u'Arabic letter detected in Farsi name')}

        self.re_4234bf3b = re.compile(r'ك')
        self.re_5eeade1c = re.compile(r'ي')
Exemple #9
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[3140] = {"item": 3140, "level": 2, "tag": ["tag"], "desc": {"en": u"Object taggin type", "fr": u"Type d'objet pour un tag"} }

        # Taginfo wiki extract database
        # http://taginfo.openstreetmap.org/download/taginfo-wiki.db.bz2
        con = lite.connect('taginfo-wiki.db')

        with con:
            cur = con.cursor()
            cur.execute("select tag, on_node, on_way, on_area, on_relation from wikipages where lang='en' and (on_node or on_way or on_area or on_relation)")
            rows = cur.fetchall()

            self.tag_supported = set()
            self.tag_node = set()
            self.tag_way = set()
            self.tag_area = set()
            self.tag_relation = set()
            for row in rows:
                if not "=" in row[0]:
                    self.tag_supported.add(row[0])
                    if row[1]:
                        self.tag_node.add(row[0])
                    if row[2]:
                        self.tag_way.add(row[0])
                    if row[3]:
                        self.tag_area.add(row[0])
                    if row[4]:
                        self.tag_relation.add(row[0])
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[702] = {
            "item": 5020,
            "level": 2,
            "tag": ["name", "fix:chair"],
            "desc": T_(u"Badly written way type"),
        }

        self.ReTests = {}
        # Captial at start already checked by Toponymie plugin
        self.ReTests[(0, u"Allée")] = re.compile(u"^([A][Ll][Ll]?[EÉée][Ee]?|[Aa][Ll][Ll]\.) .*$")
        self.ReTests[(0, u"Allées")] = re.compile(u"^([A][Ll][Ll]?[EÉée][Ee]?[sS]) .*$")
        self.ReTests[(1, u"Boulevard")] = re.compile(u"^([B]([Oo][Uu][Ll][Ll]?[Ee]?)?[Vv]?([Aa][Rr])?[Dd]\.?) .*$")
        self.ReTests[(2, u"Avenue")] = self.generator(u"Av|enue")
        self.ReTests[(4, u"Chemin")] = self.generator(u"Che|min")
        self.ReTests[(5, u"Route")] = re.compile(u"^([R]([Oo][Uu])?[Tt][Ee]?\.?) .*$")
        self.ReTests[(6, u"Esplanade")] = re.compile(u"^([EÉ][Ss][Pp][Ll][Aa][Nn][Aa][Dd][Ee]) .*$")
        self.ReTests[(7, u"Rue")] = self.generator(u"R|ue")
        self.ReTests[(8, u"Giratoire")] = re.compile(u"^([G][Ii][Rr][Aa][Tt][Oo][Ii][Rr][Ee]) .*$")
        self.ReTests[(9, u"Rond-Point")] = re.compile(u"^([R][Oo][Nn][Dd]-[p][Oo][Ii][Nn][Tt]) .*$")
        self.ReTests[(9, u"Rondpoint")] = re.compile(u"^([R][Oo][Nn][Dd][Pp][Oo][Ii][Nn][Tt]) .*$")
        self.ReTests[(10, u"Carrefour")] = re.compile(u"^([C][Aa][Rr][Rr][Ee][Ff][Oo][Uu][Rr]) .*$")
        self.ReTests[(11, u"Place")] = self.generator(u"Pl|ace")
        self.ReTests[(12, u"Impasse")] = self.generator(u"Imp|asse")
        self.ReTests[(13, u"Quai")] = self.generator(u"Qu|ai")
        self.ReTests[(14, u"Square")] = self.generator(u"Sq|uare")
        self.ReTests = self.ReTests.items()
Exemple #11
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[3110] = {"item": 3110, "level": 3, "tag": ["fixme", "fix:chair"], "desc": T_(u"Possible improvement for note or comment tag") }
     self.FixmeFull = (
         "fix me", "grosso modo", "note de memoire", )
     self.FixmeWord = (
         "?",  "accurate",  "approximatif",  "approximation",
         "approximativement",  "attendre",  "bad",  "check",  "checkme",
         "completer",  "corriger",  "crappy",  "draft",  "effacer",
         "estimation",  "exact",  "gourre",  "incomplete",  "renderers",
         "rendering",  "semblant",  "semble",  "tag",  "tagged",  "tagguer",
         "todo",  "uncertain",  "verified",  "verifier",  "wip", )
     self.Opening_hours = (
         "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche",
         "janvier",  "fevrier",  "mars",  "avril",  "mai",  "juin",  "juillet",
         "aout",  "septembre",  "octobre",  "novembre",  "decembre", )
     self.Destruction = (
         "ferme",  "fermee",  "ancien",  "ancienne",  "brule",  "brulee",  "burn",  "closed",  "declasse",
         "declassee",  "demoli",  "demolished",  "demolition",  "destroyed",
         "detruit",  "no_longer",  "rase",  "rasee", )
     self.Construction = (
         "construction", "travaux", "ouvert", "ouverture")
     self.TagFull = (
         "arret de bus",  "http://",  "maison de retraite",  "reserve naturelle",
         "salle des fetes",  "voies de service",  "zone 30", )
     self.TagWord = (
         "football",  "basket",  "bassin",  "canal",  "cyclable",  "ecluse",
         "ehpad",  "entree",  "etang",  "garages",  "gare",  "gendarmerie",
         "gynmase",  "halles",  "handball",  "hangar",  "jardin",  "piste",
         "plot",  "prairie",  "prive",  "ruin",  "ruine",  "sortie",  "tel",  "toilettes",
         "transformateur",  "verger",  "volley", )
     self.Hours = re.compile("[0-9]{1,2}h")
     self.Date = re.compile("[0-9]{4,8}|(?:(?:[0-9]{1,2}/){2}/[0-9]{2,4})")
     self.Split = re.compile('[- _\(\),.:/''"+!;<>=\[\]]')
Exemple #12
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[3091] = { "item": 3091, "level": 2, "tag": ["value", "fix:chair"], "desc": T_(u"Numerical value") }
     self.tag_number = ["height", "maxheight", "maxheight:physical", "width", "maxwidth", "length", "maxlength", "maxweight", "maxspeed", "population", "admin_level", "ele"]
     self.Number = re.compile(u"^((?:[0-9]+(?:[.][0-9]+)?)|(?:[.][0-9]+))(?: ?(?:m|ft|cm|km|lbs|tons|t|T|mph|knots)|'(?:[0-9]*(?:[.][0-9]+)?\")?|\")?$")
     self.MaxspeedExtraValue = ["none", "signals", "national", "no", "unposted", "walk", "urban", "variable"]
     self.MaxspeedClassValue = re.compile(u'^[A-Z]*:.*$')
Exemple #13
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[3070] = self.def_class(item = 3070, level = 2, tags = ['value', 'fix:chair'],
            title = T_('Multiple values'),
            detail = T_(
'''The tag contains multiple values.'''),
            fix = T_(
'''Check the accuracy of the values, if necessary, delete the obsolete
values.'''))

        self.SimpleValuedTag = set((
            'addr:street', 'admin_level', 'amenity', 'attraction',
            'bicycle', 'building',
            'cycleway',
            'ele', 'est_width',
            'foot',
            'highway',
            'landuse', 'lanes', 'layer',
            'left:city', 'left:country', 'left:departement', 'left:village',
            'leisure',
            'maxspeed', 'motorcar', 'mtb:scale',
            'name', 'natural',
            'oneway',
            'power',
            'railway',
            'right:city', 'right:country', 'right:departement', 'right:village',
            'smoothness', 'surface',
            'tracktype', 'trail_visibility', 'type',
            'waterway', 'width', 'wikipedia', 'wires', 'wood',
       ))
Exemple #14
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[30326] = { "item": 3032, "level": 1, "tag": ["tag", "fix:chair"], "desc": T_(u"Watch multiple tags") }

        import re
        self.Punta = re.compile(u"punta .*", re.IGNORECASE)
        self.Panaderia = re.compile(u"panader.a (.*)", re.IGNORECASE)
Exemple #15
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[32001] = { "item": 3200, "level": 3, "tag": ["tag", "fix:chair"], "desc": T_(u"Bad usage of area=yes. Object is already an area by nature") }
     self.errors[32002] = { "item": 3200, "level": 3, "tag": ["tag", "fix:chair"], "desc": T_(u"area=yes on object without kind") }
     self.errors[32003] = { "item": 3200, "level": 3, "tag": ["tag", "fix:chair"], "desc": T_(u"Bad usage of area=no. Object must be a surface") }
     self.area_yes_good = set(('aerialway', 'aeroway', 'amenity', 'barrier', 'highway', 'historic', 'leisure', 'man_made', 'military', 'power', 'public_transport', 'sport', 'tourism', 'waterway'))
     self.area_yes_bad = set(('boundary', 'building', 'craft', 'geological', 'landuse', 'natural', 'office', 'place', 'shop', 'indoor'))
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[3120] = {"item": 3120, "level": 3, "tag": ["natural", "fix:imagery"], "desc": T_(u"Tree tagging") }

        self.Tree = {}
        self.liste_des_arbres_fruitiers()
        self.liste_des_essences_europennes()
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[30320] = { "item": 3032, "level": 1, "tag": ["tag", "highway", "fix:chair"], "desc": T_(u"Watch multiple tags") }
        self.errors[30323] = { "item": 3032, "level": 3, "tag": ["tag", "fix:chair"], "desc": T_(u"Watch multiple tags") }
        self.errors[30327] = { "item": 3032, "level": 2, "tag": ["tag", "fix:chair"], "desc": T_(u"Waterway with level") }
        self.errors[20800] = { "item": 2080, "level": 1, "tag": ["tag", "highway", "roundabout", "fix:chair"], "desc": T_(u"Tag highway missing on junction") }
        self.errors[20801] = { "item": 2080, "level": 1, "tag": ["tag", "highway", "fix:chair"], "desc": T_(u"Tag highway missing on oneway") }
        self.errors[20301] = { "item": 2030, "level": 1, "tag": ["tag", "highway", "cycleway", "fix:survey"], "desc": T_(u"Opposite cycleway without oneway") }
        self.errors[71301] = { "item": 7130, "level": 3, "tag": ["tag", "highway", "maxheight", "fix:survey"], "desc": T_(u"Missing maxheight tag") }
        self.errors[21101] = { "item": 2110, "level": 3, "tag": ["tag"], "desc": T_(u"Missing object kind") }
        self.errors[1050] = { "item": 1050, "level": 1, "tag": ["highway", "roundabout", "fix:chair"], "desc": T_(u"Reverse roundabout") }
        self.errors[40201] = { "item": 4020, "level": 1, "tag": ["highway", "roundabout"], "desc": T_(u"Roundabout as area") }
        self.errors[21201] = { "item": 2120, "level": 3, "tag": ["indoor"], "desc": T_(u"Level or repeat_on tag missing") }
        self.errors[21202] = { "item": 2120, "level": 3, "tag": ["indoor"], "desc": T_(u"Indoor or buildingpart tag missing") }
        self.errors[20802] = { "item": 2080, "level": 2, "tag": ["highway"], "desc": T_(u"Missing tag ref for emergency access point") }
#        self.errors[70401] = { "item": 7040, "level": 2, "tag": ["tag", "power", "fix:chair"], "desc": T_(u"Bad power line kind") }
        self.errors[32200] = { "item": 3220, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"access=yes|permissive allow all transport modes") }
        self.errors[32201] = { "item": 3220, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"access=yes|permissive allow all transport modes") }
        self.driving_side_right = not(self.father.config.options.get("driving_side") == "left")
        self.driving_direction = "anticlockwise" if self.driving_side_right else "clockwise"
        name_parent = []
        for i in ('type', 'aerialway', 'aeroway', 'amenity', 'barrier', 'boundary', 'building', 'craft', 'entrance', 'emergency', 'geological', 'highway', 'historic', 'landuse', 'leisure', 'man_made', 'military', 'natural', 'office', 'place', 'power', 'public_transport', 'railway', 'route', 'shop', 'sport', 'tourism', 'waterway', 'mountain_pass', 'traffic_sign', 'mountain_pass', 'golf', 'piste:type', 'junction', 'healthcare', 'health_facility:type', 'indoor'):
            name_parent.append(i)
            name_parent.append("disused:" + i)
            name_parent.append("abandoned:" + i)
        self.name_parent = set(name_parent)
Exemple #18
0
    def init(self, logger):
        Plugin.init(self, logger)
        if self.father.config.options.get("project") != 'openstreetmap':
            return False
        self.errors[31901] = {
            "item": 3190,
            "level": 3,
            "tag": ["postcode", "fix:chair"],
            "desc": T_(u"Invalid postcode")
        }

        self.Country = None
        if self.father.config.options.get("country"):
            self.Country = self.father.config.options.get("country")
        self.CountryPostcodeArea = None
        self.CountryPostcodeStreet = None
        if not self.Country or self.Country == 'GB':  # Specific plugin for GB
            return
        postcode = self.list_postcode()
        if self.Country in postcode:
            if 'area' in postcode[self.Country] and postcode[
                    self.Country]['area'] is not None:
                self.CountryPostcodeArea = re.compile(
                    postcode[self.Country]['area'])
            if 'street' in postcode[self.Country] and postcode[
                    self.Country]['street'] is not None:
                self.CountryPostcodeStreet = re.compile(
                    postcode[self.Country]['street'])
            elif 'area' in postcode[self.Country] and postcode[
                    self.Country]['area'] is not None:
                self.CountryPostcodeStreet = self.CountryPostcodeArea
    def init(self, logger):
        Plugin.init(self, logger)
        tags = capture_tags = {}
        self.errors[9007001] = {'item': 9007, 'level': 3, 'tag': ["tag", "relation"], 'desc': mapcss.tr(u'missing tag')}
        self.errors[9007002] = {'item': 9007, 'level': 2, 'tag': ["tag", "relation"], 'desc': mapcss.tr(u'relation without type')}

        self.re_67b11051 = re.compile(r'^restriction')
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[50604] = { "item": 5060, "level": 1, "tag": ["name", "fix:chair"], "desc": T_(u"Default and local language name not the same") }
        self.errors[50605] = { "item": 5060, "level": 1, "tag": ["name", "fix:chair"], "desc": T_(u"Local language name without default name") }
        self.errors[50606] = { "item": 5060, "level": 1, "tag": ["name", "fix:chair"], "desc": T_(u"Language name without default name") }

        self.LocalName = re.compile("^name:[a-z][a-z](_.*$|$)")
Exemple #21
0
 def init(self, logger):
     Plugin.init(self, logger)
     if self.father.config.options.get("project") != 'openstreetmap':
         return False
     self.errors[706] = { "item": 3020, "level": 1, "tag": ["source", "fix:chair"], "desc": T_(u"Illegal or incomplete source tag") }
     self.errors[707] = { "item": 2040, "level": 3, "tag": ["source", "fix:chair"], "desc": T_(u"Missing source tag") }
     self.Country = self.father.config.options.get("country")
    def init(self, logger):
        Plugin.init(self, logger)
        tags = capture_tags = {}
        self.errors[9010001] = {'item': 9010, 'level': 3, 'tag': ["tag"], 'desc': mapcss.tr(u'unnecessary tag')}
        self.errors[9010002] = {'item': 9010, 'level': 3, 'tag': ["tag"], 'desc': mapcss.tr(u'{0} makes no sense', u'{0.tag')}

        self.re_3ad9e1f5 = re.compile(r'^(motorway|motorway_link|trunk|trunk_link|primary|primary_link|secondary|secondary_link|tertiary|tertiary_link|unclassified|residential|service|living_street)$')
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[11701] = {
         "item": 1170,
         "level": 2,
         "tag": ["relation", "multipolygon", "fix:chair"],
         "desc": T_(u"Inadequate role for multipolygon"),
     }
     self.errors[11702] = {
         "item": 1170,
         "level": 2,
         "tag": ["relation", "multipolygon", "fix:chair"],
         "desc": T_(u"Inadequate member for multipolygon"),
     }
     self.errors[11703] = {
         "item": 1170,
         "level": 1,
         "tag": ["relation", "multipolygon", "fix:imagery"],
         "desc": T_(u"Missing outer role for multipolygon"),
     }
     self.errors[11704] = {
         "item": 1170,
         "level": 3,
         "tag": ["relation", "multipolygon", "fix:chair"],
         "desc": T_(u"This multipolygon is a simple polygon"),
     }
Exemple #24
0
    def init(self, logger):
        Plugin.init(self, logger)
        doc = dict(detail=T_(
            '''The key of tag contains characters not recommended. The key is
composed of alphanumeric characters: 0-9, a-z (preferably lower case),
separator '_' or ':'. See
[Any_tags_you_like#Syntactic_conventions_for_new_tags](https://wiki.openstreetmap.org/wiki/Any_tags_you_like#Syntactic_conventions_for_new_tags).'''
        ),
                   fix=T_('''Check the key tag, and correct.'''),
                   trap=T_('''There certainly false positives.'''))
        self.errors[3050] = self.def_class(item=3050,
                                           level=1,
                                           tags=['tag', 'fix:chair'],
                                           title=T_('Bad key'),
                                           **doc)
        self.errors[30502] = self.def_class(item=3050,
                                            level=3,
                                            tags=['tag', 'fix:chair'],
                                            title=T_('Bad key'),
                                            **doc)
        self.errors[30501] = self.def_class(item=3050,
                                            level=1,
                                            tags=['tag', 'fix:chair'],
                                            title=T_('Bad key suffix'),
                                            **doc)

        import re
        self.KeyPart1 = re.compile("^[a-zA-Z_0-9]+$")
        self.KeyPart1Less = re.compile("^[-.a-zA-Z_0-9]+$")
        self.KeyPart2 = re.compile("^[-_:a-zA-Z_0-9<>°]+$")
        self.exceptions = set((
            "ISO3166-1",
            "iso3166-1",
            "ISO3166-2",
            "iso3166-2",
            "USGS-LULC",
            "aims-id",
            "au.gov.abs",
            "catmp-RoadID",
            "dc-gis",
            "drive-through",
            "e-road",
            "nhd-shp",
            "voltage-high",
            "voltage-low",
            "cityracks.housenum",
            "cityracks.installed",
            "cityracks.large",
            "cityracks.rackid",
            "cityracks.small",
            "cityracks.street",  # NYC amenity=bicycle_parking
            "strassen-nrw",  # DE import
            "hazmat",
        ))

        self.exceptions_whole = set((
            "railway:memor2+",
            "railway:tbl1+",
        ))
Exemple #25
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[1100] = {
         "item": 1100,
         "level": 3,
         "tag": ["geom", "fix:imagery"],
         "desc": T_(u"Unclosed area")
     }
Exemple #26
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[303241] = {
         'item': 3032,
         'level': 1,
         'tag': ['tag', 'highway'],
         'desc': T_(u'Discordant maxspeed and source:maxspeed')
     }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[32502] = self.def_class(
         item=3250,
         level=3,
         tags=['value', 'fix:chair', 'public_transport'],
         title=T_('Invalid Conditional Intervals'))
     self._th = Main()
Exemple #28
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[804] = {
         "item": 2020,
         "level": 3,
         "tag": ["tag", "fix:survey"],
         "desc": T_(u"Missing altitude")
     }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[303241] = self.def_class(
         item=3032,
         level=1,
         tags=['tag', 'highway'],
         title=T_(
             'Discordant maxspeed and source:maxspeed or maxspeed:type'))
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[904] = { "item": 4040, "level": 1, "tag": ["name", "highway", "ref", "fix:chair"], "desc": T_(u"Highway reference in name tag") }

        #self.ReRefRoute = re.compile(u"^[NDCEAM] ?[0-9]+(| ?[a-z]| ?bis)$")
        self.ReRefRoute1 = re.compile(u"(?:^|.*[^RV] +)([RV]?([NDCEAM] ?[0-9]+[^ ]*)).*")
        self.ReRefRoute2 = re.compile(u".*[nN][o°] ?[0-9]+[^ ]*")
        self.MultipleSpace = re.compile(u" +")
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[3130] = self.def_class(item=3130,
                                           level=3,
                                           tags=['name', 'tag'],
                                           title=T_('Tag name is a brand'))

        self.Brand = self.BRAND.split("\n")
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[41001] = {
         "item": 4100,
         "level": 3,
         "tag": ["tag", "fix:chair"],
         "desc": T_(u"Misused tag in this country")
     }
Exemple #33
0
    def init(self, logger):
        Plugin.init(self, logger)
        tags = capture_tags = {}
        self.errors[9005001] = {'item': 9005, 'level': 3, 'tag': ["tag", "value"], 'desc': mapcss.tr(u'{0} with multiple values', capture_tags, u'{0.key}')}
        self.errors[9005002] = {'item': 9005, 'level': 3, 'tag': ["tag", "value"], 'desc': mapcss.tr(u'empty value in semicolon-separated \'\'{0}\'\'', capture_tags, u'{0.key}')}

        self.re_53db61ac = re.compile(ur'.+;(.+)?')
        self.re_579c7c6a = re.compile(ur'^(;.*|.*;;.*|.*;)$')
 def init(self, logger):
     Plugin.init(self, logger)
     self.parking_lane = "parking:lane:"
     self.parking_condition = "parking:condition:"
     self.errors[31611] = { "item": 3161, "level": 3, "tag": ["highway", "parking", "fix:imagery"], "desc": T_(u"Bad parking:lane:[side]") }
     self.errors[31614] = { "item": 3161, "level": 3, "tag": ["highway", "parking", "fix:imagery"], "desc": T_(u"Too many parking:lane:[side]") }
     self.errors[31615] = { "item": 3161, "level": 3, "tag": ["highway", "parking", "fix:chair"], "desc": T_(u"Bad parking:lane:[side] value") }
     self.errors[31616] = { "item": 3161, "level": 3, "tag": ["highway", "parking", "fix:survey"], "desc": T_(u"parking:condition:[side] without parking:lane:[side] value") }
Exemple #35
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[504] = {
         "item": 6020,
         "level": 3,
         "tag": ["boundary", "fix:chair"],
         "desc": T_(u"Duplicated way in relation")
     }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[20601] = self.def_class(
         item=2060,
         level=3,
         tags=['tag', 'addr'],
         title=T_(
             'Misusing addr:interpolation in combination with other tags'))
Exemple #37
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[3091] = { "item": 3091, "level": 2, "tag": ["value", "fix:chair"], "desc": T_(u"Numerical value") }
     self.tag_number = ["height", "maxheight", "maxheight:physical", "width", "maxwidth", "length", "maxlength", "maxweight", "maxspeed", "population", "admin_level", "ele"]
     self.Number = re.compile(u"^((?:[0-9]+(?:[.][0-9]+)?)|(?:[.][0-9]+))(?: ?(?:m|ft|cm|km|lbs|tons|t|T|mph|knots)|'(?:[0-9]*(?:[.][0-9]+)?\")?|\")?$")
     self.MaxspeedExtraValue = ["none", "signals", "national", "no", "unposted", "walk", "urban", "variable"]
     self.MaxspeedClassValue = re.compile(u'^[A-Z]*:.*$')
     self.MaxheightExtraValue = ["default", "below_default", "no_indications", "no_sign", "none", "unsigned"]
    def init(self, logger):
        Plugin.init(self, logger)
        tags = capture_tags = {}
        self.errors[9005001] = {'item': 9005, 'level': 3, 'tag': ["tag", "value"], 'desc': mapcss.tr(u'{0} with multiple values', mapcss._tag_uncapture(capture_tags, u'{0.key}'))}
        self.errors[9005002] = {'item': 9005, 'level': 3, 'tag': ["tag", "value"], 'desc': mapcss.tr(u'empty value in semicolon-separated \'\'{0}\'\'', mapcss._tag_uncapture(capture_tags, u'{0.key}'))}

        self.re_53db61ac = re.compile(r'.+;(.+)?')
        self.re_579c7c6a = re.compile(r'^(;.*|.*;;.*|.*;)$')
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[705] = { "item": 5030, "level": 1, "tag": ["name", "fix:survey"], "desc": T_(u"The name tag contains two names") }

        import re
        self.Re1 = re.compile(u"^.*;.*$")
        self.Re2 = re.compile(u"^.*/.*$")
        self.Re3 = re.compile(u"^.*\+.+$")
Exemple #40
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[903] = {
         "item": 5010,
         "level": 2,
         "tag": ["name", "fix:chair"],
         "desc": T_(u"Too many spaces")
     }
Exemple #41
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[41001] = self.def_class(item = 4100, level = 3, tags = ['tag', 'fix:chair'],
            title = T_('Misused tag in this country'),
            detail = T_(
'''`designation=*` is a United Kingdom-specific tag.'''),
            fix = T_(
'''Translate it to another tag or remove.'''))
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[701] = {
         "item": 5010,
         "level": 1,
         "tag": ["name", "fix:chair"],
         "desc": T_(u"Badly written word")
     }
Exemple #43
0
    def init(self, logger):
        Plugin.init(self, logger)
        tags = capture_tags = {}
        self.errors[30911] = {'item': 3091, 'level': 2, 'tag': mapcss.list_(u'tag'), 'desc': mapcss.tr(u'Colour code should start with \'#\' followed by 3 or 6 digits')}

        self.re_1b3f6ace = re.compile(r'^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$')
        self.re_30dca0d4 = re.compile(r'^#')
        self.re_7d65c79d = re.compile(r'^([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$')
Exemple #44
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[12401] = {
         "item": 1240,
         "level": 2,
         "tag": ["geom", "fix:chair"],
         "desc": T_(u"Way with one node")
     }
 def init(self, logger):
     if not module_PyKOpeningHours:
         return False
     Plugin.init(self, logger)
     self.errors[32501] = self.def_class(item=3250,
                                         level=3,
                                         tags=['value', 'fix:chair'],
                                         title=T_('Invalid Opening Hours'))
 def init(self, logger):
     Plugin.init(self, logger)
     self.parking_lane = "parking:lane:"
     self.parking_condition = "parking:condition:"
     self.errors[31611] = { "item": 3161, "level": 3, "tag": ["highway", "parking", "fix:imagery"], "desc": T_(u"Bad parking:lane:[side]") }
     self.errors[31614] = { "item": 3161, "level": 3, "tag": ["highway", "parking", "fix:imagery"], "desc": T_(u"Too many parking:lane:[side]") }
     self.errors[31615] = { "item": 3161, "level": 3, "tag": ["highway", "parking", "fix:chair"], "desc": T_(u"Bad parking:lane:[side] value") }
     self.errors[31616] = { "item": 3161, "level": 3, "tag": ["highway", "parking", "fix:survey"], "desc": T_(u"parking:condition:[side] without parking:lane:[side] value") }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[32601] = {
         "item": 3260,
         "level": 3,
         "tag": ["ref", "fix:chair"],
         "desc": T_(u'Invalid value format of tag "ref:vatin"')
     }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[103] = {
         "item": 1010,
         "level": 2,
         "tag": ["geom", "fix:chair"],
         "desc": T_(u"Duplicated nodes")
     }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[504] = {
         "item": 6020,
         "level": 3,
         "tag": ["boundary", "fix:chair"],
         "desc": T_(u"Duplicated way in relation"),
     }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[101] = {
         "item": 4020,
         "level": 3,
         "tag": ["highway", "roundabout", "fix:chair"],
         "desc": T_(u"Unneeded tag on junction=roundabout")
     }
Exemple #51
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[102] = self.def_class(item = 4020, level = 2, tags = ['highway', 'roundabout', 'fix:chair'],
            title = T_('Unneeded tag on junction=roundabout'),
            detail = T_(
'''The tags `oneway=*` and `ref=*` are not necessary on the roundabouts.
The tag `name=*` must be present if this is the name of the roundabout
and not a road connected, same thing for `ref=*`.'''))
Exemple #52
0
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[12200] = {
         "item": 1220,
         "level": 2,
         "tag": ["geom", "waterway", "fix:imagery"],
         "desc": T_(u"Closed waterway")
     }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[31801] = self.def_class(
         item=3180,
         level=2,
         tags=['relation', 'restriction'],
         title=T_('Useless turn restriction'))
     self.Country = self.father.config.options.get("country")
Exemple #54
0
    def init(self, logger):
        Plugin.init(self, logger)

        import re
        # From RFC 1738 paragraph 2.1
        self.HasScheme = re.compile(r"^[a-zA-Z0-9.+-]+://")

        self.errors[30931] = {"item": 3093, "level": 2, "tag": ["value", "fix:chair"], "desc": T_(u"The URL contains a space")}
        self.errors[30932] = {"item": 3093, "level": 2, "tag": ["value", "fix:chair"], "desc": T_(u"The URL does not have a valid scheme")}
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[31801] = {
         "item": 3180,
         "level": 2,
         "tag": ["relation", "restriction"],
         "desc": T_(u"Useless non u-turn restriction, it's forbidden by local law"),
     }
     self.Country = self.father.config.options.get("country")
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[900] = { "item": 4030, "level": 1, "tag": ["tag", "fix:chair"], "desc": T_(u"Tag conflict") }
     self.CONFLICT = {}
     self.CONFLICT[0] = set(['aerialway', 'aeroway', 'amenity', 'highway', 'railway', 'waterway', 'landuse'])
     self.CONFLICT[1] = set(['aerialway', 'aeroway', 'amenity', 'highway', 'leisure', 'railway', 'natural'])
     self.CONFLICT[2] = set(['aerialway', 'aeroway', 'amenity', 'highway', 'leisure', 'railway', 'waterway', 'place'])
     self.CONFLICT[3] = set(['building', 'place'])
     self.CONFLICT[4] = set(['information', 'place'])
Exemple #57
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[4070] = { "item": 4070, "level": 2, "tag": ["tag", "fix:survey"], "desc": T_(u"Finished construction") }

        self.tag_construction = ["highway", "landuse", "building"]
        self.tag_date = ["opening_date", "check_date", "open_date", "construction:date", "temporary:date_on", "date_on"]
        self.default_date = datetime.datetime(9999, 12, 1)
        self.today = datetime.datetime.today()
        self.date_limit = datetime.datetime.today() - datetime.timedelta(days=2 * 365)
Exemple #58
0
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[705] = { "item": 5030, "level": 1, "tag": ["name", "fix:survey"], "desc": T_(u"The name tag contains two names") }

        self.NoExtra = self.father.config.options.get("country") in ('DE',)

        # In Thailand street added into existing street are named like "บ้านแพะแม่คือ ซอย 5/1", or in USA "County Road 39 4/10"
        self.streetSubNumber = self.father.config.options.get("country") in ('TH', 'VN', 'US')
        self.streetSubNumberRe = re.compile(u".*[0-9๐๑๒๓๔๕๖๗๘๙]/[0-9๐๑๒๓๔๕๖๗๘๙].*")
    def init(self, logger):
        Plugin.init(self, logger)
        self.errors[3040] = { "item": 3040, "level": 1, "tag": ["value", "fix:chair"], "desc": T_(u"Bad value in a tag") }

        import re
        self.Values_open = re.compile("^[a-z0-9_]+( *; *[a-z0-9_]+)*$")
        self.check_list_open = set( (
            'abutters', 'access', 'admin_level', 'aerialway', 'aeroway', 'amenity',
            'barrier', 'bicycle', 'boat', 'border_type', 'boundary', 'bridge', 'building', 'construction',
            'covered', 'craft', 'crossing', 'cutting',
            'disused', 'drive_in', 'drive_through',
            'electrified', 'embankment', 'emergency',
            'fenced', 'foot', 'ford',
            'geological', 'goods',
            'hgv', 'highway', 'historic',
            'internet_access',
            'landuse', 'lanes', 'leisure',
            'man_made', 'military', 'mooring', 'motorboat', 'mountain_pass', 'natural', 'noexit',
            'office',
            'power', 'public_transport',
            'railway', 'route',
            'sac_scale', 'service', 'shop', 'smoothness', 'sport', 'surface',
            'tactile_paving', 'toll', 'tourism', 'tracktype', 'traffic_calming', 'trail_visibility',
            'tunnel',
            'usage',
            'vehicle',
            'wall', 'waterway', 'wheelchair', 'wood'
            ) )
        self.check_list_open_node = self.check_list_open
        self.check_list_open_way = self.check_list_open
        self.check_list_open_relation = self.check_list_open.copy()
        self.check_list_open_relation.add('type')
        self.exceptions_open = { "type": ( "associatedStreet",
                                           "turnlanes:lengths",
                                           "turnlanes:turns",
                                           "restriction:hgv", "restriction:caravan", "restriction:motorcar", "restriction:bus", "restriction:agricultural", "restriction:bicycle", "restriction:hazmat",
                                           "TMC" ),
                                 "service": ( "drive-through", ),
                                 "aerialway": ( "j-bar", "t-bar", ),
                                 "surface": ( "concrete:plates", "concrete:lanes",
                                            "paving_stones:20", "paving_stones:30", "paving_stones:50",
                                            "cobblestone:10", "cobblestone:20", "cobblestone:flattened"),
                                 "shop": ( "e-cigarette" ),
                                 "barrier": ( "full-height_turnstile" ),
                                 "man_made": ( "MDF" ),
                                }
        self.check_list_closed = set( (
            'area',
            'narrow',
            'oneway',
            ) )
        self.allow_closed = { "area": ( "yes", "no", ),
                            "narrow": ( "yes", "no", ),
                            "oneway": ( "yes", "no", "1", "-1", "reversible", "alternating"),
                          }
 def init(self, logger):
     Plugin.init(self, logger)
     self.errors[31601] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Bad lanes value") }
     self.errors[31603] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Conflict between usage of *:lanes or *:lanes:(forward|backward|both_ways)") }
     self.errors[31604] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Conflict between lanes number") }
     self.errors[31605] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Invalid usage of *:lanes:(backward|both_ways) on oneway highway") }
     self.errors[31606] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Unknown turn lanes value") }
     self.errors[31607] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Bad turn lanes order") }
     self.errors[31608] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Conflict between lanes number of same sufix ('', forward, backward or both_ways)") }
     self.errors[31609] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Bad access lanes value, should not be an integer but a restriction") }
     self.errors[31600] = { "item": 3160, "level": 2, "tag": ["highway", "fix:chair"], "desc": T_(u"Turn lanes merge_to_* need an aside lane on good side") }