libpostal-sys 0.1.1

Low-level wrappers for libpostal address normalization (with locks to support thread-safe initialization)
Documentation
import re
from geodata.i18n.google import google_i18n
from geodata.postal_codes.config import postal_codes_config


class PostcodeRegexes(object):
    def __init__(self):
        self.responses = {}
        self.postcode_regexes = {}

    def get(self, country_code):
        ret = self.postcode_regexes.get(country_code.lower())
        if ret is None:

            override_regex = postal_codes_config.get_property('override_regex', country=country_code)
            if override_regex:
                ret = re.compile(override_regex, re.I)
                self.postcode_regexes[country_code.lower()] = ret
                return ret

            response = google_i18n.get(country_code)
            if response:
                postcode_expression = response.get('zip')
                if not postcode_expression:
                    self.postcode_regexes[country_code.lower()] = None
                    return None
                ret = re.compile(postcode_expression, re.I)
                self.postcode_regexes[country_code.lower()] = ret

        return ret


postcode_regexes = PostcodeRegexes()