o
    g-                     @  s  d Z ddlmZ ddlZddlmZ g dZG dd deZG d	d
 d
eZ	G dd de	Z
G dd de	ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eZG d'd( d(eZG d)d* d*eZG d+d, d,eZG d-d. d.eZG d/d0 d0eeZG d1d2 d2eeZdd3l m!Z!m"Z" ee# d4d4d4d4d5d6 dS )7a  
:mod:`websockets.exceptions` defines the following hierarchy of exceptions.

* :exc:`WebSocketException`
    * :exc:`ConnectionClosed`
        * :exc:`ConnectionClosedOK`
        * :exc:`ConnectionClosedError`
    * :exc:`InvalidURI`
    * :exc:`InvalidHandshake`
        * :exc:`SecurityError`
        * :exc:`InvalidMessage`
        * :exc:`InvalidStatus`
        * :exc:`InvalidStatusCode` (legacy)
        * :exc:`InvalidHeader`
            * :exc:`InvalidHeaderFormat`
            * :exc:`InvalidHeaderValue`
            * :exc:`InvalidOrigin`
            * :exc:`InvalidUpgrade`
        * :exc:`NegotiationError`
            * :exc:`DuplicateParameter`
            * :exc:`InvalidParameterName`
            * :exc:`InvalidParameterValue`
        * :exc:`AbortHandshake` (legacy)
        * :exc:`RedirectHandshake` (legacy)
    * :exc:`ProtocolError` (Sans-I/O)
    * :exc:`PayloadTooBig` (Sans-I/O)
    * :exc:`InvalidState` (Sans-I/O)
    * :exc:`ConcurrencyError`

    )annotationsN   )lazy_import)WebSocketExceptionConnectionClosedConnectionClosedOKConnectionClosedError
InvalidURIInvalidHandshakeSecurityErrorInvalidStatusInvalidHeaderInvalidHeaderFormatInvalidHeaderValueInvalidMessageInvalidOriginInvalidUpgradeNegotiationErrorDuplicateParameterInvalidParameterNameInvalidParameterValueProtocolErrorPayloadTooBigInvalidStateConcurrencyErrorc                   @     e Zd ZdZdS )r   z?
    Base class for all exceptions defined by websockets.

    N__name__
__module____qualname____doc__ r!   r!   L/var/www/visachat/venv/lib/python3.10/site-packages/websockets/exceptions.pyr   A       r   c                   @  sD   e Zd ZdZ	ddd
dZdddZedddZedddZdS )r   a  
    Raised when trying to interact with a closed connection.

    Attributes:
        rcvd: If a close frame was received, its code and reason are available
            in ``rcvd.code`` and ``rcvd.reason``.
        sent: If a close frame was sent, its code and reason are available
            in ``sent.code`` and ``sent.reason``.
        rcvd_then_sent: If close frames were received and sent, this attribute
            tells in which order this happened, from the perspective of this
            side of the connection.

    Nrcvdframes.Close | Nonesentrcvd_then_sentbool | NonereturnNonec                 C  s8   || _ || _|| _| jd u | j d u p| jd u ksJ d S Nr$   r&   r'   )selfr$   r&   r'   r!   r!   r"   __init__W   s   &zConnectionClosed.__init__strc                 C  sl   | j d u r| jd u rdS d| j dS | jd u rd| j  dS | jr,d| j  d| j S d| j d| j  S )Nzno close frame received or sentzsent z; no close frame receivedz	received z; no close frame sentz; then sent z; then received r,   r-   r!   r!   r"   __str__b   s   


zConnectionClosed.__str__intc                 C  s&   t dt | jd u rtjjS | jjS )NzZConnectionClosed.code is deprecated; use Protocol.close_code or ConnectionClosed.rcvd.code)warningswarnDeprecationWarningr$   frames	CloseCodeABNORMAL_CLOSUREcoder0   r!   r!   r"   r9   s   s   
zConnectionClosed.codec                 C  s"   t dt | jd u rdS | jjS )Nz`ConnectionClosed.reason is deprecated; use Protocol.close_reason or ConnectionClosed.rcvd.reason )r3   r4   r5   r$   reasonr0   r!   r!   r"   r;   ~   s   
zConnectionClosed.reasonr+   )r$   r%   r&   r%   r'   r(   r)   r*   r)   r/   )r)   r2   )	r   r   r   r    r.   r1   propertyr9   r;   r!   r!   r!   r"   r   H   s    

