§
    öÛgŽ  ã                   ó~   — d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZ  G d„ d	e¦  «        Z e¦   «         ZdS )
z/
Temporary PostgreSQL cluster for the process.
é    N)Údequeé   )ÚClusterÚClusterError)Úinstallation)Úfind_available_portc                   ó†   — e Zd ZdZdj        ZdZdZdZh d£Z	d„ Z
d„ Zd„ Zej        d	d
ifd„Zd„ Zdj        fd„Zd„ Zd„ ZdS )ÚTemporala‚  
	Manages a temporary cluster for the duration of the process.

	Instances of this class reference a distinct cluster. These clusters are
	transient; they will only exist until the process exits.

	Usage::

		>>> from postgresql.temporal import pg_tmp
		>>> with pg_tmp:
		...  ps = db.prepare('SELECT 1')
		...  assert ps.first() == 1

	Or `pg_tmp` can decorate a method or function.
	zpg_tmp_{0}_{1}Nr   >	   ÚdbÚdoÚprocÚxactÚnewdbÚprepareÚsqlexecÚsettingsÚ	connectorc                 óz   — t          ¦   «         | _        d| _        | j        j        dz   x| j        _        | _        d S )Nr   r   )r   Úbuiltins_stackÚ
sandbox_idÚ	__class__Ú
_local_id_Úlocal_id)Úselfs    úI/granary/edev/quantum/lib/python3.11/site-packages/postgresql/temporal.pyÚ__init__zTemporal.__init__1   s4   € Ý™œ€$ÔØ€$„/à/3¬~Ô/HÈ1Ñ/LÐM€$„.Ô˜dœm˜m˜mó    c                 óJ   ‡ ‡— ˆˆ fd„}t          ‰dd ¦  «        }|r||_        |S )Nc                  óL   •— ‰5   ‰| i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S ©N© )ÚargsÚkwÚcallabler   s     €€r   Úin_pg_temporal_contextz1Temporal.__call__.<locals>.in_pg_temporal_context8   s   ø€ Øð !ð !Øˆ8�TÐ ˜RÐ Ð ð!ð !ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð !ð !s   „™ Ú__name__)Úgetattrr&   )r   r$   r%   Úns   ``  r   Ú__call__zTemporal.__call__7   sL   øø€ ð!ð !ð !ð !ð !ð !õ ˆh˜
 DÑ)Ô)€!Øð 'Ø%&ÐÔ"Ø	Ðr   c                 ó  — t          j        ¦   «         | j        k    rà	 |                     dd¬¦  «        }|5  |j        d d…         dk    r|j                             ¦   «          n|j                             ¦   «          d d d ¦  «         n# 1 swxY w Y   n# t          $ r Y nw xY w| j	        }d | _	        d | _        |�B| 
                    ¦   «          |                     d¬¦  «         |                     ¦   «          d S d S d S )NÚtestÚ	template1©ÚuserÚdatabaseé   )é	   r   é   )Útimeout)ÚosÚgetpidÚ
