o
    TPf                     @  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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d/d!d"Z d0d%d&Z!d1d)d*Z"dS )2z@
Various functionalities to make easier to work with the libpq.
    )annotationsN)
NamedTuple   )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   [/var/www/html/Testing_prj/Navya-Bakers/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} | S t jdkrZtjd} | sXz$dd l}|ddg  }t	j
|d} t	j
| s<d } W | S W | S  tyW } 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
subprocesscheck_outputstripdecodeospathjoinexists	Exceptionloggerdebug)libnamesplibdirexr   r   r   find_libpq_full_path3   s.   

rC    obj,abc.PGconn | abc.PGresult | abc.PGcancelConnencodingstrc                 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)rE   rG   r   r   r   error_messageN   s   rJ   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spanr6   )rK   mr   r   r   strip_severity~   s   
rP   r   c                 C  s   |  |d}|rt|S dS )Nreplacezno error details available)r7   rP   )rK   rG   smsgr   r   r   _clean_error_message   s   rS   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   rW   
startswithappendr7   rX   rY   dbr   r:   )rT   partsrb   spartsr   r   r   connection_summary   s"   

rk   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)rl   patchmajorminorr   r   r   version_pretty   s
   rt   )r)   r*   )rD   )rE   rF   rG   rH   r)   rH   )rK   rH   r)   rH   )rK   r   rG   rH   r)   rH   )rT   rU   r)   rH   )rl   r   r)   rH   )#__doc__
__future__r   rer8   r/   loggingctypes.utilr1   typingr   rD   r   _enumsr   r   r   _compatr
   	getLoggerr=   rc   r   r   r!   rC   rJ   compileVERBOSE	MULTILINErL   rP   rS   rk   rt   r   r   r   r   <module>   s8    





	
