o
    wip                     @  s   U d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlZddlmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZ eeZded< G dd dZG dd deeZ G dd deeZ!dS )    )annotationsN)AnyNoReturn)	timedelta)override   )utilserrors   )is_dict)Method)SyncAbstractEngineAsyncAbstractEngine)SyncHTTP)	AsyncHTTP)AbstractResponsezlogging.Loggerlogc                      sX   e Zd ZU dZded< ded< ddd" fddZd#ddZd$ddZd%d d!Z  Z	S )&BaseHTTPEnginezCEngine wrapper that communicates to the underlying engine over HTTP
str | Noneurlzdict[str, str]headersN)r   dict[str, str] | NonereturnNonec                  s,   t    || _|d ur|| _d S i | _d S N)super__init__r   r   )selfr   r   	__class__ J/home/app/Keep/.python/lib/python3.10/site-packages/prisma/engine/_http.pyr      s   
zBaseHTTPEngine.__init__pathstrmethodr   contentr   parse_responsebooltuple[str, dict[str, Any]]c                C  s   | j d u r
tddi | ji}|rd|d d< |d ur$|d | |d ur,||d< | j | }td|| td|d  td| ||fS )	Nz!Not connected to the query enginer   zapplication/jsonAcceptr%   zConstructed %s request to %szRequest headers: %szRequest content: %s)r   r	   ZNotConnectedErrorr   updater   debug)r   r"   r$   r%   r   r&   kwargsr   r    r    r!   _build_request&   s"   
	

zBaseHTTPEngine._build_requestdataobjectresponse AbstractResponse[httpx.Response]c                C  sR   t |tr
t|}t|stdt| d| |d}|r't	||S |S )Nz>Expected deserialised engine response to be a dictionary, got z - r	   )

isinstancer#   jsonloadsr   	TypeErrortypegetr   Zhandle_response_errors)r   r.   r0   Zerrors_datar    r    r!   _process_response_dataH   s   


z%BaseHTTPEngine._process_response_databodyr   c                C  s    |j dkr
t|t||)Ni  )statusr	   ZUnprocessableEntityErrorZEngineRequestError)r   r9   r0   r    r    r!   _process_response_error[   s   

z&BaseHTTPEngine._process_response_error)r   r   r   r   r   r   )r"   r#   r$   r   r%   r   r   r   r&   r'   r   r(   )r.   r/   r0   r1   r   r   )r9   r#   r0   r1   r   r   )
__name__
__module____qualname____doc____annotations__r   r-   r8   r;   __classcell__r    r    r   r!   r      s   
 


"r   c                      r   e Zd ZU ded< 	d"d# fddZeddd$ddZeddd$ddZd%ddZddddd&d d!Z	  Z
S )'SyncHTTPEnginer   sessionNr   r   r   r   r,   r   r   r   c                   $   t  j||d tdi || _d S N)r   r   r    )r   r   r   rD   r   r   r   r,   r   r    r!   r   k      zSyncHTTPEngine.__init__timeoutrJ   timedelta | Nonec                C  s   |    d S r   _close_sessionr   rJ   r    r    r!   closet   s   zSyncHTTPEngine.closec                  s   d S r   r    rN   r    r    r!   aclose|   s   zSyncHTTPEngine.aclosec                 C  s$   | j r| j js| j   d S d S d S r   rD   closedrO   r   r    r    r!   rM      s   zSyncHTTPEngine._close_sessionTr%   r   r&   r$   r   r"   r#   r%   r&   r'   c                C  s   | j |||||d\}}| jj||fi |}td|||j d|j  kr+dkrPn n#|s=| }	td|||	 |	S | }
td|||
 | j|
|dS | j	| |d d S 	N)r"   r$   r%   r   r&   z%s %s returned status %si,     z%s %s returned text: %sz%s %s returned %s)r.   r0   )r9   r0   
r-   rD   requestr   r+   r:   textr3   r8   r;   r   r$   r"   r%   r   r&   r   r,   r0   rY   r.   r    r    r!   rX      s$   	
zSyncHTTPEngine.requestr   r   r   r   r   r,   r   r   r   rJ   rK   r   r   r   r   r$   r   r"   r#   r%   r   r   r   r&   r'   r   r   r<   r=   r>   r@   r   r   rO   rP   rM   rX   rA   r    r    r   r!   rC   h   s   
 	

rC   c                      rB   )'AsyncHTTPEnginer   rD   Nr   r   r   r   r,   r   r   r   c                   rE   rF   )r   r   r   rD   rG   r   r    r!   r      rH   zAsyncHTTPEngine.__init__rI   rJ   rK   c                C  s   d S r   r    rN   r    r    r!   rO      s   zAsyncHTTPEngine.closec                  s   |   I d H  d S r   rL   rN   r    r    r!   rP      s   zAsyncHTTPEngine.aclosec                   s,   | j r| j js| j  I d H  d S d S d S r   rQ   rS   r    r    r!   rM      s   zAsyncHTTPEngine._close_sessionTrT   r$   r   r"   r#   r%   r&   r'   c                  s   | j |||||d\}}| jj||fi |I d H }td|||j d|j  kr/dkrZn n)|sD| I d H }	td|||	 |	S | I d H }
td|||
 | j|
|dS | j	| I d H |d d S rU   rW   rZ   r    r    r!   rX      s&   	
zAsyncHTTPEngine.requestr   r[   r\   r]   r^   r_   r    r    r   r!   r`      s   
 	

r`   )"
__future__r   r3   loggingtypingr   r   datetimer   Ztyping_extensionsr   Zhttpx r   r	   r   _typesr   Z	_abstractr   r   Z
_sync_httpr   Z_async_httpr   Zhttp_abstractr   	getLoggerr<   r   r@   r   rC   r`   r    r    r    r!   <module>   s$    RC