X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/3bf3b894eaddd4f17f7e92353af6b2aa6200ab20..848e5ac5de510c1a1ae1a01107453e61a0895b97:/nominatim/tokenizer/sanitizers/clean_postcodes.py diff --git a/nominatim/tokenizer/sanitizers/clean_postcodes.py b/nominatim/tokenizer/sanitizers/clean_postcodes.py index 05e90ca1..5eaea391 100644 --- a/nominatim/tokenizer/sanitizers/clean_postcodes.py +++ b/nominatim/tokenizer/sanitizers/clean_postcodes.py @@ -20,11 +20,15 @@ Arguments: objects that have no country assigned. These are always assumed to have no postcode. """ +from typing import Callable, Optional, Tuple + from nominatim.data.postcode_format import PostcodeFormatter +from nominatim.tokenizer.sanitizers.base import ProcessInfo +from nominatim.tokenizer.sanitizers.config import SanitizerConfig class _PostcodeSanitizer: - def __init__(self, config): + def __init__(self, config: SanitizerConfig) -> None: self.convert_to_address = config.get_bool('convert-to-address', True) self.matcher = PostcodeFormatter() @@ -33,7 +37,7 @@ class _PostcodeSanitizer: self.matcher.set_default_pattern(default_pattern) - def __call__(self, obj): + def __call__(self, obj: ProcessInfo) -> None: if not obj.address: return @@ -52,23 +56,25 @@ class _PostcodeSanitizer: postcode.set_attr('variant', formatted[1]) - def scan(self, postcode, country): + def scan(self, postcode: str, country: Optional[str]) -> Optional[Tuple[str, str]]: """ Check the postcode for correct formatting and return the normalized version. Returns None if the postcode does not - correspond to the oficial format of the given country. + correspond to the official format of the given country. """ match = self.matcher.match(country, postcode) if match is None: return None + assert country is not None + return self.matcher.normalize(country, match),\ ' '.join(filter(lambda p: p is not None, match.groups())) -def create(config): - """ Create a housenumber processing function. +def create(config: SanitizerConfig) -> Callable[[ProcessInfo], None]: + """ Create a function that filters postcodes by their officially allowed pattern. """ return _PostcodeSanitizer(config)