o
    hi                     @   s   d dl Z d dlZg dZG dd deZG dd deZG dd deZz
eed	j	Z
W n ey;   d
d Z
Y nw dddZG dd deZdd Zdd ZdS )    N)ProtocolErrorLocalProtocolErrorRemoteProtocolErrorvalidatemake_sentinelbytesifyc                   @   s   e Zd ZdZdddZdS )r   aM  Exception indicating a violation of the HTTP/1.1 protocol.

    This as an abstract base class, with two concrete base classes:
    :exc:`LocalProtocolError`, which indicates that you tried to do something
    that HTTP/1.1 says is illegal, and :exc:`RemoteProtocolError`, which
    indicates that the remote peer tried to do something that HTTP/1.1 says is
    illegal. See :ref:`error-handling` for details.

    In addition to the normal :exc:`Exception` features, it has one attribute:

    .. attribute:: error_status_hint

       This gives a suggestion as to what status code a server might use if
       this error occurred as part of a request.

       For a :exc:`RemoteProtocolError`, this is useful as a suggestion for
       how you might want to respond to a misbehaving peer, if you're
       implementing a server.

       For a :exc:`LocalProtocolError`, this can be taken as a suggestion for
       how your peer might have responded to *you* if h11 had allowed you to
       continue.

       The default is 400 Bad Request, a generic catch-all for protocol
       violations.

      c                 C   s*   t | tu r
tdt| | || _d S )Nz+tried to directly instantiate ProtocolError)typer   	TypeError	Exception__init__error_status_hint)selfmsgr    r   Q/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/h11/_util.pyr   #   s   
zProtocolError.__init__N)r   )__name__
__module____qualname____doc__r   r   r   r   r   r      s    r   c                   @      e Zd Zdd ZdS )r   c                 C   s$   t | _tjd dkr| td d S )Nr      z2raise RemoteProtocolError, self, sys.exc_info()[2])r   	__class__sysversion_infoexecr   r   r   r   !_reraise_as_remote_protocol_error6   s   z4LocalProtocolError._reraise_as_remote_protocol_errorN)r   r   r   r   r   r   r   r   r   5       r   c                   @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r   O   s    r    c                 C   s&   |  |}|r| t|krd }|S N)matchendlen)regexdatar!   r   r   r   
_fullmatchU   s   
r&   malformed datac                 G   s,   t | |}|s|r|j| }t|| S r    )r&   formatr   	groupdict)r$   r%   r   Zformat_argsr!   r   r   r   r   [   s   

r   c                   @   r   )_SentinelBasec                 C   s   | j S r    )r   r   r   r   r   __repr__l   s   z_SentinelBase.__repr__N)r   r   r   r+   r   r   r   r   r*   k   r   r*   c                 C   s   t | t fi }||_|S r    )r*   r   )nameclsr   r   r   r   o   s   r   c                 C   s>   t | tu r| S t| tr| d} t| trtdt| S )Nasciiz#expected bytes-like object, not int)r	   bytes
isinstancestrencodeintr
   )sr   r   r   r   w   s   


r   )r'   )r   re__all__r   r   r   r   r	   compile	fullmatchr&   AttributeErrorr   r*   r   r   r   r   r   r   <module>   s    .
