43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
"""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
|
|
|
|
|