
    (ph-                    t   % S r SSKJr  SSKJrJrJrJr  SSKJ	r	  SSK
Jr  SSK
Jr  SSK
Jr  SS	KJrJrJrJrJr  SS
KJrJr  SSKJrJr  SSKJr  SSKJr  \(       a  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$  Sr%S\&S'   Sr'S\&S'   Sr(S\&S'   \RR                  RT                  r*\RT                  r+ " S S\5      r,g)a7  
Helper object to transform values between Python and PostgreSQL

Python implementation of the object. Use the `_transformer module to import
the right implementation (Python or C). The public place where the object
is exported is `psycopg.adapt` (which we may not use to avoid circular
dependencies problems).
    )annotations)AnySequenceDefaultDictTYPE_CHECKING)defaultdict   )pq)abc)errors)BufferLoadFuncAdaptContextPyFormatNoneType)RowRowMaker)INVALID_OIDTEXT_OID)	TypeAlias)conn_encoding)	DumperKey)AdaptersMap)PGresult)BaseConnectionzdict[DumperKey, abc.Dumper]r   DumperCachezdict[int, abc.Dumper]OidDumperCachezdict[int, abc.Loader]LoaderCachec                  ~   \ rS rSr% SrSrSR                  5       rS\S'   S\S'   S	\S
'   S\S'   S\S'   S%S&S jjr\	S'S j5       r
\S(S j5       r\S)S j5       r\S*S j5       r\S+S j5       rSSS.       S,S jjrS-S jrS-S jr      S.S jrS/S jrS0S jrS1S jrS2S jrS3S  jrS4S! jrS5S" jrS6S# jrS$rg)7Transformer(   a2  
An object that can adapt efficiently between Python and PostgreSQL.

The life cycle of the object is the query, so it is assumed that attributes
such as the server version or the connection encoding will not change. The
object have its state so adapting several values of the same type can be
optimised.

zpsycopg.adaptz
        types formats
        _conn _adapters _pgresult _dumpers _loaders _encoding _none_oid
        _oid_dumpers _oid_types _row_dumpers _row_loaders
        ztuple[int, ...] | Nonetypeszlist[pq.Format] | Noneformatsr   	_adaptersPGresult | None	_pgresultint	_none_oidNc                F   S =U l         =U l        U l        U(       a#  UR                  U l        UR
                  U l        OSSKJn  UR                  U l        S U l        U   [        [        5      U l        U   S U l        0 0 4U l        S U l        / U l        0 U l        SU l        g )Nr	   )postgres )r&   r"   r#   adaptersr$   
connection_connr+   r*   r   dict_dumpers_oid_dumpers_loaders_row_dumpers_row_loaders
_oid_types	_encoding)selfcontextr*   s      J/var/www/html/venv/lib/python3.13/site-packages/psycopg/_py_transformer.py__init__Transformer.__init__B   s    5999dl $--DN ++DJ"%..DNDJ 	#D) 	  ;=b59 -/ -/    c                @    [        U[        5      (       a  U$ U " U5      $ )zg
Return a Transformer from an AdaptContext.

If the context is a Transformer instance, just return it.
)
isinstancer    )clsr8   s     r9   from_contextTransformer.from_contextf   s      g{++Nw<r<   c                    U R                   $ N)r.   r7   s    r9   r-   Transformer.connectionr   s    zzr<   c                p    U R                   (       d  [        U R                  5      U l         U R                   $ rC   )r6   r   r-   rD   s    r9   encodingTransformer.encodingv   s#    ~~*4??;DN~~r<   c                    U R                   $ rC   )r$   rD   s    r9   r,   Transformer.adapters|       ~~r<   c                    U R                   $ rC   )r&   rD   s    r9   pgresultTransformer.pgresult   rK   r<   T)set_loadersformatc                  Xl         U(       d  S=U l        U l        U(       a  / U l        g UR                  U l        UR
                  =o@l        U(       d  g U(       d  / U l        g Uc  UR                  S5      OUn[        U5       Vs/ s H-  o`R                  UR                  U5      U5      R                  PM/     snU l        g s  snf Nr   )r&   _nfields_ntuplesr4   ntuplesnfieldsfformatrange
get_loaderftypeload)r7   resultrO   rP   nffmtis          r9   set_pgresultTransformer.set_pgresult   s      ,--DMDM$&!#^^+] "D $*>fnnQv@Eb	
@I1OOFLLOS166	
 