_init_pid_Ú
connectionÚversion_infoÚsysÚterminate_backendsÚterminate_backends_92Ú	ExceptionÚclusterÚstopÚwait_until_stoppedÚdrop)r   r=   Úcs      r   ÚdestroyzTemporal.destroy@   sS  € å„Y�[„[�D”OÒ#Ð#ð		Ø×Ò &°[ÐÑBÔB€AØ	
ð $ð $Ø	Œ�r˜�rÔ˜eÒ#Ð#Ø„e×ÒÑ Ô Ð Ð à„e×!Ò!Ñ#Ô#Ð#ð	$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $øøõ
 ð 	ð 	ð 	à€Dð	øøøð Œ\€7Ø€4„<Ø€4„?ØÐØ‡L‚L�N„N€NØ×Ò¨ÐÑ+Ô+Ð+Ø‡L‚L�N„N€N€N€Nð% $Ð#ð Ðs5   žB ·AB
Á>B Â
BÂB ÂBÂB Â
B#Â"B#ÚhintzKTry setting the PGINSTALLATION environment variable to the `pg_config` pathc                 ó&  — | j         �d S t          j        ¦   «         | _        t	          j        | j        ¦  «         t          j                             t          j	         
                    dt          j        ¦   «         ¦  «        |                      | j        | j        ¦  «        ¦  «        | _        t          j                             | j        d¦  «        | _         |¦   «         }|€t!          d|¬¦  «        ‚t#          || j        ¦  «        }|                     ¦   «         r|                     ¦   «          d|_        |                     d|j        d ¬¦  «         t-          ¦   «         | _        | j        €t!          d|¬	¦  «        ‚|j                             t5          t7          | j        ¦  «        d
dddd|j        ¬¦  «        ¦  «         |j                             t5          d¬¦  «        ¦  «         t;          | j        d¦  «        5 }|                     |¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                     ¦   «          |                      dd¬¦  «        }|5  | !                    d¦  «         d d d ¦  «         n# 1 swxY w Y   || _         d S )NÚHOMEÚlogfilez$could not find the default pg_config)Údetailszutf-8r+   )r.   ÚencodingrF   z7could not find a port for the test cluster on localhost)ÚcreatorÚ20Ú200Ú	localhostÚstderrÚFATAL)ÚportÚmax_connectionsÚshared_buffersÚlisten_addressesÚlog_destinationÚlog_min_messagesÚunix_socket_directoryÚ10)Úmax_prepared_transactionsÚw)rF   r,   r-   zcreate database test)"r=   r4   r5   r6   ÚatexitÚregisterrB   ÚpathÚjoinÚenvironÚgetÚgetcwdÚcluster_dirnamer   Úcluster_pathrF   r   r   Úinitializedr@   rH   Úinitr   Úcluster_portr   ÚupdateÚdictÚstrÚdata_directoryÚopenÚstartÚwait_until_startedr7   Úexecute)r   Úinstallation_factoryÚinshintr   r=   ÚlforA   s          r   rc   zTemporal.initV   s  € ð 
„\ÐØ	€6õ ”I‘K”K€$„/Ý„/�$”,ÑÔÐõ ”g—l’lÝ„:‡>‚>�&�"œ)™+œ+Ñ&Ô&Ø×Ò˜œ¨¬Ñ7Ô7ñô €$Ôõ ”—’˜dÔ/°Ñ;Ô;€$„,Ø%Ð%Ñ'Ô'€,ØÐÝ	Ø*°gð
ñ 
ô 
ð õ �L $Ô"3Ñ5Ô5€'ð ×ÒÑÔð Ø
‡<‚<�>„>€>Ø€'ÔØ	‡,‚,Ø
ØÔØð ñ ô ð õ *Ñ+Ô+€$ÔØ	ÔÐÝ	Ø=Øð
ñ 
ô 
ð ð
 
Ô×Ò�$Ý
ˆdÔÑ
 Ô
 ØØØ!ØØØ"Ô1ðñ ô ñ ô ð ð 
Ô×Ò�$Ø#ðñ ô ñ ô ð õ
 ˆDŒL˜#ÑÔð   #Ø
‡=‚=˜3€=ÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  à	×ÒÑÔÐð ×Ò °;ÐÑ@Ô@€!Øð %ð %Ø‡9‚9Ð#Ñ$Ô$Ð$ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð €$„,€,€,s$   ÈH%È%H)È,H)ÉI?É?JÊJc           
      óø  — | j                              d¬¦  «        }|                     ¦   «          g }||dt          | j        dz   ¦  «        z   fd„}||j        |j        |j        |j        |j	        |j
        |j        |dœ	}| j        s-d„ | j        D ¦   «         }| j                             |g f¦  «         | j                             ||f¦  «         t                               |¦  «         | xj        dz  c_        d S )Nr+   ©r.   Úsandboxr   c                 óÈ   — |                       |                     ¦   «         ¦  «         t          |¦  «        dz   | d         j        d         z   | d         j        d<   | d         S )Nú,éÿÿÿÿÚsearch_path)ÚappendÚclonerg   r   )ÚlrA   Úsbids      r   Únew_pg_tmp_connectionz,Temporal.push.<locals>.new_pg_tmp_connection£   sQ   € ð ‡8‚8ˆA�GŠG‰IŒIÑÔÐÝ#& t¡9¤9¨s¡?°Q°r´U´^ÀMÔ5RÑ#R€1€R„5„>�-Ñ Ø