r   c                   @  r   )r   z
    Like :exc:`ConnectionClosed`, when the connection terminated properly.

    A close code with code 1000 (OK) or 1001 (going away) or without a code was
    received and sent.

    Nr   r!   r!   r!   r"   r      r#   r   c                   @  r   )r   z
    Like :exc:`ConnectionClosed`, when the connection terminated with an error.

    A close frame with a code other than 1000 (OK) or 1001 (going away) was
    received or sent, or the closing handshake didn't complete properly.

    Nr   r!   r!   r!   r"   r      r#   r   c                   @  s$   e Zd ZdZdddZdd	d
ZdS )r	   zL
    Raised when connecting to a URI that isn't a valid WebSocket URI.

    urir/   msgr)   r*   c                 C     || _ || _d S r+   r>   r?   )r-   r>   r?   r!   r!   r"   r.         
zInvalidURI.__init__c                 C  s   | j  d| j S )Nz isn't a valid URI: rA   r0   r!   r!   r"   r1         zInvalidURI.__str__N)r>   r/   r?   r/   r)   r*   r<   r   r   r   r    r.   r1   r!   r!   r!   r"   r	          
r	   c                   @  r   )r
   zM
    Base class for exceptions raised when the opening handshake fails.

    Nr   r!   r!   r!   r"   r
      r#   r
   c                   @  r   )r   z
    Raised when a handshake request or response breaks a security rule.

    Security limits can be configured with :doc:`environment variables
    <../reference/variables>`.

    Nr   r!   r!   r!   r"   r      r#   r   c                   @  r   )r   zD
    Raised when a handshake request or response is malformed.

    Nr   r!   r!   r!   r"   r      r#   r   c                   @  s$   e Zd ZdZdddZdd	d
ZdS )r   zJ
    Raised when a handshake response rejects the WebSocket upgrade.

    responsehttp11.Responser)   r*   c                 C  
   || _ d S r+   )rF   )r-   rF   r!   r!   r"   r.         
zInvalidStatus.__init__r/   c                 C  s   d| j jdS )Nz+server rejected WebSocket connection: HTTP d)rF   status_coder0   r!   r!   r"   r1      s   zInvalidStatus.__str__N)rF   rG   r)   r*   r<   rD   r!   r!   r!   r"   r          
r   c                   @  s&   e Zd ZdZddd	d
ZdddZdS )r   zK
    Raised when an HTTP header doesn't have a valid format or value.

    Nnamer/   value
str | Noner)   r*   c                 C  r@   r+   rM   rN   r-   rM   rN   r!   r!   r"   r.      rB   zInvalidHeader.__init__c                 C  sD   | j d u rd| j dS | j dkrd| j dS d| j d| j  S )Nzmissing z headerr:   zempty zinvalid z	 header: rN   rM   r0   r!   r!   r"   r1      s
   

zInvalidHeader.__str__r+   rM   r/   rN   rO   r)   r*   r<   rD   r!   r!   r!   r"   r      s    r   c                      s"   e Zd ZdZd fd
dZ  ZS )r   z
    Raised when an HTTP header cannot be parsed.

    The format of the header doesn't match the grammar for that header.

    rM   r/   errorheaderposr2   r)   r*   c                   s"   t  || d| d|  d S )Nz at z in superr.   )r-   rM   rT   rU   rV   	__class__r!   r"   r.      s   "zInvalidHeaderFormat.__init__)
rM   r/   rT   r/   rU   r/   rV   r2   r)   r*   r   r   r   r    r.   __classcell__r!   r!   rY   r"   r      s    r   c                   @  r   )r   z
    Raised when an HTTP header has a wrong value.

    The format of the header is correct but the value isn't acceptable.

    Nr   r!   r!   r!   r"   r      r#   r   c                      s"   e Zd ZdZd fddZ  ZS )	r   zD
    Raised when the Origin header in a request isn't allowed.

    originrO   r)   r*   c                   s   t  d| d S )NOriginrW   )r-   r]   rY   r!   r"   r.     rC   zInvalidOrigin.__init__)r]   rO   r)   r*   r[   r!   r!   rY   r"   r      s    r   c                   @  r   )r   zF
    Raised when the Upgrade or Connection header isn't correct.

    Nr   r!   r!   r!   r"   r     r#   r   c                   @  r   )r   zG
    Raised when negotiating an extension or a subprotocol fails.

    Nr   r!   r!   r!   r"   r     r#   r   c                   @  $   e Zd ZdZdddZddd	Zd
