X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/8adab2c6ca7c2f722a3a59fd49989a32fb164ea8..b0067a0345c2ab7793614925d6150141ef5f18f0:/nominatim/data/postcode_format.py diff --git a/nominatim/data/postcode_format.py b/nominatim/data/postcode_format.py index 99065965..132dd41f 100644 --- a/nominatim/data/postcode_format.py +++ b/nominatim/data/postcode_format.py @@ -25,7 +25,7 @@ class CountryPostcodeMatcher: pc_pattern = config['pattern'].replace('d', '[0-9]').replace('l', '[A-Z]') - self.norm_pattern = re.compile(f'\\s*(?:{country_code.upper()}[ -]?)?(.*)\\s*') + self.norm_pattern = re.compile(f'\\s*(?:{country_code.upper()}[ -]?)?({pc_pattern})\\s*') self.pattern = re.compile(pc_pattern) self.output = config.get('output', r'\g<0>') @@ -79,7 +79,7 @@ class PostcodeFormatter: self.default_matcher = CountryPostcodeMatcher('', {'pattern': pattern}) - def get_matcher(self, country_code: str) -> Optional[CountryPostcodeMatcher]: + def get_matcher(self, country_code: Optional[str]) -> Optional[CountryPostcodeMatcher]: """ Return the CountryPostcodeMatcher for the given country. Returns None if the country doesn't have a postcode and the default matcher if there is no specific matcher configured for @@ -88,10 +88,12 @@ class PostcodeFormatter: if country_code in self.country_without_postcode: return None + assert country_code is not None + return self.country_matcher.get(country_code, self.default_matcher) - def match(self, country_code: str, postcode: str) -> Optional[Match[str]]: + def match(self, country_code: Optional[str], postcode: str) -> Optional[Match[str]]: """ Match the given postcode against the postcode pattern for this matcher. Returns a `re.Match` object if the country has a pattern and the match was successful or None if the match failed. @@ -99,6 +101,8 @@ class PostcodeFormatter: if country_code in self.country_without_postcode: return None + assert country_code is not None + return self.country_matcher.get(country_code, self.default_matcher).match(postcode)