
    *Jf~                        d Z ddlZddl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mZ ddlmZmZmZ ddlmZ dd	lmZ  ej        d
          Zej        Z G d de	          Z G d de	          Z G d de	          Zede
e         fd            Zddeeef         dedefdZ ej         dej!        ej"        z            Z#dedefdZ$dedefdZ%dS )z@
Various functionalities to make easier to work with the libpq.
    N)cast
NamedTupleOptionalUnion   )PGconnPGresult)
ConnStatusTransactionStatusPipelineStatus   )cache)pgconn_encodingz
psycopg.pqc                   .    e Zd ZU eed<   eed<   eed<   dS )PGnotifyrelnamebe_pidextraN__name__
__module____qualname__bytes__annotations__int     R/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/psycopg/pq/misc.pyr   r      s+         NNNKKKLLLLLr   r   c                   z    e Zd ZU eed<   ee         ed<   ee         ed<   ee         ed<   eed<   eed<   eed<   dS )	ConninfoOptionkeywordenvvarcompiledvallabeldispchardispsizeN)r   r   r   r   r   r   r   r   r   r   r    r       sd         NNNUOuo	%LLLOOOMMMMMr   r    c                   V    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   dS )	PGresAttDescnametableidcolumnidformattypidtyplen	atttypmodNr   r   r   r   r)   r)   (   sO         
KKKLLLMMMKKKJJJKKKNNNNNr   r)   returnc                  r   t           j        dk    r!t          j                            d          } nt           j        dk    rt          j                            d          } | s	 dd l}|                    ddg                                                                          }t          j
                            |d          } t          j
                            |           sd } nR# t          $ r%}t                              d|           Y d }~n(d }~ww xY wnt          j                            d	          } | S )
Nwin32z	libpq.dlldarwinzlibpq.dylibr   	pg_configz--libdirz(couldn't use pg_config to find libpq: %spq)sysplatformctypesutilfind_library
subprocesscheck_outputstripdecodeospathjoinexists	Exceptionloggerdebug)libnamesplibdirexs       r   find_libpq_full_pathrK   2   s-   
|w+**;77		!	!+**=99  		MM''''+z)BCCIIKKRRTT',,v}==w~~g.. #"G M M MGLLLLLLLLM		M +**400Ns   $B C% %
D/DDutf8objencodingc                 f   t          | d          rt          t          |           } | j        }n[t          | d          r'| j        t
          k    rt          |           }| j        }n$t          dt          |           j	                   |r$t          |                    |d                    }nd}|S )a0  
    Return an error message from a `PGconn` or `PGresult`.

    The return value is a `!str` (unlike pq data which is usually `!bytes`):
    use the connection encoding if available, otherwise the `!encoding`
    parameter as a fallback for decoding. Don't raise exceptions on decoding
    errors.

    error_fielderror_messagez!PGconn or PGresult expected, got replacezno details available)hasattrr   r	   rQ   statusOKr   	TypeErrortyper   strip_severityr?   )rM   rN   bmsgmsgs       r   rQ   rQ   M   s     sM"" R8S!! 	o	&	& R:&s++H  PDII<NPPQQQ %T[[9==>>$Jr   u  
    ^ (?:
      DEBUG | INFO | HINWEIS | WARNUNG | FEHLER | LOG | FATAL | PANIK  # de
    | DEBUG | INFO | NOTICE | WARNING | ERROR | LOG | FATAL | PANIC  # en
    | DEBUG | INFO | NOTICE | WARNING | ERROR | LOG | FATAL | PANIC  # es
    | DEBUG | INFO | NOTICE | ATTENTION | ERREUR | LOG | FATAL | PANIC  # fr
    | DEBUG | INFO | NOTICE | PERINGATAN | ERROR | LOG | FATAL | PANIK  # id
    | DEBUG | INFO | NOTIFICA | ATTENZIONE | ERRORE | LOG | FATALE | PANICO  # it
    | DEBUG | INFO | NOTICE | WARNING | ERROR | LOG | FATAL | PANIC  # ja
    | 디버그 | 정보 | 알림 | 경고 | 오류 | 로그 | 치명적오류 | 손상  # ko
    | DEBUG | INFORMACJA | UWAGA | OSTRZEŻENIE | BŁĄD | DZIENNIK | KATASTROFALNY | PANIKA  # pl
    | DEPURAÇÃO | INFO | NOTA | AVISO | ERRO | LOG | FATAL | PÂNICO  # pt_BR
    | ОТЛАДКА | ИНФОРМАЦИЯ | ЗАМЕЧАНИЕ | ПРЕДУПРЕЖДЕНИЕ | ОШИБКА | СООБЩЕНИЕ | ВАЖНО | ПАНИКА  # ru
    | DEBUG | INFO | NOTIS | VARNING | FEL | LOGG | FATALT | PANIK  # sv
    | DEBUG | BİLGİ | NOT | UYARI | HATA | LOG | ÖLÜMCÜL\ \(FATAL\) | KRİTİK  # tr
    | НАЛАГОДЖЕННЯ | ІНФОРМАЦІЯ | ПОВІДОМЛЕННЯ | ПОПЕРЕДЖЕННЯ | ПОМИЛКА | ЗАПИСУВАННЯ | ФАТАЛЬНО | ПАНІКА  # uk
    | 调试 | 信息 | 注意 | 警告 | 错误 | 日志 | 致命错误 | 比致命错误还过分的错误  # zh_CN
    ) : \s+
    rZ   c                     t                               |           }|r"| |                                d         d         } |                                 S )z2Strip severity and whitespaces from error message.r   N)PREFIXESmatchspanr>   )rZ   ms     r   rX   rX      sC    sA !!&&((1+-- 99;;r   pgconnc                    g }| j         t          k    r-t          | j                  j        }| j        r|dt          | j                  j         z  }| j                            d          s.|	                    d| j        
                                f           | j        dk    r.|	                    d| j        
                                f           | j        | j        k    r.|	                    d| j        
                                f           |	                    d| j        
                                f           nt          | j                   j        }d                    d	 |D                       }|rd
| d}d| d| S )zN
    Return summary information on a connection.

    Useful for __repr__
    z, pipeline=   /hosts   5432portuserdatabase c              3       K   | ]	}d |z  V  
dS )z%s=%sNr   ).0parts     r   	<genexpr>z%connection_summary.<locals>.<genexpr>   s&      77gn777777r   z ()[])rT   rU   r   transaction_statusr*   pipeline_statusr   rc   
startswithappendr?   rd   re   dbr
   rB   )r`   partsrT   spartss       r   connection_summaryrv      s    E}"6#<==B! 	RQN63I$J$J$OQQQF {%%d++ 	9LL&&+"4"4"6"67888;'!!LL&&+"4"4"6"67888;&)##LL&&+"4"4"6"67888j&)"2"2"4"456666 FM**/XX7777777F  f v     r   )rL   )&__doc__rer@   r7   loggingctypes.utilr9   typingr   r   r   r   abcr   r	   _enumsr
   r   r   _compatr   
_encodingsr   	getLoggerrE   rU   r   r    r)   strrK   rQ   compileVERBOSE	MULTILINEr\   rX   rv   r   r   r   <module>r      s0    
			 				 



      4 4 4 4 4 4 4 4 4 4 4 4 ! ! ! ! ! ! ! ! A A A A A A A A A A       ( ( ( ( ( (		<	(	(]    z       Z       :    hsm    4 uVX-. # 3    J 2:( J- 4     !v !# ! ! ! ! ! !r   