eggfetch-python 0.1.4

Python sync and asyncio bindings for the eggfetch HTTP engine (Rust core via PyO3; Python users install from PyPI)
"""HTTPX2 2.12.0-compatible status codes for eggfetch.

Matches httpx2's RFC 9110 canonical names with deprecated aliases that warn
via ``HTTPXDeprecationWarning`` (visible by default).
"""

from __future__ import annotations

import warnings
from enum import EnumMeta, IntEnum

from eggfetch.compat.httpx2._exceptions import HTTPXDeprecationWarning

_DEPRECATED_CODES = {
    "REQUEST_ENTITY_TOO_LARGE": "CONTENT_TOO_LARGE",
    "REQUEST_URI_TOO_LONG": "URI_TOO_LONG",
    "REQUESTED_RANGE_NOT_SATISFIABLE": "RANGE_NOT_SATISFIABLE",
    "UNPROCESSABLE_ENTITY": "UNPROCESSABLE_CONTENT",
}


class _CodesMeta(EnumMeta):
    def __getattribute__(cls, name: str) -> object:
        if name in _DEPRECATED_CODES:
            new_name = _DEPRECATED_CODES[name]
            warnings.warn(
                f"'{name}' is deprecated. Use '{new_name}' instead.",
                category=HTTPXDeprecationWarning,
                stacklevel=2,
            )
        return super().__getattribute__(name)


class codes(IntEnum, metaclass=_CodesMeta):
    """HTTP status codes and reason phrases (RFC 9110 canonical names)."""

    CONTINUE = 100
    SWITCHING_PROTOCOLS = 101
    PROCESSING = 102
    EARLY_HINTS = 103
    OK = 200
    CREATED = 201
    ACCEPTED = 202
    NON_AUTHORITATIVE_INFORMATION = 203
    NO_CONTENT = 204
    RESET_CONTENT = 205
    PARTIAL_CONTENT = 206
    MULTI_STATUS = 207
    ALREADY_REPORTED = 208
    IM_USED = 226
    MULTIPLE_CHOICES = 300
    MOVED_PERMANENTLY = 301
    FOUND = 302
    SEE_OTHER = 303
    NOT_MODIFIED = 304
    USE_PROXY = 305
    RESERVED = 306
    TEMPORARY_REDIRECT = 307
    PERMANENT_REDIRECT = 308
    BAD_REQUEST = 400
    UNAUTHORIZED = 401
    PAYMENT_REQUIRED = 402
    FORBIDDEN = 403
    NOT_FOUND = 404
    METHOD_NOT_ALLOWED = 405
    NOT_ACCEPTABLE = 406
    PROXY_AUTHENTICATION_REQUIRED = 407
    REQUEST_TIMEOUT = 408
    CONFLICT = 409
    GONE = 410
    LENGTH_REQUIRED = 411
    PRECONDITION_FAILED = 412
    CONTENT_TOO_LARGE = 413
    URI_TOO_LONG = 414
    UNSUPPORTED_MEDIA_TYPE = 415
    RANGE_NOT_SATISFIABLE = 416
    EXPECTATION_FAILED = 417
    IM_A_TEAPOT = 418
    MISDIRECTED_REQUEST = 421
    UNPROCESSABLE_CONTENT = 422
    LOCKED = 423
    FAILED_DEPENDENCY = 424
    TOO_EARLY = 425
    UPGRADE_REQUIRED = 426
    PRECONDITION_REQUIRED = 428
    TOO_MANY_REQUESTS = 429
    REQUEST_HEADER_FIELDS_TOO_LARGE = 431
    UNAVAILABLE_FOR_LEGAL_REASONS = 451
    INTERNAL_SERVER_ERROR = 500
    NOT_IMPLEMENTED = 501
    BAD_GATEWAY = 502
    SERVICE_UNAVAILABLE = 503
    GATEWAY_TIMEOUT = 504
    HTTP_VERSION_NOT_SUPPORTED = 505
    VARIANT_ALSO_NEGOTIATES = 506
    INSUFFICIENT_STORAGE = 507
    LOOP_DETECTED = 508
    NOT_EXTENDED = 510
    NETWORK_AUTHENTICATION_REQUIRED = 511

    # Deprecated aliases for names replaced by RFC 9110.
    REQUEST_ENTITY_TOO_LARGE = CONTENT_TOO_LARGE
    REQUEST_URI_TOO_LONG = URI_TOO_LONG
    REQUESTED_RANGE_NOT_SATISFIABLE = RANGE_NOT_SATISFIABLE
    UNPROCESSABLE_ENTITY = UNPROCESSABLE_CONTENT


__all__ = ["codes"]