S )r   zK
    Raised when a parameter name is repeated in an extension header.

    rM   r/   r)   r*   c                 C  rH   r+   rM   r-   rM   r!   r!   r"   r.     rI   zDuplicateParameter.__init__c                 C     d| j  S )Nzduplicate parameter: r`   r0   r!   r!   r"   r1        zDuplicateParameter.__str__NrM   r/   r)   r*   r<   rD   r!   r!   r!   r"   r     rL   r   c                   @  r_   )r   zJ
    Raised when a parameter name in an extension header is invalid.

    rM   r/   r)   r*   c                 C  rH   r+   r`   ra   r!   r!   r"   r.   &  rI   zInvalidParameterName.__init__c                 C  rb   )Nzinvalid parameter name: r`   r0   r!   r!   r"   r1   )  rc   zInvalidParameterName.__str__Nrd   r<   rD   r!   r!   r!   r"   r      rL   r   c                   @  s$   e Zd ZdZddd	Zdd
dZdS )r   zK
    Raised when a parameter value in an extension header is invalid.

    rM   r/   rN   rO   r)   r*   c                 C  r@   r+   rP   rQ   r!   r!   r"   r.   3  rB   zInvalidParameterValue.__init__c                 C  s@   | j d u rd| j S | j dkrd| j S d| j d| j  S )Nzmissing value for parameter r:   zempty value for parameter zinvalid value for parameter z: rR   r0   r!   r!   r"   r1   7  s
   

zInvalidParameterValue.__str__NrS   r<   rD   r!   r!   r!   r"   r   -  rE   r   c                   @  r   )r   a  
    Raised when receiving or sending a frame that breaks the protocol.

    The Sans-I/O implementation raises this exception when:

    * receiving or sending a frame that contains invalid data;
    * receiving or sending an invalid sequence of frames.

    Nr   r!   r!   r!   r"   r   @  r#   r   c                   @  s4   e Zd ZdZ		ddd
dZdddZdddZdS )r   aU  
    Raised when parsing a frame with a payload that exceeds the maximum size.

    The Sans-I/O layer uses this exception internally. It doesn't bubble up to
    the I/O layer.

    The :meth:`~websockets.extensions.Extension.decode` method of extensions
    must raise :exc:`PayloadTooBig` if decoding a frame would exceed the limit.

    Nsize_or_messageint | None | strmax_size
int | Nonecur_sizer)   r*   c                 C  sj   t |tr|d u sJ |d u sJ tdt || _d S d | _|| _|d us(J || _d | _| 	| d S )NzMPayloadTooBig(message) is deprecated; change to PayloadTooBig(size, max_size))

isinstancer/   r3   r4   r5   messagesizerg   ri   set_current_size)r-   re   rg   ri   r!   r!   r"   r.   X  s   

zPayloadTooBig.__init__r/   c                 C  sb   | j d ur| j S d}| jd ur|d| j d7 }| jd ur&|d| j d7 }|d| j d7 }|S )Nzframe zwith z bytes zafter reading zexceeds limit of z bytes)rk   rl   ri   rg   )r-   rk   r!   r!   r"   r1   o  s   


zPayloadTooBig.__str__c                 C  s2   | j d u sJ |d ur|  j|7  _|| _ d S d S r+   )ri   rg   )r-   ri   r!   r!   r"   rm   {  s
   
zPayloadTooBig.set_current_size)NN)re   rf   rg   rh   ri   rh   r)   r*   r<   )ri   rh   r)   r*   )r   r   r   r    r.   r1   rm   r!   r!   r!   r"   r   L  s    
r   c                   @  r   )r   a  
    Raised when sending a frame is forbidden in the current state.

    Specifically, the Sans-I/O layer raises this exception when:

    * sending a data frame to a connection in a state other
      :attr:`~websockets.protocol.State.OPEN`;
    * sending a control frame to a connection in a state other than
      :attr:`~websockets.protocol.State.OPEN` or
      :attr:`~websockets.protocol.State.CLOSING`.

    Nr   r!   r!   r!   r"   r     r#   r   c                   @  r   )r   z
    Raised when receiving or sending messages concurrently.

    WebSocket is a connection-oriented protocol. Reads must be serialized; so
    must be writes. However, reading and writing concurrently is possible.

    Nr   r!   r!   r!   r"   r     r#   r   )r6   http11z.legacy.exceptions)AbortHandshakeInvalidStatusCodeRedirectHandshakeWebSocketProtocolError)deprecated_aliases)$r    
__future__r   r3   importsr   __all__	Exceptionr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   AssertionErrorr   RuntimeErrorr   r:   r6   rn   globalsr!   r!   r!   r"   <module>   sH    B


	
6
