§
    öÛg  ã                   ó˜  — d Z ddlmZ ddlmZ ddlmZ  ed¦  «        Z[ddl	Z	 e	j
        d e	j        ej        dz   ¦  «        ›d	�¦  «        Zej        fd
„Zefd„Zdd„Zej        fd„Zdd„Zedk    rRddlZej        dd…         D ]@Z ed                     e ee¦  «         e ee¦  «        ¦  «        ¬¦  «        ¦  «         Œ?dS dS )a:  
Parse and serialize PQ IRIs.

PQ IRIs take the form::

	pq://user:pass@host:port/database?setting=value&setting2=value2#public,othernamespace

IPv6 is supported via the standard representation::

	pq://[::1]:5432/database

Driver Parameters:

	pq://user@host/?[driver_param]=value&[other_param]=value?setting=val
é   )Úriparse)Úsplit_identé    )Ú
itemgetterNú[ú,ú]c                 ó|  ‡— |                       dd¦  «                             ¦   «         dk    rt          d¦  «        ‚ˆfd„|                      ¦   «         D ¦   «         }|                       d¦  «        }|                       d¦  «        }|                       d¦  «        }|                       d¦  «        }|�”|                     d
¦  «        rq|                     d¦  «        r\|dd…         }|                     d¦  «        r/|t          d¦  «        d	…                              dd¦  «        |d<   n|dd…         |d<   n ‰|¦  «        |d<   |r$|d         r|d         |d<   |dd	…         }|r||d<   i }|ržt          |d¦  «        r|                     ¦   «         }n|}|D ]t\  }	}
|	                     d
¦  «        rA|	                     d¦  «        r,|	dd…         }	|	dk    r|	|vr ‰|
¦  «        | ‰|	¦  «        <   Œ[|	r ‰|
¦  «        | ‰|	¦  «        <   Œu|r$ˆfd„| 	                    d¦  «        D ¦   «         |d<   |r||d<   |S )z1Create a clientparams dictionary from a parsed RIÚschemeÚpqzPQ-IRI scheme is not 'pq'c                 ó6   •— i | ]\  }}|d v¯	| ‰|¦  «        “ŒS ))ÚpathÚfragmentÚqueryÚhostr   © )Ú.0ÚkÚvÚ	fieldprocs      €úD/granary/edev/quantum/lib/python3.11/site-packages/postgresql/iri.pyú
<dictcomp>zstructure.<locals>.<dictcomp>!   s=   ø€ ð ð ð Ù�q˜!ØÐ=Ð=Ð=ð €i€i��l„lØ=Ð=Ð=ó    r   r   r   r   Nr   r	   r   éÿÿÿÿzunix:ú:ú/Úunixr   ÚdatabaseÚitemsÚsettingsc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   )r   Úxr   s     €r   ú
<listcomp>zstructure.<locals>.<listcomp>M   s.   ø€ ð ð ð Ø€9€9ˆQ�<„<ðð ð r   r   Úsearch_path)
ÚgetÚlowerÚ
ValueErrorr   Ú
startswithÚendswithÚlenÚreplaceÚhasattrÚsplit)Údr   Úcpdr   Úfragr   r   r    Úqiterr   r   s    `         r   Ú	structurer2      s¢  ø€ à‡E‚Eˆ(�DÑÔ×ÒÑ!Ô! TÒ)Ð)ÝÐ.Ñ/Ô/Ð/ðð ð ð Ø Ÿwšw™yœyðñ ô €ð
 	
�Šˆf‰Œ€Ø	�ŠˆjÑÔ€Ø	
�Šˆw‰Œ€Ø	�Šˆf‰Œ€àÐØ	‡_‚_�SÑÔð !˜dŸmšm¨CÑ0Ô0ð !Ø
ˆq�ˆtŒ*€4Ø
‡o‚o�gÑÔð Ø•s˜7‘|”|�}�}Ô%×-Ò-¨c°#Ñ6Ô6€Cˆ�K€Kà�q˜�t”*€Cˆ�K€Kà�˜4‘”€3€v�;àð à	ˆ!„Wð Ø˜!”W€3€z�?Ø	ˆaˆbˆbŒ€$Ø	ð Ø€3€v�;à€Ø	ð *ÝˆU�GÑÔð Ø�;Š;‰=Œ=€5€5à€5Øð *ð *�d€aˆØ‡l‚l�3ÑÔð *˜AŸJšJ s™OœOð *Ø	ˆ!ˆBˆ$Œ€AØˆJ‚€˜1 C˜<˜<Ø"˜ 1™œ€Sˆˆ�1‰ŒÑøØ	ð *Ø&˜Y q™\œ\€HˆYˆY�q‰\Œ\Ñøð 	ð ðð ð ð ØŸš C™œðñ ô €(ˆ=Ñð ð Ø€#€j�/à€r   c                 óF   ‡— d                      ˆfd„| D ¦   «         ¦  «        S )zB
	Join a path sequence using ',' and escaping ',' in the pieces.
	r   c              3   óN   •K  — | ]} ‰j         t          j        |¦  «        V — Œ d S )N)ÚsubÚriÚre_pct_encode)r   ÚyÚres     €r   ú	<genexpr>z!construct_path.<locals>.<genexpr>Z   s4   øè è € Ð9Ð9°!�&�"”&�Ô)¨1Ñ-Ô-Ð9Ð9Ð9Ð9Ð9Ð9r   )Újoin)r"   r9   s    `r   Úconstruct_pathr<   V   s,   ø€ ð 	�ŠÐ9Ð9Ð9Ð9°qÐ9Ñ9Ô9Ñ:Ô:Ð:r   Fc           
      óp  — |                       d¦  «        }d}d}|r�t          |t          ¦  «        r*|                     ¦   «         }|                      d¦  «        }n>t	          |¦  «        }d„ |D ¦   «         }|                     d¦  «         |d         d         }d„ |D ¦   «         }|sd}|�&t          |t          ¦  «        rt          |d	¬
