o
    wi4                     @  sZ  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Zd dl	Z	d dl
Z
d dl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mZ d
dlmZmZ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rd
dl(m)Z)m*Z* dZ+e	,e-Z.de/d< G dd dZ0G dd de0eZ1G dd de0eZ2dS )    )annotationsN)TYPE_CHECKINGAnyoverload)Path)	timedelta)Literaloverride   )utilserrors)SyncHTTPEngineAsyncHTTPEngine   )DEBUG	_env_bool
time_since)
HttpConfigTransactionId)dumps)platform)DEFAULT_CONNECT_TIMEOUT)MetricsFormatDatasourceOverride)SyncQueryEngineAsyncQueryEnginezlogging.Loggerlogc                   @  s\   e Zd ZU ded< ded< ded< ded< d	d
dddZdddZdddZd ddZdS )!BaseQueryEnginer   dml_pathz
str | NoneurlPath | Nonefilez6subprocess.Popen[bytes] | subprocess.Popen[str] | NoneprocessF)log_queriesr#   boolreturnNonec                C  s   || _ || _d | _d | _d S N)r   _log_queriesr"   r!   )selfr   r#    r*   K/home/app/Keep/.python/lib/python3.10/site-packages/prisma/engine/_query.py__init__+   s   
zBaseQueryEngine.__init__c                 C  s   ddl m} t|jS )Nr   )BINARY_PATHS)clientr-   r   ZensureZquery_engine)r)   r-   r*   r*   r+   _ensure_file6   s   zBaseQueryEngine._ensure_filedatasourceslist[DatasourceOverride] | None;tuple[str, subprocess.Popen[bytes] | subprocess.Popen[str]]c                C  s  t  }td| d| | _tj }|jt	| j
 ddddd tr,|jdd	 |d ur8|jt|d
 | jrA|jdd t	| dt	|ddg}tdr]|jdd	 |d td |tjtjdd}t dkrwdd |d< tj|fi || _| j| jfS )NzRunning query engine on port %izhttp://localhost:errorjsonbinaryZgraphql)ZPRISMA_DML_PATHRUST_LOGZRUST_LOG_FORMATZPRISMA_CLIENT_ENGINE_TYPEZPRISMA_ENGINE_PROTOCOLinfo)r6   )ZOVERWRITE_DATASOURCESy)ZLOG_QUERIESz-pz--enable-metricsz--enable-raw-queriesZ__PRISMA_PY_PLAYGROUNDz--enable-playgroundzStarting query engine...F)envstdoutstderrtextwindowsc                   S  s   t t jt jt jgS r'   )signalpthread_sigmaskSIG_UNBLOCKSIGINTSIGTERMr*   r*   r*   r+   <lambda>o   s    z0BaseQueryEngine._spawn_process.<locals>.<lambda>
preexec_fn)r   Zget_open_portr   debugr   osenvironcopyupdatestrr   absoluter   r   r(   r   appendsysr:   r;   r   name
subprocessPopenr"   )r)   r!   r0   portr9   argsZpopen_kwargsr*   r*   r+   _spawn_process<   sH   



zBaseQueryEngine._spawn_processtimeouttimedelta | Nonec                 C  s   | j d u rd S |d ur| }nd }t dkr%| j   | j j|d n"| j tj z	| j j|d W n t	j
yF   | j tj Y nw d | _ d S )Nr=   rT   )r"   total_secondsr   rN   killwaitsend_signalr>   rA   rO   TimeoutExpiredSIGKILL)r)   rT   rW   r*   r*   r+   _kill_processw   s   



zBaseQueryEngine._kill_processN)r   r   r#   r$   r%   r&   )r%   r   )r!   r   r0   r1   r%   r2   rT   rU   r%   r&   )__name__
__module____qualname____annotations__r,   r/   rS   r]   r*   r*   r*   r+   r   %   s   
 

;r   c                   @     e Zd ZU ded< dddd8ddZeddd9ddZeddd9ddZeedfd:ddZ	edfd;ddZ
ed<d#d$Zed=d&d'Zed>d(d)Zed>d*d+Zed?d1d2Zed@d4d2ZedAd7d2ZdS )Br   r    r!   FNr#   http_configr   r   r#   r$   re   HttpConfig | Noner%   r&   c                C  :   t j| ||d tj| fdd i|pi  t| j d S N)r   r#   r   )r   r,   r   atexitregisterstopr)   r   r#   re   r*   r*   r+   r,         	zSyncQueryEngine.__init__rV   rT   rU   c                C  s,   t d | j|d |   t d d S NzDisconnecting query engine...rV   zDisconnected query engine)r   rE   r]   _close_sessionr)   rT   r*   r*   r+   close   s   
zSyncQueryEngine.closec                  s   | j |d |   d S NrV   rq   ro   rp   r*   r*   r+   aclose   s   zSyncQueryEngine.acloser   r0   r1   c                 C  s   t d |rt d| | jd urtdt }|   | _}z
| j	|||d W n t
y8   |    w t dt| d S NzConnecting to query enginezDatasources: %sz%Already connected to the query engine)rT   r0   z"Connecting to query engine took %sr   rE   r"   r   ZAlreadyConnectedErrortime	monotonicr/   r!   spawn	Exceptionrq   r   r)   rT   r0   startr!   r*   r*   r+   connect   s   


