
    gi|.                    T   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j)        j*        Z*ej*        Z+ G d de          Z,dS )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                  \   e Zd ZU dZdZd                                Zded<   ded<   ded	<   d
ed<   ded<   dDdEdZedFd            Z	e
dGd            Ze
dHd            Ze
dId            Ze
dJd            ZddddKd"ZdLd%ZdLd&ZdMd+ZdNd/ZdOd2ZdPd3ZdQd5ZdRd;ZdSd>ZdTdAZdUdCZdS )V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_oidNcontextAdaptContext | Nonec                *   d x| _         x| _        | _        |r|j        | _        |j        | _        nddlm} |j        | _        d | _        |  t          t                    | _        |  d | _        i i f| _        d | _        g | _        i | _        d| _        d S )Nr	   )postgres )r%   r!   r"   adaptersr#   
connection_connr,   r+   r   dict_dumpers_oid_dumpers_loaders_row_dumpers_row_loaders
_oid_types	_encoding)selfr(   r+   s      g/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/psycopg/_py_transformer.py__init__zTransformer.__init__B   s    5999dl  	$-DN +DJJ""""""%.DNDJ 	9#D)) 	G  ;=b59 -/ -/    returnc                F    t          |t                    r|S  | |          S )z
        Return a Transformer from an AdaptContext.

        If the context is a Transformer instance, just return it.
        )
isinstancer    )clsr(   s     r9   from_contextzTransformer.from_contextf   s)     g{++ 	 N3w<<r;   BaseConnection[Any] | Nonec                    | j         S N)r/   r8   s    r9   r.   zTransformer.connectionr   s
    zr;   strc                P    | j         st          | j                  | _         | j         S rC   )r7   r   r.   rD   s    r9   encodingzTransformer.encodingv   s%    ~ 	<*4?;;DN~r;   c                    | j         S rC   )r#   rD   s    r9   r-   zTransformer.adapters|   
    ~r;   c                    | j         S rC   )r%   rD   s    r9   pgresultzTransformer.pgresult   rI   r;   T)set_loadersformatresultrL   boolrM   pq.Format | NoneNonec                    _         sdx _         _        |rg  _        d S j         _        j        x} _        |sd S |s	g  _        d S |                    d          n| fdt          |          D              _        d S )Nr   c                l    g | ]0}                                         |                    j        1S  )
get_loaderftypeload).0ifmtrN   r8   s     r9   
<listcomp>z,Transformer.set_pgresult.<locals>.<listcomp>   sA     
 
 
;<DOOFLLOOS116
 
 
r;   )r%   _nfields_ntuplesr5   ntuplesnfieldsfformatrange)r8   rN   rL   rM   nfrZ   s   ``   @r9   set_pgresultzTransformer.set_pgresult   s       	,--DMDM '$&!F#^+T] 	F 	 "DF $*>fnnQv
 
 
 
 
 
@Eb		
 
 
r;   Sequence[int]	pq.Formatc                      fd|D              _         t          |           _        gt          |          z   _        d S )Nc                <    g | ]}                     |          S rT   )get_dumper_by_oidrX   oidrM   r8   s     r9   r[   z0Transformer.set_dumper_types.<locals>.<listcomp>   s)    RRRST33C@@RRRr;   )r4   tupler!   lenr"   r8   r!   rM   s   ` `r9   set_dumper_typeszTransformer.set_dumper_types   sH    RRRRRERRR5\\
x#e**,r;   c                2      fd|D              _         d S )Nc                F    g | ]}                     |          j        S rT   )rU   rW   ri   s     r9   r[   z0Transformer.set_loader_types.<locals>.<listcomp>   s*    PPP3T__S&99>PPPr;   r5   rm   s   ` `r9   set_loader_typeszTransformer.set_loader_types   s)    PPPPP%PPPr;   paramsSequence[Any]Sequence[PyFormat]Sequence[Buffer | None]c                   t          |          }d g|z  }| j        rt          | j                  |k    r,t          j        dt          | j                   d|           t	          |          D ]/}||         x}#| j        |                             |          ||<   0|S |                                 g|z  }t          g|z  }t	          |          D ]U}||         x}|                     |||                   }	|	                    |          ||<   |	j	        ||<   |	j
        ||<   Vt          |          | _        || _        |S )Nz	expected z values in row, got )rl   r4   e	DataErrorra   dump_get_none_oidTEXT