s   4Cc                    U Vs/ s H  o0R                  X25      PM     snU l        [        U5      U l        U/[	        U5      -  U l        g s  snf rC   )get_dumper_by_oidr3   tupler"   lenr#   r7   r"   rP   oids       r9   set_dumper_typesTransformer.set_dumper_types   sE    LQRES33C@ER5\
x#e*, Ss   Ac                n    U Vs/ s H  o0R                  X25      R                  PM     snU l        g s  snf rC   )rY   r[   r4   rf   s       r9   set_loader_typesTransformer.set_loader_types   s)    JOP%3__S9>>%PPs   $2c                   [        U5      nS /U-  nU R                  (       a=  [        U5       H,  nX   nUc  M  U R                  U   R                  U5      XE'   M.     U$ U R	                  5       /U-  n[
        /U-  n[        U5       HO  nX   nUc  M  U R                  XbU   5      n	U	R                  U5      XE'   U	R                  Xu'   U	R                  X'   MQ     [        U5      U l
        Xl        U$ rC   )re   r3   rX   dump_get_none_oidTEXT
get_dumperrg   rP   rd   r"   r#   )
r7   paramsr#   nparamsoutr_   paramr"   	pqformatsdumpers
             r9   dump_sequenceTransformer.dump_sequence   s     f+$(6G#3
 7^	$!..q166u=CF $ J##%&0FW$	wAIE}__UAJ7F[['CFzzEH!==IL   5\
 
r<   c                   U R                  U[        5      nUR                  U5      nUR                  nU(       a7  U(       a0  US   S:X  a'  U[        :w  a   U R
                  U   nU(       a  SX54-  n[        U[         5      (       d  [!        U5      nU$ ! [         a    U R                  R                  R                  U5      nU(       af  US:  a&  UR                  R                  U R                  5      nO%UR                  R                  U R                  5      nXFR                  :X  a  US-  nOSnXPR
                  U'    Nf = f)N'   i    s   []r<   s   %s::%s)rq   PY_TEXTquoterg   r   r5   KeyErrorr,   r"   getnameencoderG   regtype	array_oidr>   bytes)r7   objrw   rvrg   type_sqltis          r9   
as_literalTransformer.as_literal   s	   g.\\# jj2"R&G+x0??3/ "/"e$$rB	'  0]]((,,S1Tz#%77>>$--#@#%::#4#4T]]#Cll* E)"H'/$0s   B B,EEc                t   [        U5      nU R                  U   n XC   nUR                  X5      nXL a  U$  XH   $ ! [         aJ     U R                  R	                  X25      nU" X05      =XC'   n NP! [
        R                   a  nUSeSnAff = ff = f! [         a    UR                  X5      =oTU'   Us $ f = f)z*
Return a Dumper instance to dump `!obj`.
N)	typer0   r   r,   rq   eProgrammingErrorget_keyupgrade)	r7   r   rP   keycacherw   dclsexkey1s	            r9   rq   Transformer.get_dumper   s    
 3i f%
	6ZF ~~c*;M	;#  	66}}//< '+3o5
V %% #d"#	6$  	#)>>##>>F4[M	s>   < B 
BA0"B0BBBB!B76B7c                     U R                   $ ! [         a     Of = f U R                  R                  [        [
        5      R                  =ol         U$ ! [         a    [        R                  " S5      ef = f)NzNone dumper not found)
r(   AttributeErrorr$   rq   r   r}   rg   r   r   InterfaceError)r7   r   s     r9   ro   Transformer._get_none_oid  ss    	>>! 			<"&..";";Hg"N"R"RRB 	  	<""#:;;	<s    
4A !A6c                    U R                   (       d	  0 0 4U l         U R                   U   n X1   $ ! [         a0    U R                  R                  X5      nU" [        U 5      =X1'   n U$ f = f)z?
Return a Dumper to dump an object to the type with given oid.
)r1   r   r,   rc   r   )r7   rg   rP   r   r   rw   s         r9   rc   Transformer.get_dumper_by_oid  su       !#RD !!&)	7: 	7 ==223?D"&x"66EJ	7s   / 6A)(A)c                   U R                   nU(       d  [        R                  " S5      eSUs=::  a  U R                  ::  a  O  OSUs=::  a  U R                  ::  d%  O  [        R                  " SU R                   35      e/ n[	        X5       Hs  nS /U R
                  -  n[	        U R
                  5       H0  nUR                  Xh5      n	U	c  M  U R                  U   " U	5      Xx'   M2     UR                  U" U5      5        Mu     U$ )Nzresult not setr   z$rows must be included between 0 and )	r&   r   r   rT   rX   rS   	get_valuer4   append)
r7   row0row1make_rowresrecordsrowrecordcolvals
             r9   	load_rowsTransformer.load_rows,  s    nn""#344T*T]]*qD/IDMM/I""6t}}oF  $C!% 6FT]]+mmC-?"&"3"3C"8"=FK , NN8F+, % r<   c                "   U R                   nU(       d  g SUs=::  a  U R                  :  d   g   g S /U R                  -  n[        U R                  5       H0  nUR	                  X5      nUc  M  U R
                  U   " U5      XE'   M2     U" U5      $ rR   )r&   rT   rS   rX   r   r4   )r7   r   r   r   r   r   r   s          r9   load_rowTransformer.load_rowA  s    nnC'$--' (!FT]]2'C--)C"//4S9 (
 r<   c                   ^  [        T R                  5      [        U5      :w  a9  [        R                  " S[        U5       S[        T R                  5       S35      e[	        U 4S j[        U5       5       5      $ )Nzcannot load sequence of z items: z loaders registeredc              3  \   >#    U  H!  u  pUb  TR                   U   " U5      OS v   M#     g 7frC   )r4   ).0r_   r   r7   s      r9   	<genexpr>,Transformer.load_sequence.<locals>.<genexpr>X  s3      
+ +./Tq!#&tC+s   ),)re   r4   r   r   rd   	enumerate)r7   r   s   ` r9   load_sequenceTransformer.load_sequenceQ  sx    t  !S[0$$*3v;- 8))*++>@ 
  
#F+
 
 	
r<   c                <    U R                   U   U   $ ! [         a     Of = fU R                  R                  X5      nU(       d=  U R                  R                  [        U5      nU(       d  [
        R                  " S5      eU" X5      =o@R                   U   U'   U$ )Nzunknown oid loader not found)r2   r   r$   rY   r   r   r   )r7   rg   rP   
loader_clsloaders        r9   rY   Transformer.get_loader]  s    	==(-- 		 ^^..s;
22;GJ&&'EFF.8.CCv&s+s    
!!)r$   r.   r0   r6   r2   rS   r(   rT   r1   r5   r&   r3   r4   r#   r"   rC   )r8   AdaptContext | None)r8   r   returnr    )r   zBaseConnection[Any] | None)r   str)r   r   )r   r%   )r\   r%   rO   boolrP   zpq.Format | Noner   None)r"   zSequence[int]rP   	pq.Formatr   r   )rr   zSequence[Any]r#   zSequence[PyFormat]r   Sequence[Buffer | None])r   r   r   r   )r   r   rP   r   r   
abc.Dumper)r   r'   )rg   r'   rP   r   r   r   )r   r'   r   r'   r   RowMaker[Row]r   z	list[Row])r   r'   r   r   r   z
Row | None)r   r   r   ztuple[Any, ...])rg   r'   rP   r   r   z
abc.Loader)__name__
__module____qualname____firstlineno____doc__split	__slots____annotations__r:   classmethodr@   propertyr-   rG   r,   rM   r`   rh   rk   rx   r   rq   ro   rc   r   r   r   rY   __static_attributes__ r<   r9   r    r    (   s/    !J EG	  "!##N"H 	  	     
     !#'

 	

 !
 

>-
Q#.@	 B>B&*  

r<   r    N)-r   
__future__r   typingr   r   r   r   collectionsr   r+   r
   r   r   r   r   r   r   r   r   rowsr   r   _oidsr   r   _compatr   
_encodingsr   r   adaptr   pq.abcr   _connection_baser   r   r   r   r   Formatrp   r}   r    r   r<   r9   <module>r      s    # < < #    C C  (  %" 06Y 63	 30Y 0	yy~~
--A, Ar<   