
    i-                    j   U d Z ddlm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 ddl
mZ dd	lmZmZmZmZ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rddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ dZ%de&d<   dZ'de&d<   dZ(de&d<   ejR                  jT                  Z*ejT                  Z+ G d de      Z,y)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)TYPE_CHECKINGAnyDefaultDictSequence)defaultdict   )abc)errors)pq)AdaptContextBufferLoadFuncNoneTypePyFormat)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                  N   e Zd ZU dZdZdj	                         Zded<   ded<   ded	<   d
ed<   ded<   d#d$dZed%d       Z	e
d&d       Ze
d'd       Ze
d(d       Ze
d)d       Zddd	 	 	 	 	 	 	 d*dZd+dZd+dZ	 	 	 	 	 	 d,dZd-dZd.dZd/dZd0dZd1dZd2d Zd3d!Zd4d"Zy)5TransformeraJ  
    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                <   d x| _         x| _        | _        |r#|j                  | _        |j
                  | _        nddlm} |j                  | _        d | _        |  t        t              | _        |  d | _        i i f| _        d | _        g | _        i | _        d| _        y )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      w/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/psycopg/_py_transformer.py__init__zTransformer.__init__B   s    5999dl $--DN ++DJ"%..DNDJ 	#D) 	  ;=b59 -/ -/    c                6    t        |t              r|S  | |      S )z
        Return a Transformer from an AdaptContext.

        If the context is a Transformer instance, just return it.
        )
isinstancer    )clsr7   s     r8   from_contextzTransformer.from_contextf   s     g{+Nw<r:   c                    | j                   S N)r-   r6   s    r8   r,   zTransformer.connectionr   s    zzr:   c                f    | j                   st        | j                        | _         | j                   S r@   )r5   r   r,   rA   s    r8   encodingzTransformer.encodingv   s#    ~~*4??;DN~~r:   c                    | j                   S r@   )r#   rA   s    r8   r+   zTransformer.adapters|       ~~r:   c                    | j                   S r@   )r%   rA   s    r8   pgresultzTransformer.pgresult   rE   r:   T)set_loadersformatc               j   || _         |sdx| _        | _        |rg | _        y |j                  | _        |j
                  x}| _        |sy |sg | _        y ||j                  d      n|}t        |      D cg c]-  }| j                  |j                  |      |      j                  / c}| _        y c c}w )Nr   )r%   _nfields_ntuplesr3   ntuplesnfieldsfformatrange
get_loaderftypeload)r6   resultrH   rI   nffmtis          r8   set_pgresultzTransformer.set_pgresult   s      ,--DMDM$&!#^^+T] "D $*>fnnQv@Eb	
;<DOOFLLOS166
 
s   52B0c                    |D cg c]  }| j                  ||       c}| _        t        |      | _        |gt	        |      z  | _        y c c}w r@   )get_dumper_by_oidr2   tupler!   lenr"   r6   r!   rI   oids       r8   set_dumper_typeszTransformer.set_dumper_types   sE    LQRST33C@R5\
x#e*, Ss   Ac                l    |D cg c]  }| j                  ||      j                    c}| _        y c c}w r@   )rQ   rS   r3   r]   s       r8   set_loader_typeszTransformer.set_loader_types   s)    JOP3T__S&9>>PPs   #1c                   t        |      }d g|z  }| j                  r;t        |      D ]+  }||   x}| j                  |   j                  |      ||<   - |S | j	                         g|z  }t
        g|z  }t        |      D ]Q  }||   x}| j                  |||         }	|	j                  |      ||<   |	j                  ||<   |	j                  ||<   S t        |      | _
        || _        |S r@   )r\   r2   rP   dump_get_none_oidTEXT
get_dumperr^   rI   r[   r!   r"   )
r6   paramsr"   nparamsoutrW   paramr!   	pqformatsdumpers
             r8   dump_sequencezTransformer.dump_sequence   s    f+$(6G#3
 7^ >#AY&E3!..q166u=CF> J##%&0FW$	w 	)A"+__UGAJ7F[['CFzzE!H!==IaL	) 5\
 
r:   c                V   | j                  |t              }|j                  |      }|j                  }|r,|r*|d   dk(  r"|t        k7  r	 | j
                  |   }|rd||fz  }t        |t               st!        |      }|S # t        $ r | j                  j                  j                  |      x}re|dk  r&|j                  j                  | j                        }n%|j                  j                  | j                        }||j                  k(  r|dz  }nd}|| j
                  |<   Y w xY w)N'   i    s   []r:   s   %s::%s)rf   PY_TEXTquoter^   r   r4   KeyErrorr+   r!   getnameencoderC   regtype	array_oidr<   bytes)r6   objrl   rvr^   type_sqltis          r8   
as_literalzTransformer.as_literal   s   g.\\# jj2"R&G+x0??3/ "h/"e$rB	%  0,,005525Tz#%77>>$--#@#%::#4#4T]]#Cbll* E)"H'/$0s   
A? ?B&D('D(c                   t        |      }| j                  |   }	 ||   }|j                  ||      x}|u r|S 	 ||   S # t        $ rM 	 | j                  j	                  ||      } |||       x||<   }n# t
        j                  $ r}|dd}~ww xY wY sw xY w# t        $ r |j                  ||      x}||<   |cY S w xY w)z:
        Return a Dumper instance to dump `!obj`.
        N)	typer/   rs   r+   rf   eProgrammingErrorget_keyupgrade)	r6   rz   rI   keycacherl   dclsexkey1s	            r8   rf   zTransformer.get_dumper   s    
 3i f%
	63ZF NN3//DC7M	;!  	66}}//V< '+3o5c
