
    iK                       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mZ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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%y)"z@
Various functionalities to make easier to work with the libpq.
    )annotationsN)
NamedTuple)Path   )abc)
ConnStatusPipelineStatusTransactionStatus   )cachez
psycopg.pqc                  ,    e Zd ZU ded<   ded<   ded<   y)PGnotifybytesrelnameintbe_pidextraN__name__
__module____qualname____annotations__     o/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/psycopg/pq/misc.pyr   r      s    NKLr   r   c                  T    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
<   y)ConninfoOptionr   keywordzbytes | Noneenvvarcompiledvallabeldispcharr   dispsizeNr   r   r   r   r   r       s(    N	LOMr   r   c                  T    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	<   y
)PGresAttDescr   namer   tableidcolumnidformattypidtyplen	atttypmodNr   r   r   r   r&   r&   *   s%    
KLMKJKNr   r&   c                    t         j                  dk(  rFt        j                  j	                  d      x} y t        t        |       j                               } | S t         j                  dk(  rt        j                  j	                  d      } | sw	 dd l}|j                  ddg      j                         j                         }t        j                  j                  t        j                  j                  |d      x}       sd } | S | S t        j                  j	                  d	      } | S # t         $ r!}t"        j%                  d|       Y d }~| S d }~ww xY w)
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_pathrI   4   s   
||w{{//<<GEd7m++-.& N% 
	!++**=9 M'+z)BCIIKRRTww~~"'',,v}2U'UwW"G N7N ++**40N  MGLL
 NMs   A4D( (	E1EEc                H    |r| j                  |      S | j                         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)objencodings     r   error_messagerN   O   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                |    t         j                  |       x}r| |j                         d   d } | j                         S )z2Strip severity and whitespaces from error message.r   N)PREFIXESmatchspanr<   )msgms     r   strip_severityrU      s8    NN3q!&&(1+- 99;r   c                B    | j                  |d      x}rt        |      S y)Nreplacezno error details available)r=   rU   )rS   rM   smsgs      r   _clean_error_messagerY      s&    zz(I..t.d##+r   c                   g }| j                   t        k(  rDt        | j                        j                  }| j
                  r%|dt        | j
                        j                   z  }| j                  j                  d      s+|j                  d| j                  j                         f       | j                  j                         xs
 t               x}dk7  r|j                  d|f       | j                  | j                  k7  r+|j                  d| j                  j                         f       |j                  d| j                  j                         f       n 	 t        | j                         j                  }d
j#                  d |D              x}rd| d}d| d| S # t         $ r d| j                    d	}Y Cw xY w)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    yw)z%s=%sNr   ).0parts     r   	<genexpr>z%connection_summary.<locals>.<genexpr>   s     <d7T><s   z ()[])statusOKr
   transaction_statusr'   pipeline_statusr	   r\   
startswithappendr=   r^   get_compiled_portr_   dbr   
ValueErrorrA   )pgconnpartsri   r^   spartss        r   connection_summaryru      s    E}}'(A(ABGG!!N63I3I$J$O$O#PQQF {{%%d+LL&&++"4"4"678KK&&(?,=,??DFJLL&$(;;&))#LL&&++"4"4"678j&))"2"2"456	:.33F <e<==v=fXQvhax    	: v}}o[9F	:s   F# #F?>F?c                t    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)versionpatchmajorminors       r   version_prettyr      sY     GS)NGU'3'LE5{uz%!!%%))r   c                 V    ddl m}   | d      }|r|j                  r|j                  S dS )z0Return the default port compiled with the libpq.r   )get_param_defr^    )psycopg._conninfo_utilsr   r    )r   infos     r   ro   ro      s(     6 D T]]4==::r   )returnz
str | None)r   )rL   z,abc.PGconn | abc.PGresult | abc.PGcancelConnrM   r8   r   r8   )rS   r8   r   r8   )rS   r   rM   r8   r   r8   )rr   z
abc.PGconnr   r8   )r{   r   r   r8   )r   r8   )&__doc__
__future__r   r>   rer3   loggingctypes.utilr5   typingr   pathlibr   r   r   _enumsr   r	   r
   _compatr   	getLoggerrC   rj   r   r   r&   rI   rN   compileVERBOSE	MULTILINErP   rU   rY   ru   r   ro   r   r   r   <module>r      s    # 	 	 
      A A 			<	(]]z Z :   6 HJT	5TADTT, 2::( JJ-4, !F* ; ;r   