o
    wè¨i‹  ã                	   @  s@  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
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mZ dd
lmZ ddlmZ e e¡Zded< ejejej ej!ej"ej#ej$ej%dœZ&ded< ej ej ej dœZ'ded< d.dd„Z(d/dd„Z)d0d d!„Z*d1d"d#„Z+d2d%d&„Z,d3d,d-„Z-dS )4é    )ÚannotationsN)ÚAnyÚDictÚTypeÚNoReturn©ÚPathé   )Úerrorsé   )Úconfigr
   )ÚDEBUG_GENERATORÚ
time_since)Úplatform)ÚAbstractResponsezlogging.LoggerÚlog)ZP2002ZP2003ZP2009ZP2010ZP2012ZP2019ZP2021ZP2025zDict[str, Type[Exception]]ÚERROR_MAPPING)ZUnknownArgumentZUnknownInputFieldZUnknownSelectionFieldzdict[str, type[Exception]]ÚMETA_ERROR_MAPPINGÚreturnÚstrc                   C  s   dt  t  ¡ ¡› S )Nzprisma-query-engine-)r   Zcheck_for_extensionÚbinary_platform© r   r   úJ/home/app/Keep/.python/lib/python3.10/site-packages/prisma/engine/utils.pyÚquery_engine_name&   s   r   Úbinary_pathsúdict[str, str]úPath | Nonec                 C  sd   t jd urt| t j ƒS dd„ |  ¡ D ƒ}t|ƒdkr|d S |D ]}| ¡ r/t|ƒr/|  S q!d S )Nc                 S  s   g | ]}t |ƒ‘qS r   r   )Ú.0Úpr   r   r   Ú
<listcomp>.   s    z._resolve_from_binary_paths.<locals>.<listcomp>r	   r   )r   r   r   ÚvaluesÚlenÚexistsÚ_can_execute_binary)r   ÚpathsÚpathr   r   r   Ú_resolve_from_binary_paths*   s   
€r&   r%   r   Úboolc                 C  s0   t jt| ƒdgdd}t d| |j¡ |jdkS )Nú	--versionF)Úcheckz,Executable check for %s exited with code: %sr   )Ú
subprocessÚrunr   r   ÚdebugÚ
returncode)r%   Úprocr   r   r   r#   ?   s   
r#   c                 C  sÚ  t  ¡ }d }t }tƒ }t ¡  |¡}tj |¡}t	| ƒ}t
 d|¡ t
 d|¡ tj d¡}|rLt
 d|¡ t|ƒ ¡ sEt d|› ¡‚t|ƒ}d}n(| ¡ rX|}t
 d¡ n|d uri| ¡ ri|}t
 d|¡ n| ¡ rt|}t
 d	¡ |s™|d ur†|› d
|› d|› d}	n|› d|› d}	t d|	› dd ¡‚t
 d|¡ t  ¡ }
tjt| ¡ ƒdgtjdd}t
 dt|
ƒ¡ t|jt ¡ ƒ dd¡ ¡ }t
 d|¡ |rÝ|tjkrÝtjtj|d‚t
 d|¡ t
 dt|ƒ¡ |S )NzExpecting local query engine %sz Expecting global query engine %sZPRISMA_QUERY_ENGINE_BINARYz/PRISMA_QUERY_ENGINE_BINARY is defined, using %szJPRISMA_QUERY_ENGINE_BINARY was provided, but no query engine was found at Fz+Query engine found in the working directoryz9Query engine found from the Prisma CLI generated path: %sz%Query engine found in the global pathz, z or z to exist but nonez to exist but neitherz	Expected z& were found or could not be executed.
zTry running prisma py fetchzUsing Query Engine binary at %sr(   T)Ústdoutr)   zVersion check took %szquery-engineÚ zUsing query engine version %s)ÚexpectedÚgotzUsing query engine at %szEnsuring query engine took: %s)ÚtimeÚ	monotonicr   r   r   ÚcwdÚjoinpathr   Zbinary_cache_dirr&   r   r,   ÚosÚenvironÚgetr"   r
   ZBinaryNotFoundErrorr*   r+   r   ÚabsoluteÚPIPEr   r/   ÚsysÚgetdefaultencodingÚreplaceÚstripZexpected_engine_versionZMismatchedVersionsError)r   Ú
start_timeÚfileZforce_versionÚnameZ
local_pathZglobal_pathZfile_from_pathsÚbinaryr1   Zstart_versionÚprocessÚversionr   r   r   ÚensureE   s`   ÿþ
ÿrF   Úintc                  C  s6   t   t jt j¡} |  d¡ |  ¡ d }|  ¡  t|ƒS )N)r0   r   r	   )ÚsocketÚAF_INETÚSOCK_STREAMÚbindÚgetsocknameÚcloserG   )ÚsockÚportr   r   r   Úget_open_port„   s
   
rP   ÚrespúAbstractResponse[Any]Údatar   r   c           
      C  s6  |D ]|}z`|  dd¡}|  di ¡}|  d¡}|d u rW q|  dd¡}|dkr5| d¡r0t |¡‚t |¡‚d|v r>t |¡‚d }|  d	i ¡  d
¡}|d urRt  |¡}|d u r[t  |¡}|d urc||ƒ‚W q tt	fy~ }	 zt
 d|	¡ W Y d }	~	qd }	~	ww zt |d ¡‚ tt	fy‘   Y nw t | d|› ¡‚)NÚerrorr0   Zuser_facing_errorZ
error_codeÚmessageZP2028zTransaction already closedzA value is required but not setÚmetaÚkindz6Ignoring error while constructing specialized error %sr   z&Could not process erroneous response: )r9   Ú
startswithÚprisma_errorsZTransactionExpiredErrorZTransactionErrorÚMissingRequiredValueErrorr   r   ÚKeyErrorÚ	TypeErrorr   r,   Z	DataErrorÚ
IndexErrorr
   ZEngineRequestError)
rQ   rS   rT   Zbase_error_messageZuser_facingÚcoderU   ÚexcrW   Úerrr   r   r   Úhandle_response_errorsŒ   sD   






ÿ€þÿra   )r   r   )r   r   r   r   )r%   r   r   r'   )r   r   r   r   )r   rG   )rQ   rR   rS   r   r   r   ).Ú
__future__r   r7   r<   r3   rH   Úloggingr*   Útypingr   r   r   r   Úpathlibr   r0   r
   r   rY   Úutilsr   r   Zbinariesr   Zhttp_abstractr   Ú	getLoggerÚ__name__r   Ú__annotations__ZUniqueViolationErrorZForeignKeyViolationErrorZFieldNotFoundErrorZRawQueryErrorrZ   Z
InputErrorZTableNotFoundErrorZRecordNotFoundErrorr   r   r   r&   r#   rF   rP   ra   r   r   r   r   Ú<module>   sD    øý




?