from enum import Enum


class Method(str, Enum):
    """The Request Method (VERB)

    This type also contains constants for a number of common HTTP methods such as GET, POST, etc.

    Currently includes 8 variants representing the 8 methods defined in [RFC 7230](https://tools.ietf.org/html/rfc7231#section-4.1), plus PATCH, and an Extension variant for all extensions."""  # noqa: E501

    """# The `OPTIONS` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.2.1)."""  # noqa: E501

    OPTIONS = "OPTIONS"

    """# The `GET` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1)."""  # noqa: E501

    GET = "GET"

    """# The `POST` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1)."""  # noqa: E501

    POST = "POST"

    """# The `PUT` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1)."""  # noqa: E501

    PUT = "PUT"

    """# The `DELETE` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.5)."""  # noqa: E501

    DELETE = "DELETE"

    """# The `HEAD` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.2)."""  # noqa: E501

    HEAD = "HEAD"

    """# The `TRACE` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3)."""  # noqa: E501

    TRACE = "TRACE"

    """# The `CONNECT` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.6)."""  # noqa: E501

    CONNECT = "CONNECT"

    """# The `PATCH` method as defined in [RFC 5789](https://tools.ietf.org/html/rfc5789)."""  # noqa: E501

    PATCH = "PATCH"

    """# A catch all."""  # noqa: E501

    EXTENSION = "EXTENSION"

    def __str__(self) -> str:
        return str(self.value)