get_dumperrj   rM   rk   r!   r"   )
r8   rs   r"   nparamsoutrY   paramr!   	pqformatsdumpers
             r9   dump_sequencezTransformer.dump_sequence   sd    f++$(6G#3
  	4$%%00kUD$5 6 6UUGUU   7^^ > >#AY&E3!.q166u==CFJ##%%&0FW$	w 	) 	)A"+__UGAJ77F[[''CFzE!H!=IaLL5\\
 
r;   objr   bytesc                H   |                      |t                    }|                    |          }|j        }|r|r|d         dk    r|t          k    r	 | j        |         }n# t          $ r | j        j        	                    |          x}rV|dk     r |j
                            | j                  }n|j                            | j                  }||j        k    r|dz  }nd}|| j        |<   Y nw xY w|rd||fz  }t          |t                     st!          |          }|S )N'   i    s   []r;   s   %s::%s)r}   PY_TEXTquoterj   r   r6   KeyErrorr-   r!   getnameencoderG   regtype	array_oidr>   r   )r8   r   r   rvrj   type_sqltis          r9   
as_literalzTransformer.as_literal   sB   g..\\# j 	02 	0"R&G++x0?3/ 0 0 0,005552 	#Tzz#%7>>$-#@#@#%:#4#4T]#C#Cbl** E)"H'/$$$0  0"h/"e$$ 	rB	s   A" "BC21C2r   
abc.Dumperc                   t          |          }| j        |         }	 ||         }nX# t          $ rK 	 | j                            ||          } |||           x||<   }n# t
          j        $ r}|dd}~ww xY wY nw xY w|                    ||          x}|u r|S 	 ||         S # t          $ r  |                    ||          x}||<   |cY S w xY w)z:
        Return a Dumper instance to dump `!obj`.
        N)	typer1   r   r-   r}   rx   ProgrammingErrorget_keyupgrade)	r8   r   rM   keycacher   dclsexkey1s	            r9   r}   zTransformer.get_dumper   s'   
 3ii f%
	63ZFF 	6 	6 	66}//V<< '+d3oo5c
VV % # # #d"# $V	6 NN3///DC77M	; 	 	 	#)>>#v#>#>>FU4[MMM	sD   ' 
A<AA<A6.A11A66A<;A<B$ $'CCc                    	 | j         S # t          $ r Y nw xY w	 | j                            t          t
                    j        x}| _         n"# t          $ r t          j	        d          w xY w|S )NzNone dumper not found)
r'   AttributeErrorr#   r}   r   r   rj   r   rx   InterfaceError)r8   r   s     r9   r{   zTransformer._get_none_oid  s    	>! 	 	 	D		<"&.";";Hg"N"N"RRB 	< 	< 	<"#:;;;	< 	s   	 
1A A+rj   c                    | j         s	i i f| _         | j         |         }	 ||         S # t          $ r4 | j                            ||          } |t          |           x||<   }Y nw xY w|S )zO
        Return a Dumper to dump an object to the type with given oid.
        )r2   r   r-   rh   r   )r8   rj   rM   r   r   r   s         r9   rh   zTransformer.get_dumper_by_oid  s       	)!#RD !&)	7: 	7 	7 	7 =223??D"&$x"6"66E#J		7 s   ' ;A%$A%row0row1make_rowRowMaker[Row]	list[Row]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 ]s}d g| j        z  }t	          | j                  D ]3}|                    ||          x}	 | j        |         |	          ||<   4|                     ||                     t|S )Nresult not setr   z$rows must be included between 0 and )	r%   rx   r   r]   ra   r\   	get_valuer5   append)
