o
    ȝi9                     @  sn   d dl mZ d dlZd dlZd dlmZ G dd deZdd
dZ	dddZ
dddZdddZdddZdS )    )annotationsN)WWWScopec                   @  s   e Zd ZdS )ClientDisconnectedN)__name__
__module____qualname__ r   r   S/var/www/html/ocr-read/venv/lib/python3.10/site-packages/uvicorn/protocols/utils.pyr   	   s    r   	transportasyncio.Transportreturntuple[str, int] | Nonec                 C  s   |  d}|d ur-z| }t|tr t|d t|d fW S d W S  ty,   Y d S w |  d}|d urOt|ttfrOt|dkrOt|d t|d fS d S )Nsocketr      peername   )	get_extra_infogetpeername
isinstancetuplestrintOSErrorlistlenr
   socket_infoinfor   r   r	   get_remote_addr   s   
*
"r   c                 C  s   |  d}|d ur | }t|trt|d t|d fS d S |  d}|d urBt|ttfrBt|dkrBt|d t|d fS d S )Nr   r   r   socknamer   )r   getsocknamer   r   r   r   r   r   r   r   r   r	   get_local_addr   s   
&
"r!   boolc                 C  s   t | dS )N
sslcontext)r"   r   )r
   r   r   r	   is_ssl)   s   r$   scoper   r   c                 C  s   |  d}|s	dS d| S )Nclient z%s:%d)get)r%   r&   r   r   r	   get_client_addr-   s   
r)   c                 C  s2   t j| d }| d rd|| d d}|S )Npathquery_stringz{}?{}ascii)urllibparsequoteformatdecode)r%   path_with_query_stringr   r   r	   get_path_with_query_string4   s   r3   )r
   r   r   r   )r
   r   r   r"   )r%   r   r   r   )
__future__r   asynciourllib.parser-   uvicorn._typesr   r   r   r   r!   r$   r)   r3   r   r   r   r	   <module>   s    



