'''
The flanker.addresslib package exposes a simple address parsing library that
can handle email addresses and urls.
 
See the address.py module for the public interfaces to the library and the
parser.py module for the implementation of the recursive descent parser
used to parse email addresses and urls.
 
To override the default DNS lookup library or MX Cache, use the
set_dns_lookup and set_mx_cache methods. For more details, see the User Manual.
'''
import re
 
from flanker.addresslib.drivers.redis_driver import RedisCache
from flanker.addresslib.drivers.dns_lookup import DNSLookup
 
from flanker.addresslib.plugins import yahoo
from flanker.addresslib.plugins import aol
from flanker.addresslib.plugins import gmail
from flanker.addresslib.plugins import icloud
from flanker.addresslib.plugins import hotmail
from flanker.addresslib.plugins import google
 
 
mx_cache = RedisCache()
dns_lookup = DNSLookup()
 
YAHOO_PATTERN = re.compile(r'''mta[0-9]+\.am[0-9]+\.yahoodns\.net$''')
GMAIL_PATTERN = re.compile(r'''.*gmail-smtp-in\.l\.google.com$''')
AOL_PATTERN = re.compile(r'''.*\.mx\.aol\.com$''')
ICLOUD_PATTERN = re.compile(r'''.*\.icloud\.com\.akadns\.net$''')
HOTMAIL_PATTERN = re.compile(r'''mx[0-9]\.hotmail\.com''')
GOOGLE_PATTERN = re.compile(r'''(.*aspmx\.l\.google\.com$)|(aspmx.*\.googlemail.com$)''', re.IGNORECASE)
 
CUSTOM_GRAMMAR_LIST = [
    (YAHOO_PATTERN, yahoo),
    (GMAIL_PATTERN, gmail),
    (AOL_PATTERN, aol),
    (ICLOUD_PATTERN, icloud),
    (HOTMAIL_PATTERN, hotmail),
    (GOOGLE_PATTERN, google),
]
 
def set_dns_lookup(dlookup):
    global dns_lookup
    dns_lookup = dlookup
 
def set_mx_cache(mcache):
    global mx_cache
    mx_cache = mcache