
    *Jf                     b   U d Z ddlZddlZddl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 erddlmZ dd	lmZ e
j        Zi d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+i d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTZi Zeeef         edU<   e                    dV e                                D                        e                    dW e                                D                        dX e                                D             ZdYdZd[efd\Zd]d^d[efd_Zd`ed[efdaZedbed[efdc            Zedbed[efdd            Z dkdfedged[efdhZ! ej"        diej#         ej$         ej%         dj          Z&dS )lz3
Mappings between PostgreSQL and Python encodings.
    N)AnyDictOptionalTYPE_CHECKING   )
ConnStatus)NotSupportedError)cache)PGconn)BaseConnectionBIG5big5EUC_CNgb2312EUC_JIS_2004euc_jis_2004EUC_JPeuc_jpEUC_KReuc_krGB18030gb18030GBKgbk
ISO_8859_5z	iso8859-5
ISO_8859_6z	iso8859-6
ISO_8859_7z	iso8859-7
ISO_8859_8z	iso8859-8JOHABjohabKOI8Rzkoi8-rKOI8Uzkoi8-uLATIN1z	iso8859-1LATIN10z
iso8859-16LATIN2z	iso8859-2LATIN3z	iso8859-3LATIN4z	iso8859-4LATIN5z	iso8859-9LATIN6z
iso8859-10LATIN7z
iso8859-13LATIN8z
iso8859-14LATIN9z
iso8859-15SHIFT_JIS_2004shift_jis_2004SJIS	shift_jis	SQL_ASCIIasciiUHCcp949UTF8utf-8WIN1250cp1250WIN1251cp1251WIN1252cp1252WIN1253cp1253WIN1254cp1254cp1255cp1256cp1257cp1258cp866cp874)WIN1255WIN1256WIN1257WIN1258WIN866WIN874	py_codecsc              #   H   K   | ]\  }}|                                 |fV  d S )Nencode.0kvs      U/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/psycopg/_encodings.py	<genexpr>rV   G   s2      @@TQ!((**a@@@@@@    c              #   x   K   | ]5\  }}d |v 	|                     d d                                          |fV  6dS )_ N)replacerP   rQ   s      rU   rV   rV   J   sR        )-AsaxxQYYsB  !$xxxx rW   c                 >    i | ]\  }}||                                 S  rO   rQ   s      rU   
<dictcomp>r^   N   s&    :::tq!Q

:::rW   connzOptional[BaseConnection[Any]]returnc                 n    | r| j         rdS | j                            d          pd}t          |          S )z
    Return the Python encoding name of a psycopg connection.

    Default to utf8 if the connection has no encoding info.
    r6      client_encoding   UTF8)closedpgconnparameter_statuspg2pyenc)r_   pgencs     rU   conn_encodingri   Q   sA      4; wK(();<<GEE??rW   re   r   c                 r    | j         t          k    rdS |                     d          pd}t          |          S )z}
    Return the Python encoding name of a libpq connection.

    Default to utf8 if the connection has no encoding info.
    r6   rb   rc   )statusOKrf   rg   )re   rh   s     rU   pgconn_encodingrm   ^   s;     }w##$677B7EE??rW   conninfoc                     ddl m}  ||           }|                    d          }|r2	 t          |                                          S # t
          $ r Y nw xY wdS )z
    Return the Python encoding name passed in a conninfo string. Default to utf8.

    Because the input is likely to come from the user and not normalised by the
    server, be somewhat lenient (non-case-sensitive lookup, ignore noise chars).
    r   )conninfo_to_dictclient_encodingr6   )rn   rp   getrg   rP   r	   )rn   rp   paramsrh   s       rU   conninfo_encodingrt   k   s     +*****h''FJJ())E 	ELLNN+++  	 	 	D	 7s    A 
AAnamec                 J    t           t          j        |           j                 S )zzConvert a Python encoding name to PostgreSQL encoding name.

    Raise LookupError if the Python encoding is unknown.
    )	pg_codecscodecslookupru   )ru   s    rU   py2pgencrz      s     V]4((-..rW   c                     	 t           |                     dd                              dd                                                   S # t          $ r) |                     dd          }t          d|          w xY w)zConvert a PostgreSQL encoding name to Python encoding name.

    Raise NotSupportedError if the PostgreSQL encoding is not supported by
    Python.
       -rW      _utf8r[   zcodec not available in Python: )rM   r[   upperKeyErrordecoder	   )ru   snames     rU   rg   rg      s    MdC0088sCCIIKKLL M M MFI.. K% K KLLLMs   AA	 	3A<fsprefixc                     |                                  s>| d         dv r|| z   } |                                  st                              d|           } | d         dk    r|| z   } | S )z
    Reduce a string to a valid Python identifier.

    Replace all non-valid chars with '_' and prefix the value with `!prefix` if
    the first letter is an '_'.
    r   
1234567890rY   )isidentifier	_re_cleansub)r   r   s     rU   _as_python_identifierr      sn     >> &Q4<
A~~ 	&c1%%Ats{{QJHrW   z[^z_])r   )'__doc__restringrx   typingr   r   r   r   	pq._enumsr   errorsr	   _compatr
   pq.abcr   
connectionr   rl   
_py_codecsrM   bytesstr__annotations__updateitemsrw   ri   rm   rt   rz   rg   r   compileascii_lowercaseascii_uppercasedigitsr   r]   rW   rU   <module>r      su     
			   5 5 5 5 5 5 5 5 5 5 5 5 ! ! ! ! ! ! % % % % % %       +******]-
F-h- N- h	-
 h- y- 
5- +- +- +- +- W- X- X-  k!-" |#-$ k%- -& k'-( k)-* k+-, l--. l/-0 l1-2 l3-6 &7-8 K9-> ?-@ 
7A-B GC-D xE-F xG-H xI-J xK-L xM- -N Y- - -
^ !	4s
       	  @@Z-=-=-?-?@@@ @ @ @ 
    1;1A1A1C1C      ;:z'7'7'9'9:::	
7 
C 
 
 
 

H 
 
 
 
 
     ( /3 /5 / / / / 
M5 
MS 
M 
M 
M 
M S #     $ BJJ	J!7JJJJ 			rW   