ˆBŒ%€<r   )	r   r   r   r   r   r   r   r   Únewc                 ó<   — i | ]}|t           v ¯|t           |         “ŒS r!   )Ú__builtins__)Ú.0Úks     r   ú
<dictcomp>z!Temporal.push.<locals>.<dictcomp>¸   s3   € ð ð ð ØØ�LÐÐð ��QŒØÐÐr   )r=   r7   Úconnectrg   r   r   r   rl   r   r   r   r   r   Úbuiltins_keysrw   r~   re   )r   rA   Úextrasr{   ÚbuiltinsÚcurrents         r   ÚpushzTemporal.pushž   s$  € Ø
„l×Ò VÐÑ,Ô,€!Ø‡)‚)�+„+€+Ø€&à &¨A°iÅ#ÀdÄoÐXYÑFYÑBZÔBZÑ6Zð ð ð ð ð ØŒyØŒFØŒyØ
Œ$Ø”
ØŒFØ”Ø ð
ð 
€(ð 
Ô	ð -ðð Ø!%Ô!3ðñ ô €7ð Ô×Ò˜w¨˜mÑ,Ô,Ð,ð Ô×Ò˜h¨Ð/Ñ0Ô0Ð0Ý×Ò�hÑÔÐØ€/„/�QÑ€/„/€/€/r   zDROP SCHEMA sandbox{0} CASCADEc                 ó  — | j                              ¦   «         \  }}| xj        dz  c_        t          | j         ¦  «        dk    r,t                               | j         d         d         ¦  «         nS| j                              ¦   «         }| j        D ]2}||v r||         t          |<   Œt                               |d ¦  «         Œ3|�t          |t          ¦  «        r«|d         gt          |¦  «        z   D ]3}|j        du r|                     ¦   «          |                     ¦   «          Œ4| j                             d¬¦  «        }|5  |                      || j        dz   ¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S d S )Nr   ru   r   r   Fr+   rq   )r   Úpopr   Úlenr~   re   Úpopleftrƒ   Ú
isinstancer<   ÚlistÚclosedÚ	interruptÚcloser=   r7   rl   )	r   ÚexcÚdrop_schemar…   r„   ÚpreviousÚxÚxdbrA   s	            r   r‰   zTemporal.popÃ   sÑ  € ØÔ(×,Ò,Ñ.Ô.Ñ€(ˆFØ€/„/�QÑ€/„/õ 	ˆÔ	ÑÔ Ò!Ð!Ý×Ò�tÔ*¨2Ô.¨qÔ1Ñ2Ô2Ð2Ð2àÔ!×)Ò)Ñ+Ô+€8ØÔð ð €qØˆH€}€}Ø ”{…\�!�_€_õ ×Ò�a˜ÑÔÐÐð 	€[•J˜s¥IÑ.Ô.€[à˜Œ~Ð¥ f¡¤Ñ-ð ð €sØ
„z�UÐÐð 	‡]‚]�_„_€_Ø‡I‚I�K„K€K€Kð „|×Ò fÐÑ-Ô-€1Ø	ð .ð .ð ‡I‚Iˆkˆk˜$œ/¨!Ñ+Ñ,Ô,Ñ-Ô-Ð-ð	.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð .ð .ð €4s   Å'E9Å9E=Æ E=c                 óº  — | j         €|                      ¦   «          |                      ¦   «          	 t                               ¦   «          t                               dt          | j        ¦  «        z   ¦  «         dt          | j        ¦  «        z   dz   t          j        d         z   t          j        d<   d S # t          $ r}|  
                    |¦  «         ‚ d }~ww xY w)NzCREATE SCHEMA sandboxrr   rt   rv   )r=   rc   r‡   r   r‚   rl   rg   r   r   r<   r‰   )r   Úes     r   Ú	__enter__zTemporal.__enter__ë   s¼   € Ø	„\ÐØ‡9‚9�;„;€;Ø‡)‚)�+„+€+ð	Ý‡:‚:�<„<€<Ý‡:‚:Ð%­¨D¬OÑ(<Ô(<Ñ<Ñ=Ô=Ð=Ø )­C°´Ñ,@Ô,@Ñ @À3Ñ FÍÌÐUbÔIcÑ c…2„;ˆ}ÑÐÐøÝ	ð 	ð 	ð 	à‡8‚8ˆA�;„;€;Øøøøøð	øøøs   ±BB5 Â5
CÂ?CÃCc                 óB   — | j         �|                      |¦  «         d S d S r    )r=   r‰   )r   r‘   ÚvalÚtbs       r   Ú__exit__zTemporal.__exit__ø   s%   € Ø	„\ÐØ‡8‚8ˆC�=„=€=€=€=ð Ðr   )r&   Ú
__module__Ú__qualname__Ú__doc__Úformatr`   r=   r6   r   rƒ   r   r)   rB   r   Údefaultrc   r‡   r‰   r˜   rœ   r!   r   r   r
   r
      sò   € € € € € ðð ð" $Ô*€Ø€à€Ø€ð
ð 
ð 
€ðNð Nð Nð ð  ð  ðð ð ð. &Ô-à	ð 2ððFð Fð Fð FðP#ð #ð #ðJ #CÔ"Ið &ð &ð &ð &ðP	ð 	ð 	ðð ð ð ð r   r
   )rŸ   r4   rY   Úcollectionsr   r=   r   r   Ú r   Úpython.socketr   Úobjectr
   Úpg_tmpr!   r   r   ú<module>r§      sµ   ððð ð 
€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .ðlð lð lð lð lˆvñ lô lð lð^ 
ˆ‰Œ€€€r   