r8   r   r   r   resrecordsrowrecordcolvals
             r9   	load_rowszTransformer.load_rows,  s)   ~% 	5"#3444T****T]*****qD/I/I/I/IDM/I/I/I/I"Ft}FF   t$$ 	- 	-C!% 6FT]++ > >==c222C?"8$"3C"8"="=F3KNN88F++,,,,r;   r   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 ]3}|                    ||          x} | j        |         |          ||<   4 ||          S )Nr   r   z#row must be included between 0 and )r%   rx   r   r]   r\   ra   r   r5   )r8   r   r   r   r   r   r   s          r9   load_rowzTransformer.load_row?  s    ~% 	5"#3444C((((4=(((("EdmEE   "FT]2'' 	: 	:C}}S#...;4d/4S99sxr;   r   tuple[Any, ...]c                    t           j                  t          |          k    r:t          j        dt          |           dt           j                   d          t	           fdt          |          D                       S )Nzcannot load sequence of z items: z loaders registeredc              3  R   K   | ]!\  }}| j         |         |          nd V  "d S rC   rq   )rX   rY   r   r8   s      r9   	<genexpr>z,Transformer.load_sequence.<locals>.<genexpr>V  sW       
 
3 +./!Tq!#&&&t
 
 
 
 
 
r;   )rl   r5   rx   r   rk   	enumerate)r8   r   s   ` r9   load_sequencezTransformer.load_sequenceO  s    t !!S[[00$@3v;; @ @)**@ @ @  
  
 
 
 
#F++
 
 
 
 
 	
r;   
abc.Loaderc                ,   	 | j         |         |         S # t          $ r Y nw xY w| j                            ||          x}s6| j                            t          |          x}st          j        d           |||           x}| j         |         |<   |S )Nzunknown oid loader not found)r3   r   r#   rU   r   rx   r   )r8   rj   rM   
loader_clsloaders        r9   rU   zTransformer.get_loader[  s    	=(-- 	 	 	D	 #n77VDDD
 	G"&.";";K"P"PPJ G&'EFFF.8jd.C.CCv&s+s    
""rC   )r(   r)   )r(   r)   r<   r    )r<   rA   )r<   rE   )r<   r   )r<   r$   )rN   r$   rL   rO   rM   rP   r<   rQ   )r!   rd   rM   re   r<   rQ   )rs   rt   r"   ru   r<   rv   )r   r   r<   r   )r   r   rM   r   r<   r   )r<   r&   )rj   r&   rM   re   r<   r   )r   r&   r   r&   r   r   r<   r   )r   r&   r   r   r<   r   )r   rv   r<   r   )rj   r&   rM   re   r<   r   )__name__
__module____qualname____doc__split	__slots____annotations__r:   classmethodr@   propertyr.   rG   r-   rK   rc   rn   rr   r   r   r}   r{   rh   r   r   r   rU   rT   r;   r9   r    r    (   s9          !J EGG	  "!!!####NNN" " " " "H 	  	  	  [	     X    X
    X    X !#'
 
 
 
 
 
>- - - -
Q Q Q Q! ! ! !F   <   @      &   &        

 

 

 


 
 
 
 
 
r;   r    N)-r   
__future__r   typingr   r   r   r   collectionsr   r,   r
   r   rx   r   r   r   r   r   r   rowsr   r   _oidsr   r   _compatr   
_encodingsr   r   adaptr   pq.abcr   _connection_baser   r   r   r   r   Formatr|   r   r    rT   r;   r9   <module>r      s     # " " " " " < < < < < < < < < < < < # # # # # #                   C C C C C C C C C C C C C C         ( ( ( ( ( ( ( (       % % % % % % 1""""""      0000006 6 6 6 63 3 3 3 30 0 0 0 0	y~
-} } } } }, } } } } }r;   