[osm] Validate postcode with a regex for the given country code before sending on to parser_osm_number_range (some postcodes can also look like ranges e.g. 83-101 so validate for the given country)

This commit is contained in:
Al
2016-07-26 17:45:23 -04:00
parent 1ef57ee7d2
commit 72c3723b43

View File

@@ -25,6 +25,7 @@ from geodata.configs.utils import nested_get
from geodata.countries.country_names import *
from geodata.language_id.disambiguation import *
from geodata.language_id.sample import INTERNET_LANGUAGE_DISTRIBUTION
from geodata.i18n.google import postcode_regexes
from geodata.i18n.languages import *
from geodata.intersections.query import Intersection, IntersectionQuery
from geodata.address_formatting.formatter import AddressFormatter
@@ -411,7 +412,16 @@ class OSMAddressFormatter(object):
postal_code = revised_tags.get(AddressFormatter.POSTCODE, None)
postal_codes = []
if postal_code:
postal_codes = parse_osm_number_range(postal_code, parse_letter_range=False)
valid_postcode = False
postcode_regex = postcode_regexes.get(country)
if postcode_regex:
match = postcode_regex.match(postal_code)
if match and match.end() == len(postal_code):
valid_postcode = True
postal_codes.append(postal_code)
if not valid_postcode:
postal_codes = parse_osm_number_range(postal_code, parse_letter_range=False)
try:
population = int(tags.get('population', 0))