"""
The :mod:`websockets.compatibility` module provides helpers for bridging
compatibility issues across Python versions.

"""

import asyncio
import http


# Replace with BaseEventLoop.create_task when dropping Python < 3.4.2.
try:  # pragma: no cover
    asyncio_ensure_future = asyncio.ensure_future  # Python ≥ 3.5
except AttributeError:  # pragma: no cover
    asyncio_ensure_future = getattr(asyncio, 'async')  # Python < 3.5

try:  # pragma: no cover
    # Python ≥ 3.5
    SWITCHING_PROTOCOLS = http.HTTPStatus.SWITCHING_PROTOCOLS
    OK = http.HTTPStatus.OK
    BAD_REQUEST = http.HTTPStatus.BAD_REQUEST
    UNAUTHORIZED = http.HTTPStatus.UNAUTHORIZED
    FORBIDDEN = http.HTTPStatus.FORBIDDEN
    UPGRADE_REQUIRED = http.HTTPStatus.UPGRADE_REQUIRED
    INTERNAL_SERVER_ERROR = http.HTTPStatus.INTERNAL_SERVER_ERROR
    SERVICE_UNAVAILABLE = http.HTTPStatus.SERVICE_UNAVAILABLE
except AttributeError:  # pragma: no cover
    # Python < 3.5
    class SWITCHING_PROTOCOLS:
        value = 101
        phrase = "Switching Protocols"

    class OK:
        value = 200
        phrase = "OK"

    class BAD_REQUEST:
        value = 400
        phrase = "Bad Request"

    class UNAUTHORIZED:
        value = 401
        phrase = "Unauthorized"

    class FORBIDDEN:
        value = 403
        phrase = "Forbidden"

    class UPGRADE_REQUIRED:
        value = 426
        phrase = "Upgrade Required"

    class INTERNAL_SERVER_ERROR:
        value = 500
        phrase = "Internal Server Error"

    class SERVICE_UNAVAILABLE:
        value = 503
        phrase = "Service Unavailable"
