
    jG                       d Z ddlm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
 ddlmZ ddlmZ ddlmZ dd	lmZmZ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&d            Z	 d'd(dZ ej        dej        ej        z            Z d)dZ!d*dZ"d+d!Z#d,d$Z$ed-d%            Z%dS ).z@
Various functionalities to make easier to work with the libpq.
    )annotationsN)
NamedTuple)Path)cache   )abc)
ConnStatusPipelineStatusTransactionStatusz
psycopg.pqc                  .    e Zd ZU ded<   ded<   ded<   dS )PGnotifybytesrelnameintbe_pidextraN__name__
__module____qualname____annotations__     Z/DATA/AppData/hermes/projects/honcho/.venv/lib/python3.11/site-packages/psycopg/pq/misc.pyr   r      s+         NNNKKKLLLLLr   r   c                  V    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   d	ed
<   dS )ConninfoOptionr   keywordzbytes | Noneenvvarcompiledvallabeldispcharr   dispsizeNr   r   r   r   r   r       sX         NNNLLLOOOMMMMMr   r   c                  V    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   d
S )PGresAttDescr   namer   tableidcolumnidformattypidtyplen	atttypmodNr   r   r   r   r%   r%   *   sO         KKKLLLMMMKKKJJJKKKNNNNNr   r%   return
str | Nonec                    t           j        dk    rSt          j                            d          x} d S t          t          |                                                     } nt           j        dk    rt          j                            d          } | s	 dd l}|	                    ddg          
                                                                }t          j                            t          j                            |d          x}           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strr   resolve
subprocesscheck_outputstripdecodeospathexistsjoin	Exceptionloggerdebug)libnamesplibdirexs       r   find_libpq_full_pathrJ   4   sW   
|w{//<<<GE4d7mm++--..		!	!+**=99  	MM''''+z)BCCIIKKRRTTw~~fm1T1T&TgUU #"G M M MGLLLLLLLLM	M +**400Ns   B D 
E!EE obj,abc.PGconn | abc.PGresult | abc.PGcancelConnencodingr9   c                X    |r|                      |          n|                                  S )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)rL   rN   s     r   error_messagerQ   O   s.      /7S3  ***C<Q<Q<S<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+
    msgc                    t                               |           x}r"| |                                d         d         } |                                 S )z2Strip severity and whitespaces from error message.r   N)PREFIXESmatchspanr=   )rR   ms     r   strip_severityrX      sC    NN3q !!&&((1+-- 99;;r   r   c                T    |                      |d          x}rt          |          S dS )Nreplacezno error details available)r>   rX   )rR   rN   smsgs      r   _clean_error_messager\      s1    zz(I...t ,d###++r   pgconn
abc.PGconnc                b   g }| j         t          k    r8t          | j                  j        }| j        r|dt          | j                  j         z  }| j                            d          s.|	                    d| j        
                                f           | j        
                                pt                      x}dk    r|	                    d|f           | j        | j        k    r.|	                    d| j        
                                f           |	                    d| j        
                                f           n6	 t          | j                   j        }n# t           $ r d| j          d	}Y nw xY wd
                    d |D                       x}rd| d}d| d| S )zN
    Return summary information on a connection.

    Useful for __repr__
    z, pipeline=   /host5432portuserdatabasezstatus=z (unkndown) c              3      K   | ]	}d |z  V  
dS )z%s=%sNr   ).0parts     r   	<genexpr>z%connection_summary.<locals>.<genexpr>   s&      ;;T'D.;;;;;;r   z ()[])statusOKr   transaction_statusr&   pipeline_statusr
   ra   
startswithappendr>   rc   get_compiled_portrd   dbr	   
ValueErrorrB   )r]   partsrn   rc   spartss        r   connection_summaryry      s    E}'(ABBG! 	RQN63I$J$J$OQQQF {%%d++ 	9LL&&+"4"4"6"67888K&&((?,=,?,??DFJJLL&$(((;&)##LL&&+"4"4"6"67888j&)"2"2"4"456666	:..3FF 	: 	: 	: :v}999FFF	:
 ;;U;;;;;;v  f v     s   E' 'E?>E?versionr   c                    t          | d          \  } }t          | d          \  }}|dk    r|dk    r| d| S | d| d| S )zs
    Return a pretty representation of a PostgreSQL version

    For instance: 140002 -> 14.2, 90610 -> 9.6.10
    d   
   r   .)divmod)rz   patchmajorminors       r   version_prettyr      sk     GS))NGU'3''LE5{{uzz!!%!!!))%))%)))r   c                 H    ddl m}   | d          }|r|j        r|j        ndS )z0Return the default port compiled with the libpq.r   )get_param_defrc   rK   )psycopg._conninfo_utilsr   r   )r   infos     r   rt   rt      s=     655555=  D :T]:4==:r   )r-   r.   )rK   )rL   rM   rN   r9   r-   r9   )rR   r9   r-   r9   )rR   r   rN   r9   r-   r9   )r]   r^   r-   r9   )rz   r   r-   r9   )r-   r9   )&__doc__
__future__r   r?   rer4   loggingctypes.utilr6   typingr   pathlibr   	functoolsr   rK   r   _enumsr	   r
   r   	getLoggerrD   ro   r   r   r%   rJ   rQ   compileVERBOSE	MULTILINErT   rX   r\   ry   r   rt   r   r   r   <module>r      s8    # " " " " " 				 				 



                              A A A A A A A A A A		<	(	(]    z       Z       :       6 HJT T T T T, 2:( J- 4   , , , , !  !  !  !F* * * * ; ; ; ; ; ;r   