
    ,i4                       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rd
dl(m)Z)m*Z* dZ+ e	jX                  e-      Z.de/d<    G d d      Z0 G d de0e      Z1 G d de0e      Z2y)    )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                  r    e Zd ZU ded<   ded<   ded<   ded<   d	d
	 	 	 	 	 ddZddZ	 	 	 	 	 	 ddZddZy)BaseQueryEnginer   dml_pathz
str | NoneurlPath | Nonefilez6subprocess.Popen[bytes] | subprocess.Popen[str] | NoneprocessF)log_queriesc               <    || _         || _        d | _        d | _        y N)r    _log_queriesr$   r#   )selfr    r%   s      Y/var/www/html/langgraph-service/venv/lib/python3.12/site-packages/prisma/engine/_query.py__init__zBaseQueryEngine.__init__+   s!     !'	    c                L    ddl m} t        j                  |j                        S )Nr   )BINARY_PATHS)clientr.   r   ensurequery_engine)r)   r.   s     r*   _ensure_filezBaseQueryEngine._ensure_file6   s    )||L5566r,   c               t   t        j                         }t        j                  d|       d| | _        t
        j                  j                         }|j                  t        | j                  j                               dddd       t        r|j                  d	       ||j                  t        |      
       | j                  r|j                  d       t        |j                               dt        |      ddg}t        d      r#|j                  d	       |j!                  d       t        j                  d       |t"        j$                  t"        j&                  dd}t)        j*                         dk7  rd |d<   t-        j.                  |fi || _        | j                  | j0                  fS )NzRunning query engine on port %izhttp://localhost:errorjsonbinarygraphql)PRISMA_DML_PATHRUST_LOGRUST_LOG_FORMATPRISMA_CLIENT_ENGINE_TYPEPRISMA_ENGINE_PROTOCOLinfo)r9   )OVERWRITE_DATASOURCESy)LOG_QUERIESz-pz--enable-metricsz--enable-raw-queries__PRISMA_PY_PLAYGROUNDz--enable-playgroundzStarting query engine...F)envstdoutstderrtextwindowsc                     t        j                  t         j                  t         j                  t         j                  g      S r'   )signalpthread_sigmaskSIG_UNBLOCKSIGINTSIGTERM r,   r*   <lambda>z0BaseQueryEngine._spawn_process.<locals>.<lambda>o   s)    1G1G""V]]FNN$C2 r,   
preexec_fn)r   get_open_portr   debugr!   osenvironcopyupdatestrr    absoluter   r   r(   r   appendsysrC   rD   r   name
subprocessPopenr$   )r)   r#   datasourcesportrB   argspopen_kwargss          r*   _spawn_processzBaseQueryEngine._spawn_process<   ss    ""$		3T:&tf-jjoo

 6 6 89"&.#, 	 	
 JJJ'"JJU;-?J@ JJ3J'  I"
 -.JJJ'KK-.		,-jjjj	(
 ==?i'*L& "''==xx%%r,   c                   | j                   y ||j                         }nd }t        j                         dk(  r>| j                   j	                          | j                   j                  |       d | _         y | j                   j                  t        j                         	 | j                   j                  |       d | _         y # t        j                  $ r3 | j                   j                  t        j                         Y d | _         y w xY w)NrF   timeout)r$   total_secondsr   rZ   killwaitsend_signalrH   rK   r[   TimeoutExpiredSIGKILL)r)   rd   re   s      r*   _kill_processzBaseQueryEngine._kill_processw   s    <<#113M M==?i'LLLLm4  LL$$V]]39!!-!8  ,, 9((89s   "C <DDN)r    r   r%   boolreturnNone)rm   r   )r#   r   r]   list[DatasourceOverride] | Nonerm   z;tuple[str, subprocess.Popen[bytes] | subprocess.Popen[str]]rd   ztimedelta | Nonerm   rn   )__name__
__module____qualname____annotations__r+   r2   ra   rk   rM   r,   r*   r   r   %   so    N	O
CC "		 	 		
 
	79& 9& 5	9&
 
E9&vr,   r   c                  R   e Zd ZU ded<   ddd	 	 	 	 	 	 	 ddZedddd       Zedddd	       Zeedf	 	 	 	 	 dd
       Z	edf	 	 	 	 	 	 	 ddZ
e	 	 	 	 	 	 dd       Zedd       Zedd       Zedd       Ze	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Zy)r   r"   r#   FNr%   http_configc                   t         j                  | ||       t        j                  | fdd i|xs i  t        j                  | j
                         y N)r    r%   r!   )r   r+   r   atexitregisterstopr)   r    r%   rw   s       r*   r+   zSyncQueryEngine.__init__   sH     	  k RF$F;3D"F 			"r,   rc   c                   t         j                  d       | j                  |       | j                          t         j                  d       y NzDisconnecting query engine...rc   zDisconnected query engine)r   rQ   rk   _close_sessionr)   rd   s     r*   closezSyncQueryEngine.close   s9    		127+		-.r,   c               P   K   | j                  |       | j                          y wNrc   r   r   r   s     r*   aclosezSyncQueryEngine.aclose   s      