V %% #d"# $	6"  	#)>>#v#>>FU4[M	sD   ? B 	B	A4%B4BB

BBB"B=<B=c                    	 | j                   S # t        $ r Y nw xY w	 | j                  j                  t        t
              j                  x}| _         |S # t        $ r t        j                  d      w xY w)NzNone dumper not found)
r'   AttributeErrorr#   rf   r   rq   r^   rs   r   InterfaceError)r6   r{   s     r8   rd   zTransformer._get_none_oid  su    	>>! 			<"&..";";Hg"N"R"RRB 	  	<""#:;;	<s    	5A A4c                    | j                   s	i i f| _         | j                   |   }	 ||   S # t        $ r2 | j                  j                  ||      } |t        |       x||<   }Y |S w xY w)zO
        Return a Dumper to dump an object to the type with given oid.
        )r0   rs   r+   rZ   r   )r6   r^   rI   r   r   rl   s         r8   rZ   zTransformer.get_dumper_by_oid  s{       !#RD !!&)	7: 	7 ==223?D"&x"66E#J	7s   + 7A&%A&c                   | j                   x}st        j                  d      d|cxk  r| j                  k  rn nd|cxk  r| j                  k  s$n t        j                  d| j                         g }t	        ||      D ]p  }d g| j
                  z  }t	        | j
                        D ]/  }|j                  ||      x}	 | j                  |   |	      ||<   1 |j                   ||             r |S )Nresult not setr   z$rows must be included between 0 and )	r%   r   r   rL   rP   rK   	get_valuer3   append)
r6   row0row1make_rowresrecordsrowrecordcolvals
             r8   	load_rowszTransformer.load_rows(  s    ~~%%""#344T*T]]*qD/IDMM/I""6t}}oF  t$ 	-C!% 6FT]]+ >==c22C?"8$"3"3C"8"=F3K> NN8F+,	- r:   c                x   | j                   x}st        j                  d      d|cxk  r| j                  k  s$n t        j                  d| j                         d g| j                  z  }t        | j                        D ]/  }|j                  ||      x} | j                  |   |      ||<   1  ||      S )Nr   r   z#row must be included between 0 and )r%   r   r   rL   rK   rP   r   r3   )r6   r   r   r   r   r   r   s          r8   load_rowzTransformer.load_row;  s    ~~%%""#344C(4==(""5dmm_E  "FT]]2' 	:C}}S#..;4d//4S9s	: r:   c                     t         j                        t        |      k7  r8t        j                  dt        |       dt         j                         d      t	         fdt        |      D              S )Nzcannot load sequence of z items: z loaders registeredc              3  V   K   | ]   \  }}| j                   |   |      nd  " y wr@   )r3   ).0rW   r   r6   s      r8   	<genexpr>z,Transformer.load_sequence.<locals>.<genexpr>R  s9      
3 +./!Tq!#&tC
s   &))r\   r3   r   r   r[   	enumerate)r6   r   s   ` r8   load_sequencezTransformer.load_sequenceK  sx    t  !S[0$$*3v;- 8))*++>@ 
  
#F+
 
 	
r:   c                *   	 | j                   |   |   S # t        $ r Y nw xY w| j                  j                  ||      x}s7| j                  j                  t        |      x}st        j                  d       |||       x}| j                   |   |<   |S )Nzunknown oid loader not found)r1   rs   r#   rQ   r   r   r   )r6   r^   rI   
loader_clsloaders        r8   rQ   zTransformer.get_loaderW  s    	==(-- 		 #nn77VDD
D"&..";";K"PPJP&&'EFF.8d.CCv&s+s    	  r@   )r7   AdaptContext | None)r7   r   returnr    )r   zBaseConnection[Any] | None)r   str)r   r   )r   r$   )rT   r$   rH   boolrI   zpq.Format | Noner   None)r!   zSequence[int]rI   	pq.Formatr   r   )rg   zSequence[Any]r"   zSequence[PyFormat]r   Sequence[Buffer | None])rz   r   r   ry   )rz   r   rI   r   r   
abc.Dumper)r   r&   )r^   r&   rI   r   r   r   )r   r&   r   r&   r   RowMaker[Row]r   z	list[Row])r   r&   r   r   r   r   )r   r   r   ztuple[Any, ...])r^   r&   rI   r   r   z
abc.Loader)__name__
__module____qualname____doc__split	__slots____annotations__r9   classmethodr>   propertyr,   rC   r+   rG   rX   r_   ra   rm   r~   rf   rd   rZ   r   r   r   rQ    r:   r8   r    r    (   s.    !J EG	  "!##N"H 	  	     
     !#'

 	

 !
 

>-
Q#.@	 ><@&&  


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   Formatre   rq   r    r   r:   r8   <module>r      s    # < < #    C C  (  %" 06Y 63	 30Y 0	yy~~
--y, yr:   