o
    "4g[                     @  s  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dZejZG dd de
ZG dd de
ZG dd de
Zed,ddZ	d-d.ddZedejejB Z d/dd Z!d0d"d#Z"d1d&d'Z#d2d*d+Z$dS )3z@
Various functionalities to make easier to work with the libpq.
    )annotationsN)
NamedTuple)Path   )abc)
ConnStatusTransactionStatusPipelineStatus   )cachez
psycopg.pqc                   @  s&   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__ r   r   X/var/www/html/authentication-server/venv/lib/python3.10/site-packages/psycopg/pq/misc.pyr      s   
 r   c                   @  sF   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          
 r   c                   @  sF   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"   *   r!   r"   return
str | Nonec               
   C  s   t jdkrtjd} tt|  } | S t jdkrbtjd} | s`z$dd l}|	ddg
  }tj|d} tj| sDd } W | S W | S  ty_ } ztd| W Y d }~| S d }~ww | S 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joinexists	Exceptionloggerdebug)libnamesplibdirexr   r   r   find_libpq_full_path4   s0   

rF    obj,abc.PGconn | abc.PGresult | abc.PGcancelConnencodingr5   c                 C  s   |r|  |S |   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)rH   rJ   r   r   r   error_messageP   s   rL   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                 C  s*   t | }|r| | d d } |  S )z2Strip severity and whitespaces from error message.r   N)PREFIXESmatchspanr9   )rM   mr   r   r   strip_severity   s   
rR   r   c                 C  s   |  |d}|rt|S dS )Nreplacezno error details available)r:   rR   )rM   rJ   smsgr   r   r   _clean_error_message   s   rU   pgconn
abc.PGconnc                 C  s   g }| j tkrUt| jj}| jr|dt| jj 7 }| jds+|	d| j
 f | jdkr:|	d| j
 f | j| jkrJ|	d| j
 f |	d| j
 f nt| j j}dd	d
 |D }|rmd| d}d| d| S )zN
    Return summary information on a connection.

    Useful for __repr__
    z, pipeline=   /hosts   5432portuserdatabase c                 s  s    | ]}d | V  qdS )z%s=%sNr   ).0partr   r   r   	<genexpr>   s    z%connection_summary.<locals>.<genexpr>z ()[])statusOKr   transaction_statusr#   pipeline_statusr	   rY   
startswithappendr:   rZ   r[   dbr   r=   )rV   partsrd   spartsr   r   r   connection_summary   s"   

rm   versionr   c                 C  sN   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)rn   patchmajorminorr   r   r   version_pretty   s
   rv   )r*   r+   )rG   )rH   rI   rJ   r5   r*   r5   )rM   r5   r*   r5   )rM   r   rJ   r5   r*   r5   )rV   rW   r*   r5   )rn   r   r*   r5   )%__doc__
__future__r   rer;   r0   loggingctypes.utilr2   typingr   pathlibr   rG   r   _enumsr   r   r	   _compatr   	getLoggerr@   re   r   r   r"   rF   rL   compileVERBOSE	MULTILINErN   rR   rU   rm   rv   r   r   r   r   <module>   s:    





	
