§
    YŠtjw  ã                  óæ   — d Z ddlmZ ddlZddlmZmZmZ ddlmZ	 ddlm
Z
 ddlmZmZ ej        Zej        Zd	Zddd„Zddd„Zdd„Z ej        d¦  «        Z ej        d¦  «        Zd d„Zd!d„ZdS )"z*
Functions to manipulate conninfo strings
é    )ÚannotationsNé   )Ú_conninfo_attemptsÚ_conninfo_attempts_asyncÚ_conninfo_utils)Úerrors)Úpq)ÚConnDictÚ	ConnParamé‚   Ú ÚconninfoÚstrÚkwargsr   Úreturnc                ó^  — | s|sdS |st          | ¦  «         t          | ¦  «        S d„ |                     ¦   «         D ¦   «         }| r&t          | ¦  «        }|                     |¦  «         |}d                     d„ |                     ¦   «         D ¦   «         ¦  «        } t          | ¦  «         | S )a  
    Merge a string and keyword params into a single conninfo string.

    :param conninfo: A `connection string`__ as accepted by PostgreSQL.
    :param kwargs: Parameters overriding the ones specified in `!conninfo`.
    :return: A connection string valid for PostgreSQL, with the `!kwargs`
        parameters merged.

    Raise `~psycopg.ProgrammingError` if the input doesn't make a valid
    conninfo string.

    .. __: https://www.postgresql.org/docs/current/libpq-connect.html
           #LIBPQ-CONNSTRING
    r   c                ó   — i | ]
\  }}|®||“ŒS ©N© ©Ú.0ÚkÚvs      úN/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/psycopg/conninfo.pyú
<dictcomp>z!make_conninfo.<locals>.<dictcomp>4   s   € ÐAÐAÐA‘v˜˜1°1°=ˆa�°=°=°=ó    ú c              3  ó^   K  — | ](\  }}|› d t          t          |¦  «        ¦  «        › �V — Œ)dS )ú=N)Ú_param_escaper   r   s      r   ú	<genexpr>z make_conninfo.<locals>.<genexpr>;   sB   è è € ÐTÐT¹6¸A¸q˜1Ð6Ð6�}­S°©V¬VÑ4Ô4Ð6Ð6ÐTÐTÐTÐTÐTÐTr   )Ú_parse_conninfor   ÚitemsÚconninfo_to_dictÚupdateÚjoin)r   r   Útmps      r   Úmake_conninfor(      sÃ   € ð ð ˜Fð Øˆrð ð Ý˜Ñ!Ô!Ð!Ý�8‰}Œ}Ðð BÐA §¢¡¤ÐAÑAÔA€Fàð Ý˜xÑ(Ô(ˆØ�
Š
�6ÑÔÐØˆà�xŠxÐTÐTÀVÇ\Â\Á^Ä^ÐTÑTÔTÑTÔT€Hõ �HÑÔÐà€Or   r
   c                ó~   — t          | ¦  «        }d„ |D ¦   «         }|                     ¦   «         D ]\  }}|�|||<   Œ|S )aû  
    Convert the `!conninfo` string into a dictionary of parameters.

    :param conninfo: A `connection string`__ as accepted by PostgreSQL.
    :param kwargs: Parameters overriding the ones specified in `!conninfo`.
    :return: Dictionary with the parameters parsed from `!conninfo` and
        `!kwargs`.

    Raise `~psycopg.ProgrammingError` if `!conninfo` is not a a valid connection
    string.

    .. __: https://www.postgresql.org/docs/current/libpq-connect.html
           #LIBPQ-CONNSTRING
    c                ó~   — i | ]:}|j         ®	|j                             ¦   «         |j                              ¦   «         “Œ;S r   )ÚvalÚkeywordÚdecode)r   Úopts     r   r   z$conninfo_to_dict.<locals>.<dictcomp>S   sB   € ð ð ð Ø36À#Ä'ÐBUˆŒ×ÒÑÔ˜cœgŸnšnÑ.Ô.ÐBUÐBUÐBUr   )r"   r#   )r   r   ÚoptsÚrvr   r   s         r   r$   r$   C   s`   € õ ˜8Ñ$Ô$€Dðð Ø:>ðñ ô €Bð —’‘”ð ð ‰ˆˆ1Øˆ=ØˆBˆq‰EøØ€Ir   úlist[pq.ConninfoOption]c                óØ   — 	 t           j                             |                      ¦   «         ¦  «        S # t          j        $ r'}t	          j        t          |¦  «        ¦  «        d‚d}~ww xY w)z±
    Verify that `!conninfo` is a valid connection string.

    Raise ProgrammingError if the string is not valid.

    Return the result of pq.Conninfo.parse() on success.
    N)r	   ÚConninfoÚparseÚencodeÚeÚOperationalErrorÚProgrammingErrorr   )r   Úexs     r   r"   r"   \   sb   € ð4ÝŒ{× Ò  §¢Ñ!2Ô!2Ñ3Ô3Ð3øÝÔð 4ð 4ð 4ÝÔ ¥ R¡¤Ñ)Ô)¨tÐ3øøøøð4øøøs   ‚03 ³A)Á"A$Á$A)z([\\'])z\sÚsc                óˆ   — | sdS t                                t                               d| ¦  «        x} ¦  «        rd| z   dz   } | S )z9
    Apply the escaping rule required by PQconnectdb
    z''z\\\1ú')Úre_spaceÚsearchÚ	re_escapeÚsub)r:   s    r   r    r    n   sJ   € ð ð Øˆtå‡‚�IŸMšM¨'°1Ñ5Ô5Ð5�qÑ6Ô6ð Ø�!‰G�c‰Mˆà€Hr   ÚparamsÚintc                óö   — t          j        | d¦  «        }|€t          }	 t          t	          |¦  «        ¦  «        }n&# t
          $ r t          j        d|›�¦  «        d‚w xY w|dk    rt          }n|dk     rd}|S )zG
    Return the timeout in seconds from the connection parameters.
    Úconnect_timeoutNzbad value for connect_timeout: r   é   )r   Ú	get_paramÚ_DEFAULT_CONNECT_TIMEOUTrB   ÚfloatÚ
ValueErrorr6   r8   )rA   ÚvalueÚtimeouts      r   Útimeout_from_conninforL   {   sŸ   € õ .Ô7¸Ð@QÑRÔR€EØ€}Ý(ˆðXÝ•e˜E‘l”lÑ#Ô#ˆˆøÝð Xð Xð XÝÔ Ð!LÀ5Ð!LÐ!LÑMÔMÐSWÐWðXøøøð �!‚|€|õ +ˆˆØ	�1Šˆàˆà€Ns	    = ½#A )r   )r   r   r   r   r   r   )r   r   r   r   r   r
   )r   r   r   r1   )r:   r   r   r   )rA   r
   r   rB   )Ú__doc__Ú
__future__r   Úrer   r   r   r   r   r6   r	   Úabcr
   r   Úconninfo_attemptsÚconninfo_attempts_asyncrG   r(   r$   r"   Úcompiler?   r=   r    rL   r   r   r   ú<module>rT      s?  ððð ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	à KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ð 'Ô8Ð Ø2ÔJÐ ð
 Ð ð&ð &ð &ð &ð &ðRð ð ð ð ð24ð 4ð 4ð 4ð ˆBŒJ�zÑ"Ô"€	Øˆ2Œ:�eÑÔ€ð
ð 
ð 
ð 
ðð ð ð ð ð r   