o
    DDiG                     @  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 dd	lmZmZ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 d0ddZ!d1d!d"Z"d2d%d&Z#d3d)d*Z$ed4d+d,Z%dS )5z@
Various functionalities to make easier to work with the libpq.
    )annotationsN)
NamedTuple)Path)cache   )abc)
ConnStatusPipelineStatusTransactionStatusz
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   H/var/www/Datamplify/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 } d u rd S tt|  } | S t jdkrhtjd} | sfz$dd l}|	ddg
  }tjtj|d } sJd } W | S W | S  tye } 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existsjoin	Exceptionloggerdebug)libnamesplibdirexr   r   r   find_libpq_full_path4   s0   

rE    obj,abc.PGconn | abc.PGresult | abc.PGcancelConnencodingr4   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)rG   rI   r   r   r   error_messageO   s   rK   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spanr8   )rL   mr   r   r   strip_severity   s   rQ   r   c                 C  s   |  |d }rt|S dS )Nreplacezno error details available)r9   rQ   )rL   rI   smsgr   r   r   _clean_error_message   s   rT   pgconn
abc.PGconnc                 C  s  g }| j tkrYt| jj}| jr|dt| jj 7 }| jds+|	d| j
 f | j
 p2t  }dkr>|	d|f | j| jkrN|	d| j
 f |	d| j
 f nzt| j j}W n tyq   d| j  d	}Y nw d
dd |D  }rd| 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                 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	   rX   
startswithappendr9   rZ   get_compiled_portr[   dbr   
ValueErrorr=   )rU   partsrd   rZ   spartsr   r   r   connection_summary   s(   
ro   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)rp   patchmajorminorr   r   r   version_pretty   s
   rx   c                  C  s(   ddl m}  | d}|r|jr|jS dS )z0Return the default port compiled with the libpq.r   )get_param_defrZ   rF   )psycopg._conninfo_utilsry   r   )ry   infor   r   r   rj      s   rj   )r)   r*   )rF   )rG   rH   rI   r4   r)   r4   )rL   r4   r)   r4   )rL   r   rI   r4   r)   r4   )rU   rV   r)   r4   )rp   r   r)   r4   )r)   r4   )&__doc__
__future__r   r:   rer/   loggingctypes.utilr1   typingr   pathlibr   	functoolsr   rF   r   _enumsr   r	   r
   	getLoggerr?   re   r   r   r!   rE   rK   compileVERBOSE	MULTILINErM   rQ   rT   ro   rx   rj   r   r   r   r   <module>   s>    







#