7
#s   $&c                   t         j                  d       |rt         j                  d|       | j                  t        j                  d      t        j                         }| j                         x| _        }	 | j                  |||       t         j                  dt        |             y # t        $ r | j                           w xY wNzConnecting to query enginezDatasources: %sz%Already connected to the query engine)rd   r]   z"Connecting to query engine took %sr   rQ   r$   r   AlreadyConnectedErrortime	monotonicr2   r#   spawn	Exceptionr   r   r)   rd   r]   startr#   s        r*   connectzSyncQueryEngine.connect   s     			./II'5<<#../VWW ,,..	D	JJtW+JF
 			6
58IJ	  	JJL	s   ;B/ /C
c                   | j                  ||       d }t        t        |j                         dz              D ]R  }	 | j	                  dd      }|j                  d      +t        j                  d       t        j                  d       R y  t        j                  d      |# t
        $ rH}t        |t              r |}t        j                  d|       t        j                  d       Y d }~d }~ww xY w	N)r#   r]   g?GETz/statusz8Could not connect to query engine due to %s; retrying...Errorsz0Could not connect due to gql errors; retrying...z%Could not connect to the query engine)ra   rangeintre   requestr   
isinstanceAttributeErrorr   rQ   r   sleepgetr   EngineConnectionErrorr)   r#   rd   r]   last_exc_dataexcs           r*   r   zSyncQueryEngine.spawn   s     	;?s7002S89: 	fA||E95 xx!-		LM

3+	f. ../VW]ee)  c>2		N 

3s   B&&	C7/>C22C7c               >    i }|||d<   | j                  dd||      S NzX-transaction-idPOST/)contentheadersr   r)   r   tx_idr   s       r*   queryzSyncQueryEngine.query   s<     #%*/G&'||	  
 	
r,   c               F    | j                  dd|      }t        |d         S Nr   z/transaction/start)r   idr   r   r)   r   results      r*   start_transactionz!SyncQueryEngine.start_transaction   s/       

 VD\**r,   c                0    | j                  dd| d       y Nr   /transaction/z/commitr   r)   r   s     r*   commit_transactionz"SyncQueryEngine.commit_transaction  s    V}UG7;<r,   c                0    | j                  dd| d       y Nr   r   z	/rollbackr   r   s     r*   rollback_transactionz$SyncQueryEngine.rollback_transaction  s    V}UG9=>r,   c                    y r'   rM   r)   formatglobal_labelss      r*   metricszSyncQueryEngine.metrics
  s     r,   c                    y r'   rM   r   s      r*   r   zSyncQueryEngine.metrics  s     r,   c               l    |t        j                  |      }nd }| j                  dd| ||dk(        S Nr   z/metrics?format=r5   )r   parse_responser5   r   r   r)   r   r   r   s       r*   r   zSyncQueryEngine.metrics  sK     $jj/GG||vh'!V+	  
 	
r,   r    r   r%   rl   rw   zHttpConfig | Nonerm   rn   rp   rd   r   r]   ro   rm   rn   r#   r   rd   r   r]   ro   rm   rn   r   rV   r   zTransactionId | Nonerm   r   r   rV   rm   r   r   r   rm   rn   r   zLiteral['json']r   dict[str, str] | Nonerm   zdict[str, Any]r   zLiteral['prometheus']r   r   rm   rV   r   r   r   r   rm   zstr | dict[str, Any]rq   rr   rs   rt   r+   r
   r   r   r   r   r   r   r   r   r   r   r   rM   r,   r*   r   r      s   
 ")-# # 	#
 '# 
# 37 / / :>    57;KK 5K 
	K K4 57;	 f f  f 5	 f
 
 fD 

 $	

 

 
