# Path: tabun_api/compat.py
# PY2 = sys.version_info.major == 2


import re
import sys
import time
import random
import logging
import platform
import mimetypes
import lxml
import lxml.html
import lxml.etree
import iso8601
    import warnings
        import Image
        import imp
        import importlib
        import importlib.util
    import socks
from hashlib import md5
from .compat import text, text_types, binary, urequest, PY2, BaseCookie
        from PIL import Image
    from io import BytesIO
        from urlparse import urlparse
        from urllib.parse import urlparse


def download(url, maxmem=20 * 1024 * 1024, timeout=5, waitout=15, headers=None):
    """Скачивает данные по ссылке. Имеет защиту от переполнения памяти
    и слишком долгого ожидания, чтобы всякие боты тут не висли.
    В случае чего кидает ``IOError``.

    :param url: ссылка, которую скачать
    :type url: строка
    :param int maxmem: допустимый максимальный размер скачиваемых данных
    :param float timeout: как долго можно ждать ответа
    :param float waitout: как долго можно скачивать данные
      (простенькая защита от Slow TCP DoS Attack — timeout тут не поможет)
    :rtype: bytes
    """

    # TODO: non-ASCII URL

    url = text(url)
    if url.startswith('//'):
        url = 'http:' + url

    req = urequest.Request(url.encode("utf-8") if PY2 else url)

    request_headers = {}
    if headers:
        request_headers.update({k.title(): v for k, v in headers.items()})
    for header, value in request_headers.items():
        if not isinstance(header, str):  # py2 and py3
            header = str(header)

# Path: tabun_api/compat.py
# PY2 = sys.version_info.major == 2


# Path: tabun_api/utils.py
import re
import sys
import time
import random
import logging
import platform
import mimetypes
import lxml
import lxml.html
import lxml.etree
import iso8601
    import warnings
        import Image
        import imp
        import importlib
        import importlib.util
    import socks
from hashlib import md5
from .compat import text, text_types, binary, urequest, PY2, BaseCookie
        from PIL import Image
    from io import BytesIO
        from urlparse import urlparse
        from urllib.parse import urlparse



def download(url, maxmem=20 * 1024 * 1024, timeout=5, waitout=15, headers=None):
    """Скачивает данные по ссылке. Имеет защиту от переполнения памяти
    и слишком долгого ожидания, чтобы всякие боты тут не висли.
    В случае чего кидает ``IOError``.

    :param url: ссылка, которую скачать
    :type url: строка
    :param int maxmem: допустимый максимальный размер скачиваемых данных
    :param float timeout: как долго можно ждать ответа
    :param float waitout: как долго можно скачивать данные
      (простенькая защита от Slow TCP DoS Attack — timeout тут не поможет)
    :rtype: bytes
    """

    # TODO: non-ASCII URL

    url = text(url)
    if url.startswith('//'):
        url = 'http:' + url

    req = urequest.Request(url.encode("utf-8") if PY2 else url)

    request_headers = {}
    if headers:
        request_headers.update({k.title(): v for k, v in headers.items()})
    for header, value in request_headers.items():
        if not isinstance(header, str):  # py2 and py3
            header = str(header)

        if isinstance(value, text):