
    (ph                       S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSK	J
r
  SSKJr  SSKJrJrJr  SS	KJr  \R&                  " S
5      r\R*                  r " S S\
5      r " S S\
5      r " S S\
5      r\SS j5       r S     SS jjr\R6                  " S\R8                  \R:                  -  5      rSS jrSS jr SS jr!SS jr"g)z@
Various functionalities to make easier to work with the libpq.
    )annotationsN)
NamedTuple   )abc)
ConnStatusTransactionStatusPipelineStatus   )cachez
psycopg.pqc                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)	PGnotify   bytesrelnameintbe_pidextra N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       B/var/www/html/venv/lib/python3.13/site-packages/psycopg/pq/misc.pyr   r      s    NKLr   r   c                  \    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   Srg)ConninfoOption   r   keywordzbytes | Noneenvvarcompiledvallabeldispcharr   dispsizer   Nr   r   r   r   r   r      s(    N	LOMr   r   c                  \    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S	'   S\S
'   Srg)PGresAttDesc)   r   namer   tableidcolumnidformattypidtyplen	atttypmodr   Nr   r   r   r   r)   r)   )   s%    
KLMKJKNr   r)   c                 |   [         R                  S:X  a!  [        R                  R	                  S5      n U $ [         R                  S:X  a  [        R                  R	                  S5      n U (       d|   SS KnUR                  SS/5      R                  5       R                  5       n[        R                  R                  US5      n [        R                  R                  U 5      (       d  S n U $  U $ [        R                  R	                  S	5      n U $ ! [         a!  n[        R                  SU5         S nAU $ S nAff = f)
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   3   s   
||w++**;7* N' 
	!++**=9 M'+z)BCIIKRRT'',,v}=ww~~g.."G N  N ++**40N  MGLL
 NMs   1A9D 
D;D66D;c                R    U(       a  U R                  U5      $ U R                  5       $ )a%  
Return an error message from a `PGconn`, `PGresult`, `PGcancelConn`.

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.
)get_error_message)objencodings     r   error_messagerP   N   s%      /73  *SC<Q<Q<SSr   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+
    c                    [         R                  U 5      nU(       a  XR                  5       S   S n U R                  5       $ )z2Strip severity and whitespaces from error message.r   N)PREFIXESmatchspanr>   )msgms     r   strip_severityrW   ~   s3    sA&&(1+- 99;r   c                L    U R                  US5      nU(       a  [        U5      $ g)Nreplacezno error details available)r?   rW   )rU   rO   smsgs      r   _clean_error_messager[      s#    ::h	*Dd##+r   c                `   / nU R                   [        :X  GaL  [        U R                  5      R                  nU R
                  (       a%  US[        U R
                  5      R                   3-  nU R                  R                  S5      (       d+  UR                  SU R                  R                  5       45        U R                  S:w  a+  UR                  SU R                  R                  5       45        U R                  U R                  :w  a+  UR                  SU R                  R                  5       45        UR                  SU R                  R                  5       45        O[        U R                   5      R                  nSR                  S	 U 5       5      nU(       a  S
U S3nSU SU 3$ )zB
Return summary information on a connection.

Useful for __repr__
z, pipeline=   /hosts   5432portuserdatabase c              3  ,   #    U  H
  nS U-  v   M     g7f)z%s=%sNr   ).0parts     r   	<genexpr>%connection_summary.<locals>.<genexpr>   s     7gns   z ()[])statusOKr   transaction_statusr+   pipeline_statusr	   r^   
startswithappendr?   r_   r`   dbr   rB   )pgconnpartsrk   spartss       r   connection_summaryru      sO    E}}"6#<#<=BB!!N63I3I$J$O$O#PQQF {{%%d++LL&&++"4"4"678;;'!LL&&++"4"4"678;;&))#LL&&++"4"4"678j&))"2"2"456 FMM*//XX777FfXQvhax  r   c                t    [        U S5      u  p[        U S5      u  p#US:  a  US:X  a  U SU 3$ U SU SU 3$ )zg
Return a pretty representation of a PostgreSQL version

For instance: 140002 -> 14.2, 90610 -> 9.6.10
d   
   r   .)divmod)versionpatchmajorminors       r   version_prettyr      sU     GS)NG'3'LE{uz%!!%%))r   )returnz
str | None) )rN   z,abc.PGconn | abc.PGresult | abc.PGcancelConnrO   strr   r   )rU   r   r   r   )rU   r   rO   r   r   r   )rr   z
abc.PGconnr   r   )r{   r   r   r   )#__doc__
__future__r   rer@   r7   loggingctypes.utilr9   typingr   r   r   _enumsr   r   r	   _compatr   	getLoggerrE   rl   r   r   r)   rK   rP   compileVERBOSE	MULTILINErR   rW   r[   ru   r   r   r   r   <module>r      s    # 	 	 
     A A 			<	(]]z Z :   6 HJT	5TADTT, ::( JJ-4,!>*r   