¦  «        }d}d| v r#d| d                              dd¦  «        z   dz   }nEd| v r*| d         }d|v rd|z   dz   }|                       d¦  «        }nd}|                       d¦  «        }g }d| v r|                     | d         ¦  «         d| v r| 	                    | d         pd¦  «         |                       d¦  «        }	|r|	�d}	t	          d„ |                      ¦   «         D ¦   «                              ¦   «         ¦  «        }
|
 
                    t          ¬¦  «         |                       dd¦  «        du rdndt          j        |                       d¦  «        |	|d| vrdnt          | d         ¦  «        f¦  «        |sdnd                     d „ |D ¦   «         ¦  «        |€|
rt          j        |
¦  «        ndnt          j        |
|z   ¦  «        |€dnt!          |¦  «        fS )!z8Construct a RI dictionary from a clientparams dictionaryr    Nr$   c                 ó(   — g | ]\  }}|d k    ¯||f‘ŒS ©r$   r   ©r   r   r   s      r   r#   zconstruct.<locals>.<listcomp>i   s*   € Ð?Ð?Ð?™C˜A˜a¨A°Ò,>Ð,>�1�Q�%Ð,>Ð,>Ð,>r   )NNr   r   c                 ó(   — g | ]\  }}|d k    ¯||f‘ŒS r?   r   r@   s      r   r#   zconstruct.<locals>.<listcomp>l   s*   € ÐCÐCÐC¡  !°°]Ò0BÐ0B�q˜�eÐ0BÐ0BÐ0Br   r   )Úsepr   z[unix:r   r   r	   r   r   Úportr   r   r   Úpasswordz***c                 óH   — i | ]\  }}|d v¯	d|z   dz   t          |¦  «        “Œ S ))
ÚuserrD   rC   r   Ússlr   r   r   Úipvr    r   r	   )Ústrr@   s      r   r   zconstruct.<locals>.<dictcomp>Š   sN   € ð ð ð Ù ˜Q˜qØð ð ð ð ˆ�'ˆC�-•#�a‘&”&ðð ð r   )ÚkeyrG   FTÚpqsr   rF   c                 óN   — g | ]"}t           j                             |d ¦  «        ‘Œ#S )r   )r6   Úescape_path_rer5   )r   Ú	path_comps     r   r#   zconstruct.<locals>.<listcomp>œ   s;   € ð "ð "ð "àõ Ô×Ò˜ CÑ(Ô(ð"ð "ð "r   )r%   Ú
isinstanceÚdictr   ÚlistÚappendrI   r   r+   ÚextendÚsortÚget0r6   Úunsplit_netlocr;   Úconstruct_queryr<   )r"   Úobscure_passwordr    Úno_path_settingsr$   ÚsiterrC   r   r   rD   Údriver_paramss              r   Ú	constructr\   \   s"  € ð �EŠE�*ÑÔ€ØÐØ€Øð Ý��$ÑÔð $Ø�>Š>ÑÔ€5Ø—’˜mÑ,Ô,€;€;å�‰>Œ>€5Ø?Ð? 5Ð?Ñ?Ô?€;Ø×Ò�kÑ"Ô"Ð"Ø˜R” Ô#€;ØCÐC uÐCÑCÔCÐØ	ð ØÐð Ð¥
¨;½Ñ <Ô <ÐÝ˜K¨sÐ3Ñ3Ô3€+à€Ø
ˆa€K€KØ	�A�f”I×%Ò% c¨#Ñ.Ô.Ñ	.°Ñ	4€$€$à�€k€kØ	
ˆ6Œ€$ØˆD€[€[Ø
�‰*�sÑ
€4Ø	
�Šˆv‰Œ€$€$à	€$Ø	
�Šˆv‰Œ€$à
€Ø�!€O€OØ‡+‚+ˆa�
ŒmÑÔÐØ
ˆa€K€KØ‡+‚+ˆa�Œiˆo˜2ÑÔÐà�EŠE�*ÑÔ€Øð ˜Ð-Ø€(Ýð ð Ø$%§G¢G¡I¤Iðñ ô ÷ 	‚5�7„7ñô €ð ×Ò�ÐÑÔÐð �5Š5�˜ÑÔ $Ð&Ð&€%€%¨DåÔØ‡5‚5ˆ�=„=ØØØ˜ˆ?ˆ?€4€4¥ A f¤I¡¤ð	ñ ô ð ð €$€$˜Ÿšð "ð "àð"ñ "ô "ñ ô ð
 Ðð )6Ð?…2Ô�mÑ$Ô$Ð$¸4¸4åÔØÐ$Ñ$ñô ð Ð
€$€$¥>°+Ñ#>Ô#>ð'	ð r   c                 óV   — t          t          j        | t          ¬¦  «        |¬¦  «        S )z-Parse a Postgres IRI into a dictionary object)r   )r2   r6   ÚparserI   )Úsr   s     r   r^   r^   ©   s0   € åõ „(ˆ1�#ÐÑÔØð	ñ 	ô 	ð r   c                 óH   — t          j        t          | |¬¦  «        ¦  «        S )z/Return a Postgres IRI from a dictionary object.)rX   )r6   Úunsplitr\   )r"   rX   s     r   Ú	serializerb   ³   s    € å
Œ
•9˜QÐ3CÐDÑDÔDÑEÔEÐEr   Ú__main__z{src} -> {parsed!r} -> {serial})ÚsrcÚparsedÚserial)F)Ú__doc__Úresolvedr   r6   Ústringr   Úoperatorr   rU   r9   ÚcompileÚescapeÚ	unescapedrM   Úunescaper2   r<   r\   r^   rb   Ú__name__ÚsysÚargvr"   ÚprintÚformatr   r   r   ú<module>rt      s£  ððð ð $Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø€z�!�}„}€Øà 	€	€	€	Ø�”� Y R¤Y¨r¬|¸cÑ/AÑ%BÔ%BÐ%BÐ%BÐDÑEÔE€àœ[ð 7ð 7ð 7ð 7ðr *ð ;ð ;ð ;ð ;ðKð Kð Kð KðZ œð ð ð ð ðFð Fð Fð Fð ˆzÒÐØ€€€Ø
Œ(�1�2�2Œ,ð ð €QØ€%Ð)×0Ò0Ø	
ØˆE�!‰HŒHØˆI�e�e˜A‘h”hÑÔð 	1ñ 	ô 	ñ ô ð ð ð Ððð r   