o
    AD©i
  ã                   @  sv   d dl mZ d dl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   úP/var/www/Datamplify/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B ƒ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   útuple[str, int | None] | Nonec                 C  s¬   |   d¡}|d ur)| ¡ }t|tƒrt|d ƒt|d ƒfS t|tƒr'|d fS d S |   d¡}|d urKt|ttB ƒrKt|ƒdkrKt|d ƒt|d ƒfS t|tƒrT|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_addr3   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_string:   s   r4   )r
   r   r   r   )r
   r   r   r   )r
   r   r   r#   )r&   r   r   r   )Ú
__future__r   Úasyncior   Úurllib.parser.   Úuvicorn._typesr   r   r   r   r"   r%   r*   r4   r   r   r   r	   Ú<module>   s    