zSyncQueryEngine.connectc                 C  s   | j ||d d }tt| d D ]D}z| dd}W n% tyB } zt|tr+ |}t	d| t
d W Y d }~qd }~ww |dd urUt	d t
d q d S td|	N)r!   r0   g?GETz/statusz8Could not connect to query engine due to %s; retrying...ZErrorsz0Could not connect due to gql errors; retrying...z%Could not connect to the query engine)rS   rangeintrW   requestrz   
isinstanceAttributeErrorr   rE   rw   sleepgetr   EngineConnectionErrorr)   r!   rT   r0   last_exc_dataexcr*   r*   r+   ry      s.   



zSyncQueryEngine.spawncontentrJ   tx_idTransactionId | Noner   c                C  s&   i }|d ur
||d< | j dd||dS NzX-transaction-idPOST/)r   headersr   r)   r   r   r   r*   r*   r+   query   s   zSyncQueryEngine.queryr   c                C  s   | j dd|d}t|d S Nr   z/transaction/start)r   idr   r   r)   r   resultr*   r*   r+   start_transaction   s   z!SyncQueryEngine.start_transactionc                 C     |  dd| d d S Nr   /transaction/z/commitr   r)   r   r*   r*   r+   commit_transaction     z"SyncQueryEngine.commit_transactionc                 C  r   Nr   r   z	/rollbackr   r   r*   r*   r+   rollback_transaction  r   z$SyncQueryEngine.rollback_transactionformatLiteral['json']global_labelsdict[str, str] | Nonedict[str, Any]c                C     d S r'   r*   r)   r   r   r*   r*   r+   metrics
     zSyncQueryEngine.metricsLiteral['prometheus']c                C  r   r'   r*   r   r*   r*   r+   r     r   r   str | dict[str, Any]c                C  s4   |d ur
t |}nd }| jdd| ||dkdS Nr   z/metrics?format=r4   )r   parse_responser4   r   r   r)   r   r   r   r*   r*   r+   r     s   r   r   r#   r$   re   rf   r%   r&   r^   rT   r   r0   r1   r%   r&   r!   r   rT   r   r0   r1   r%   r&   r   rJ   r   r   r%   r   r   rJ   r%   r   r   r   r%   r&   r   r   r   r   r%   r   r   r   r   r   r%   rJ   r   r   r   r   r%   r   r_   r`   ra   rb   r,   r	   rq   rt   r   r}   ry   r   r   r   r   r   r   r*   r*   r*   r+   r      s<   
 "r   c                   @  rc   )Br   r    r!   FNrd   r   r   r#   r$   re   rf   r%   r&   c                C  rg   rh   )r   r,   r   ri   rj   rk   rl   r*   r*   r+   r,   1  rm   zAsyncQueryEngine.__init__rV   rT   rU   c                C  s$   t d | j|d t d d S rn   )r   rE   r]   rp   r*   r*   r+   rq   @  s   
zAsyncQueryEngine.closec                  s    | j |d |  I d H  d S rr   rs   rp   r*   r*   r+   rt   H  s   zAsyncQueryEngine.acloser   r0   r1   c                   s   t d |rt d| | jd urtdt }|   | _}z| j	|||dI d H  W n t
y<   |    w t dt| d S ru   rv   r{   r*   r*   r+   r}   M  s   


zAsyncQueryEngine.connectc                   s   | j ||d d }tt| d D ]M}z| ddI d H }W n( tyI } zt|tr/ |}t	d| t
dI d H  W Y d }~qd }~ww |dd ur_t	d t
dI d H  q d S td|r~   )rS   r   r   rW   r   rz   r   r   r   rE   asyncior   r   r   r   r   r*   r*   r+   ry   e  s0   

zAsyncQueryEngine.spawnr   rJ   r   r   r   c                  s.   i }|d ur||d< | j dd||dI d H S r   r   r   r*   r*   r+   r     s   zAsyncQueryEngine.queryr   c                  s$   | j dd|dI d H }t|d S r   r   r   r*   r*   r+   r     s   z"AsyncQueryEngine.start_transactionc                       |  dd| dI d H  d S r   r   r   r*   r*   r+   r        z#AsyncQueryEngine.commit_transactionc                   r   r   r   r   r*   r*   r+   r     r   z%AsyncQueryEngine.rollback_transactionr   r   r   r   r   c                     d S r'   r*   r   r*   r*   r+   r        zAsyncQueryEngine.metricsr   c                  r   r'   r*   r   r*   r*   r+   r     r   r   r   c                  s<   |d urt |}nd }| jdd| ||dkdI d H S r   r   r   r*   r*   r+   r     s   r   r^   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r   .  s<   
 "r   )3
__future__r   rF   rM   r4   rw   ri   r>   r   loggingrO   typingr   r   r   pathlibr   datetimer   Ztyping_extensionsr   r	    r   r   Z_httpr   r   r   r   r   _typesr   r   Z_builderr   Zbinariesr   
_constantsr   typesr   r   __all__	getLoggerr_   r   rb   r   r   r   r*   r*   r*   r+   <module>   s:    h "