X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/e86db3001f90012029a59ec6b313a4f7257035d4..0722495434e039b7b716206974d0076db8813ca6:/nominatim/tokenizer/sanitizers/clean_postcodes.py?ds=inline diff --git a/nominatim/tokenizer/sanitizers/clean_postcodes.py b/nominatim/tokenizer/sanitizers/clean_postcodes.py index 43d29769..5eaea391 100644 --- a/nominatim/tokenizer/sanitizers/clean_postcodes.py +++ b/nominatim/tokenizer/sanitizers/clean_postcodes.py @@ -15,12 +15,20 @@ Arguments: postcode centroids of a country but is still searchable. When set to 'no', non-conforming postcodes are not searchable either. + default-pattern: Pattern to use, when there is none available for the + country in question. Warning: will not be used for + 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() @@ -29,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 @@ -48,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)