"""Hacks for Python 2.6"""

__all__ = ["hack_all", "hack_email", "hack_select"]

def hack_all(email=True, select=True): 
    if email:
        hack_email()
    if select:
        hack_select()

def hack_email():
    """The python2.6 version of email.message_from_string, doesn't work with 
    unicode strings. And in python3 it will only work with a decoded. 
    
    So switch to using only message_from_bytes.
    """
    import email
    if not hasattr(email, "message_from_bytes"):
        email.message_from_bytes = email.message_from_string

    
def hack_select():
    """The python2.6 version of SocketServer does not handle interrupt calls 
    from signals. Patch the select call if necessary. 
    """
    import sys
    if sys.version_info[0] == 2 and sys.version_info[1] == 6:
        import select
        import errno

        real_select = select.select
        def _eintr_retry(*args):
            """restart a system call interrupted by EINTR"""
            while True:
                try:
                    return real_select(*args)
                except (OSError, select.error) as e:
                    if e.args[0] != errno.EINTR:
                        raise
        select.select = _eintr_retry