" + + = = ? ?    -	
 
   & -	
 
  
 
 -	

 

 
r,   r   c                  R   e Zd ZU ded<   ddd	 	 	 	 	 	 	 ddZedddd       Zedddd	       Zeedf	 	 	 	 	 dd
       Z	edf	 	 	 	 	 	 	 ddZ
e	 	 	 	 	 	 dd       Zedd       Zedd       Zedd       Ze	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Zy)r   r"   r#   FNrv   c                   t         j                  | ||       t        j                  | fdd i|xs i  t        j                  | j
                         y ry   )r   r+   r   rz   r{   r|   r}   s       r*   r+   zAsyncQueryEngine.__init__1  sH     	  k R  G4GK4E2G 			"r,   rc   c               |    t         j                  d       | j                  |       t         j                  d       y r   )r   rQ   rk   r   s     r*   r   zAsyncQueryEngine.close@  s-    		127+		-.r,   c               d   K   | j                  |       | j                          d {    y 7 wr   r   r   s     r*   r   zAsyncQueryEngine.acloseH  s&     

7
#!!###s   &0.0c                  K   t         j                  d       |rt         j                  d|       | j                  t        j                  d      t        j                         }| j                         x| _        }	 | j                  |||       d {    t         j                  dt        |             y 7 $# t        $ r | j                           w xY wwr   r   r   s        r*   r   zAsyncQueryEngine.connectM  s      			./II'5<<#../VWW ,,..	D	**T7*LLL
 			6
58IJ M 	JJL	s0   A:C=B; B9B;  C9B; ;CCc                6  K   | j                  ||       d }t        t        |j                         dz              D ]b  }	 | j	                  dd       d {   }|j                  d      3t        j                  d       t        j                  d       d {    b y  t        j                  d      |7 a# t
        $ rQ}t        |t              r |}t        j                  d|       t        j                  d       d {  7   Y d }~d }~ww xY w7 }wr   )ra   r   r   re   r   r   r   r   r   rQ   asyncior   r   r   r   r   s           r*   r   zAsyncQueryEngine.spawne  s     	;?s7002S89: 	fA!\\%;; xx!-		LMmmC(((+	f. ../VW]ee+ < c>2		N mmC((( )sZ   >DB:B8B:>DDD8B::	DADDD
DDDc               Z   K   i }|||d<   | j                  dd||       d {   S 7 wr   r   r   s       r*   r   zAsyncQueryEngine.query  sJ      #%*/G&'\\	 " 
 
 	
 
s   "+)+c               b   K   | j                  dd|       d {   }t        |d         S 7 wr   r   r   s      r*   r   z"AsyncQueryEngine.start_transaction  s=     ||  $ 
 

 VD\**
s   /-/c                L   K   | j                  dd| d       d {    y 7 wr   r   r   s     r*   r   z#AsyncQueryEngine.commit_transaction  s#     ll6]5'#ABBB   $"$c                L   K   | j                  dd| d       d {    y 7 wr   r   r   s     r*   r   z%AsyncQueryEngine.rollback_transaction  s#     ll6]5'#CDDDr   c                  K   y wr'   rM   r   s      r*   r   zAsyncQueryEngine.metrics  s         c                  K   y wr'   rM   r   s      r*   r   zAsyncQueryEngine.metrics  s      r   c                  K   |t        j                  |      }nd }| j                  dd| ||dk(         d {   S 7 wr   r   r   s       r*   r   zAsyncQueryEngine.metrics  sY      $jj/GG\\vh'!V+	 " 
 
 	
 
s   9AA Ar   rp   r   r   r   r   r   r   r   r   r   rM   r,   r*   r   r   .  s   
 ")-# # 	#
 '# 
# 37 / / :> $ $  57;KK 5K 
	K K4 57;	 f f  f 5	 f
 
 fD 

 $	

 

 
" + + C C E E    -	
 
   & -	
 
  
 
 -	

 

 
r,   r   )3
__future__r   rR   rY   r5   r   rz   rH   r   loggingr[   typingr   r   r   pathlibr   datetimer   typing_extensionsr	   r
    r   r   _httpr   r   r   r   r   _typesr   r   _builderr   binariesr   
_constantsr   typesr   r   __all__	getLoggerrq   r   rt   r   r   r   rM   r,   r*   <module>r      s    " 	 
        / /   /  2 0 0 .   09
 (g''1^ 1e eP^
o~ ^
B]
 ]
r,   