§
    öÛgçB  ã                   ó^  — d 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  G d	„ d
e¦  «        Z G d„ de¦  «        Z	 ddlmZmZ n# e$ r eZd„ ZY nw xY wdZdZdZdZdZdZdZdZdZdZdZ  e!g d¢¦  «        Z"dddddd œZ#d!d"d#d$d%d&d'd(d)d*d+d,œZ$ej%        fd-„Z&ej%        d.j'        fdšd1„Z( ej)        d2d3d4dd5¬6¦  «        Z* ej)        d7d8d9d:d;¬<¦  «        Z+d=„ Z, eej)        d>e,¬?¦  «        Z) e)d@dAd!dBdC¬D¦  «        Z- e)dEdFdBdGd"¬H¦  «        Z. e)dIdJdKdL¬M¦  «        Z/ e)dNdOdPdBd#¬Q¦  «        Z0 e)dRdSdTdBd$¬Q¦  «        Z1 e)dUdVdBdW¬Q¦  «        Z2dX„ Z3 e)dYdZd[d\e3dB¬]¦  «        Z4 e)d^d&d_d`da¬b¦  «        Z5dc„ Z6 ee)e6¬d¦  «        Z7 e7dedfdgdBdh¬Q¦  «        Z8 ej)        didjdBdkdl¬m¦  «        Z9 ej)        dndodBdpdl¬m¦  «        Z:e0e1e-e/e.fZ; G dq„ drej<        ¦  «        Z=e2e5e4e8gZ>e> ?                    e;¦  «          G ds„ dte=¦  «        Z@eduf	 d›dx„ZAdy„ ZBdz„ ZCd{„ ZDd|„ ZEd}„ ZFeBeDeEeFd~œZGdeGfd„ZHd€„ ZId�„ ZJej%        defd‚„ZKddƒej%        d.dddud„f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dœd”„ZLeMd•k    rFddlNZN e@d–¬—¦  «        ZOeO P                    ¦   «         \  ZQZR eLeQd˜¬™¦  «        ZS eNjN        eS¦  «         dS dS )�aU  
Collect client connection parameters from various sources.

This module provides functions for collecting client parameters from various
sources such as user relative defaults, environment variables, and even command
line options.

There are two primary data-structures that this module deals with: normalized
parameters and denormalized parameters.

Normalized parameters is a proper mapping object, dictionary, consisting of
the parameters used to apply to a connection creation interface. The high-level
interface, ``collect`` returns normalized parameters.

Denormalized parameters is a sequence or iterable of key-value pairs. However,
the key is always a tuple whose components make up the "key-path". This is used
to support sub-dictionaries like settings::

	>>> normal_params = {
	 'user' : 'jwp',
	 'host' : 'localhost',
	 'settings' : {'default_statistics_target' : 200, 'search_path' : 'home,public'}
	}

Denormalized parameters are used to simplify the overriding of past parameters.
For this to work with dictionaries in a general fashion, dictionary objects
would need a "deep update" method.
é    N)Úchain)Úpartialé   )Úiri)Ú
pgpassfile)ÚErrorc                   ó   — e Zd ZdZdZdS )ÚClientParameterErrorz-*000z.clientparametersN)Ú__name__Ú
__module__Ú__qualname__ÚcodeÚsource© ó    úQ/granary/edev/quantum/lib/python3.11/site-packages/postgresql/clientparameters.pyr
   r
   +   s   € € € € € Ø€Ø
€€€r   r
   c                   ó   — e Zd ZdZdS )ÚServiceDoesNotExistErrorz-*srvN)r   r   r   r   r   r   r   r   r   .   s   € € € € € Ø€€€r   r   )ÚgetuserÚgetpassc                  ó   — dS )NÚpostgresr   r   r   r   r   r   5   s   € Ø	ˆr   Ú	localhosti8  Ú	PGSERVICEÚPGSERVICEFILEÚPGSYSCONFDIRzpg_service.confz.pg_service.confz.pgpassz.postgresqlÚ
postgresqlzpgpass.conf)ÚuserÚhostÚdatabaseÚportÚpasswordÚ
sslcrtfileÚ
sslkeyfileÚsslrootcrtfileÚsslrootkeyfileÚsslmodeÚserver_encodingÚconnect_timeoutÚtimezoneÚ	datestyleÚclient_encodingÚgeqoÚoptions)ÚTZÚ	DATESTYLEÚCLIENTENCODINGÚGEQOÚOPTIONSr   r    r   r!   r"   r'   Ússlkeyr)   Úkerberos4_realmÚkerberos5_servicer   )ÚUSERÚDATABASEÚHOSTÚPORTÚPASSWORDÚSSLMODEÚSSLKEYÚCONNECT_TIMEOUTÚREALMÚ
KRBSRVNAMEÚPASSFILEc              #   ó¤  K  — t          ¦   «         pd}t          j                             d|z   ¦  «        pd}t          j                             |t
          ¦  «        }dt          ¦   «         fV — dt          fV — dt          fV — t          j	        dk    rb|  
                    d¦  «        }|rJt          j                             |t          ¦  «        }t          j                             |t          ¦  «        }n%t          j                             |t          ¦  «        }d	t          j                             |d
¦  «        fdt          j                             |d¦  «        fdt          j                             |d¦  «        fdt          j                             |d¦  «        fd|ffD ]+\  }}t          j                             |¦  «        r|f|fV — Œ,dS )z=
	Produce the defaults based on the existing configuration.
	r   Ú~z	/dev/null)r   ©r   )r!   Úwin32ÚAPPDATAr#   zpostgresql.crtr$   zpostgresql.keyr%   zroot.crtÚsslrootcrlfilezroot.crlr   N)r   ÚosÚpathÚ
expanduserÚjoinÚpg_home_directoryÚdefault_hostÚdefault_portÚsysÚplatformÚgetÚpg_appdata_directoryÚpg_appdata_passfileÚpg_home_passfileÚexists)Úenvironr   ÚuserdirÚpgdataÚappdatar   ÚkÚvs           r   Údefaultsr\   ~   sŸ  è è € õ 	‰	Œ	Ð�Z€ÝŒ7×Ò˜c D™jÑ)Ô)Ð8¨[€Ý
Œ'�,Š,�wÕ 1Ñ
2Ô
2€Ø•'‘)”)ÐÐÐÐØ•,ÐÐÐÐØ•,ÐÐÐÐõ „L�GÒÐØ�KŠK˜	Ñ"Ô"€'Øð :ÝŒG�LŠL˜Õ"6Ñ7Ô7€6Ý”—’˜VÕ%8Ñ9Ô9€:øåŒw�|Š|˜GÕ%5Ñ6Ô6€*ð •”—’˜fÐ&6Ñ7Ô7Ð8Ø•”—’˜fÐ&6Ñ7Ô7Ð8Ø•R”W—\’\ &¨*Ñ5Ô5Ð6Ø•R”W—\’\ &¨*Ñ5Ô5Ð6Ø�Ððð ð �T€Qˆõ „W‡^‚^�AÑÔð Ø
ˆˆqˆ€=€=€=øðð r   ÚPGÚmodifierú!environment variable key modifierc              #   ó2  ‡ ‡K  —  ‰d¦  «        } ‰d¦  «        }|‰ v r)‰ |                               ¦   «         dk    rdd|dz   ffV — t                               ¦   «         D ]!\  }} ‰|¦  «        }|‰ v r|f‰ |         fV — Œ"|‰ v rd‰ |         fV — ˆfd„t                               ¦   «         D ¦   «         }ˆ fd	„|D ¦   «         }t          ‰ v rd
‰ t                   fV — t
          ‰ v rd‰ t
                   fV —  ‰d¦  «        }|‰ v rd‰ |         fV — dS dS )aÔ  
	Create a clientparams dictionary from the given environment variables.

		PGUSER -> user
		PGDATABASE -> database
		PGHOST -> host
		PGHOSTADDR -> host (overrides PGHOST)
		PGPORT -> port

		PGPASSWORD -> password
		PGPASSFILE -> pgpassfile

		PGSSLMODE -> sslmode
		PGREQUIRESSL gets rewritten into "sslmode = 'require'".

		PGREALM -> kerberos4_realm
		PGKRBSVRNAME -> kerberos5_service
		PGSSLKEY -> sslkey

		PGTZ -> settings['timezone']
		PGDATESTYLE -> settings['datestyle']
		PGCLIENTENCODING -> settings['client_encoding']
		PGGEQO -> settings['geqo']

	The 'PG' prefix can be customized via the `modifier` argument. However,
	PGSYSCONFDIR will not respect any such change as it's not a client parameter
	itself.
	ÚHOSTADDRÚ
REQUIRESSLÚ1)r'   Úrequirez=1rD   c              3   ó8   •K  — | ]\  }} ‰|¦  «        |fV — Œd S ©Nr   )Ú.0rZ   r[   r^   s      €r   ú	<genexpr>zenvvars.<locals>.<genexpr>Ç   sE   øè è € ð ð Ù�q˜€8€8ˆA�;„;�Ððð ð ð ð ð r   c                 ó6   •— g | ]\  }}|‰v ¯	d |f‰|         f‘ŒS )Úsettingsr   )rg   rZ   r[   rV   s      €r   ú
<listcomp>zenvvars.<locals>.<listcomp>Ê   s7   ø€ ð ð ð Ù%) Q¨ÀAÈÀLÀL€J�Ð�W˜Q”ZÐ ÀLÀLÀLr   úconfig-pg_sysconfdirúconfig-pg_service_fileÚSERVICEÚ
pg_serviceN)ÚstripÚdefault_envvar_mapÚitemsÚdefault_envvar_settings_mapÚpg_sysconfdir_envvarÚpg_service_file_envvar)	rV   r^   ÚhostaddrÚreqsslrZ   r[   Úenvvar_settings_maprj   Úservices	   ``       r   Úenvvarsrz   �   s·  øøè è € ð: ˆH�ZÑ Ô €Ø
ˆ(�<Ñ
 Ô
 €Ø
ˆgÐÐØˆV„_×ÒÑÔ Ò#Ð#Ø	˜	 6¨D¡=Ð1Ð	1Ð1Ð1Ð1å×%Ò%Ñ'Ô'ð ð �T€QˆØ€hˆq�k„k€!Øˆ'€\€\Øˆ$�˜”
Ð	ÐÐÐøØ�ÐÐØ	�G˜HÔ%Ð&Ð&Ð&Ð&ðð ð ð Ý9×?Ò?ÑAÔAðñ ô Ððð ð ð Ø-@ðñ ô €õ
 ˜GÐ#Ð#Ø	 Õ)=Ô!>Ð?Ð?Ð?Ð?å˜gÐ%Ð%Ø	! 7Õ+AÔ#BÐCÐCÐCÐCàˆ8�IÑÔ€ØˆwÐÐØ	�w˜wÔ'Ð(Ð(Ð(Ð(Ð(Ð(ð Ðr   z-Dz	--datadirz%location of the database storage areaÚdatadir)ÚhelpÚdefaultÚdestz-1z--with-transactionÚin_xactÚ
store_truez&run operation with a transaction block)r~   Úactionr|   c                 ó`   — |€dn|}|j         j                             | j        f|f¦  «         d S )NT©ÚvaluesÚdb_client_parametersÚappendr~   ©ÚoptionÚopt_strÚvalueÚparsers       r   Úappend_db_client_parametersrŒ   é   sB   € à�ˆˆ E€Ø„Ô#×*Ò*Ø
„K€>�5Ðñô ð ð ð r   Úcallback)r�   r�   z-Uz
--usernameÚstrzuser name to connect as)r~   Útyper|   z-dz
--databasezdatabase's name)r�   r|   r~   z-Wz
--passwordÚprompt_passwordzprompt for password)r~   r|   z-hz--hostzdatabase server host)r|   r�   r~   z-pz--portzdatabase server portz--unixzpath to filesystem socketÚunixc                 óä   — |                      dd¦  «        }t          |¦  «        dk    rt          d|›�¦  «        ‚|j        j                             | j        |d         f|d         f¦  «         dS )z.split the string into a (key,value) pair tupleú=r   é   zinvalid setting argument, r   N)ÚsplitÚlenÚOptionValueErrorr„   r…   r†   r~   )rˆ   r‰   rŠ   r‹   Úkvs        r   Úappend_settingsr™     sx   € à‡k‚k�#�qÑÔ€Ýˆ�G„Gˆq‚L€LÝÐ¸%¸%ÐAÑBÔBÐBØ„Ô#×*Ò*Ø
„K��A”Ð˜˜AœÐñô ð ð ð r   z-sz	--settingrj   z*run-time parameters to set upon connecting)r~   r|   r�   r�   z
--ssl-modezASSL requirement for connectivity: require, prefer, allow, disable)rd   ÚpreferÚallowÚdisableÚchoice)r~   r|   Úchoicesr�   c                 óR   — |j         j                             | j        |f¦  «         d S rf   rƒ   r‡   s       r   Úappend_db_client_x_parametersr    +  s(   € Ø„Ô#×*Ò*¨F¬K¸Ð+?Ñ@Ô@Ð@Ð@Ð@r   )r�   z-Iz--irizbdatabase locator string [pq://user:password@host:port/database?[driver_param]=value&setting=value]Úpq_iriz-lzBbind the library found in postgresql.sys.libpath to the connectionÚlibr†   )r|   r�   r~   r�   z-Lzappend the library pathÚlibpathc                   ó,   ‡ — e Zd ZdZeZˆ fd„Zd„ Zˆ xZS )ÚStandardParsera  
	Option parser limited to the basic -U, -h, -p, -W, and -D options.
	This parser subclass is necessary for two reasons:

	 1. _add_help_option override to not conflict with -h
	 2. Initialize the db_client_parameters on the parser's values.

	See the DefaultParser for more fun.
	c                 óH   •—  t          ¦   «         j        |i |¤Ž}g |_        |S rf   )ÚsuperÚget_default_valuesr…   )ÚselfÚargsÚkwr[   Ú	__class__s       €r   r¨   z!StandardParser.get_default_valuesU  s+   ø€ Ø …e�g„gÔ  $Ð-¨"Ð-Ð-€!Ø€!ÔØ	
€(r   c                 ó6   — |                       ddd¬¦  «         d S )Nz--helpr|   zshow this help message and exit)r�   r|   )Ú
add_option)r©   s    r   Ú_add_help_optionzStandardParser._add_help_optionZ  s/   € à‡/‚/�(ØØ
+ð ñ ô ð ð ð r   )	r   r   r   Ú__doc__Ústandard_optparse_optionsÚstandard_option_listr¨   r¯   Ú__classcell__)r¬   s   @r   r¥   r¥   I  sY   ø€ € € € € ðð ð 2Ððð ð ð ð ð
ð ð ð ð ð ð r   r¥   c                   ó   — e Zd ZdZeZdS )ÚDefaultParserzU
	Parser that includes a variety of connectivity options.
	(IRI, sslmode, settings)
	N)r   r   r   r°   Údefault_optparse_optionsr²   r   r   r   rµ   rµ   k  s"   € € € € € ðð ð 1ÐÐÐr   rµ   Ú Ú
parametersú1a fully normalized set of client parameters(dict)c                 ó¸  — |                       dd¦  «        }|                       dd¦  «        }|                       dd¦  «        }|du ràt          j                             ¦   «         rM|p|                       dd¦  «        }|dt	          j        | d¬	¦  «        z   d
z   z  } |d|z   dz   ¦  «        | d<   dS t          j                             ¦   «         }|                     t          j	        ¦  «        r1|dt          |¦  «        t          t          j	        ¦  «        z
  …         }|| d<   dS |                      d¦  «        €|�t          j        | |¦  «        | d<   dS dS dS )aË  
	Given a parameters dictionary, resolve the 'password' key.

	If `prompt_password` is `True`.
	 If sys.stdin is a TTY, use `getpass` to prompt the user.
	 Otherwise, read a single line from sys.stdin.
	 delete 'prompt_password' from the dictionary.

	Otherwise.
	 If the 'password' key is `None`, attempt to resolve the password using the
	 'pgpassfile' key.

	Finally, remove the pgpassfile key as the password has been resolved for the
	given parameters.
	r�   Fr   NÚprompt_titleTr·   ú[)Úobscure_passwordú]zPassword for z: r"   )ÚpoprO   ÚstdinÚisattyÚpg_iriÚ	serializeÚreadlineÚendswithrH   Úlinesepr–   rQ   Úpg_passÚlookup_pgpass)r¸   r   r»   Úprompt_for_passwordr   ÚpromptÚpws          r   Úresolve_passwordrÌ   r  sa  € ð( "—~’~Ð&7¸Ñ?Ô?ÐØ�nŠn˜\¨4Ñ0Ô0€Ø—’˜~¨tÑ4Ô4€Ø˜4ÐÐå„Y×ÒÑÔð ØÐ>˜JŸNšN¨>¸2Ñ>Ô>€6Ø	ˆS•6Ô# JÀ4ÐHÑHÔHÑHÈ3ÑNÑN€6Ø#˜G O°fÑ$<¸dÑ$BÑCÔC€:ˆjÑÐÐõ 	Œ	×ÒÑÔ€2à‡k‚k•"”*ÑÔð &Ø	Ð$�S�‰WŒW•S�œ‘_”_Ñ$Ð$Ô	%€BØ€:ˆjÑÐÐà‡^‚^�JÑÔÐ'àÐÝ$Ô2°:¸zÑJÔJ€JˆzÑÐÐð (Ð'àÐr   c              #   ól   K  — t          | ¦  «        }|                     ¦   «         D ]\  }}d|f|fV — Œd S )Nrj   )Údictrr   )ÚsdictÚconfigÚdrZ   r[   s        r   Ú
x_settingsrÒ   Ÿ  sN   è è € Ýˆ�;„;€Ø�gŠg‰iŒið ð �U€aˆØ
�aˆ˜!ÐÐÐÐÐðð r   c              #   ó¸   K  — |                       ¦   «         D ]B\  }}|dk    r0t          |¦  «                              ¦   «         D ]\  }}d|f|fV — ŒŒ;|f|fV — ŒCdS )z»
	Given a fully normalized parameters dictionary:
	{'host': 'localhost', 'settings' : {'timezone':'utc'}}

	Denormalize it:
	[(('host',), 'localhost'), (('settings','timezone'), 'utc')]
	rj   N)rr   rÎ   )ÚprZ   r[   ÚskÚsvs        r   Údenormalize_parametersr×   ¤  sˆ   è è € ð �GŠG‰IŒIð ð �S€Q€qØˆ*‚_€_Ý�a‘”—’‘”ð !ð !�v€rˆ2Ø˜Ð˜RÐ
 Ð Ð Ð Ð ð!ð ˆ$�ˆ€?€?€?€?ðð r   c                 óD   — t          t          j        | ¦  «        ¦  «        S rf   )r×   rÂ   Úparse)r   rÐ   s     r   Úx_pq_irirÚ   ³  s   € Ý�vœ|¨CÑ0Ô0Ñ1Ô1Ð1r   c              #   ó–  K  — g }|                      d¦  «        }|�|                     |¦  «         nft          j                             dt          ¦   «         z   ¦  «        }|                     t          j                             |t          ¦  «        ¦  «         |                      d¦  «        }|rP|                      dt          ¦  «        }t          j                             ||¦  «        }|                     |¦  «         |D ]ð}t          j         	                    |¦  «        sŒ"t          j        ¦   «         }|                     |¦  «         	 |                     | ¦  «        }n# t          j        $ r Y Œrw xY w|D ]u\  }	}
|	                     ¦   «         }	|	dk    rdd                     |	|
f¦  «        fV — Œ;|	dk    rŒB|	d	k    rd
|
fV — ŒO|	dk    rd|
fV — Œ\|	t           vr	d|	f|
fV — Œn|	f|
fV — Œv d S t#          d„ |D ¦   «         ¦  «        rdd                     |¦  «        i}nddi}t%          d                     | ¦  «        |¬¦  «        ‚)NÚpg_service_filerC   Úpg_sysconfdirÚpg_service_filenameÚldapÚpg_ldapú:ro   rv   rD   Údbname)r    rj   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r   )rH   rI   rU   )rg   Úxs     r   rk   z x_pg_service.<locals>.<listcomp>ì  s&   € Ð	3Ð	3Ð	3 �"Œ'�.Š.˜Ñ
Ô
Ð	3Ð	3Ð	3r   Úcontextz, Úhintz No service files could be found.zcannot find service named "{0}")Údetails)rQ   r†   rH   rI   rJ   r   rK   Úpg_service_user_filenamerÞ   rU   ÚconfigparserÚRawConfigParserÚreadrr   ÚNoSectionErrorÚlowerÚpg_service_driver_parametersÚsumr   Úformat)Úservice_namerÐ   Úservice_filesÚfÚhomeÚ
sysconfdirÚsfÚcpÚsrZ   r[   rç   s               r   Úx_pg_servicerù   ¸  sŸ  è è € Ø€à‡Z‚ZÐ!Ñ"Ô"€Ø€Mà×Ò�qÑÔÐÐõ 
Œ×	Ò	˜C¥'¡)¤)™OÑ	,Ô	,€$Ø×Ò•r”w—|’| DÕ*BÑCÔCÑDÔDÐDð �jŠj˜Ñ)Ô)€Øð Ø‡z‚zÐ'Õ)<Ñ=Ô=€"Ý„g‡l‚l�:˜rÑ"Ô"€!à×Ò�qÑÔÐàð +ð +€RÝ	Œ�Š˜Ñ	Ô	ð ØåÔ#Ñ%Ô%€"Ø‡'‚'ˆ"�+„+€+ðØ	‡x‚x�ÑÔ€1€1øÝ	Ô	$ð ð ð Ø€8ðøøøð ð 	ð 	�f€qˆ!Ø‡w‚w�y„y€1Øˆ6‚k€kØ�c—h’h  1˜vÑ&Ô&Ð
'Ð'Ð'Ð'Ð'Ø	ˆ\ÒÐàØ	ˆZŠˆà�aˆ.ÐÐÐÐØ	ˆXŠˆØ˜!Ð
ÐÐÐÐØ	Õ-Ð-Ð-à˜ˆ?˜AÐ
ÐÐÐÐàˆ4�ˆ)€O€O€O€Oà€5€5õ 	Ð	3Ð	3 ]Ð	3Ñ	3Ô	3Ñ4Ô4ð àˆt�yŠy˜Ñ'Ô'ð€7€7ð
 Ð.ð€7õ 	!Ø$×+Ò+¨LÑ9Ô9Øð	ñ 	ô 	ð s   ÅE"Å"E4Å3E4c                 ó@   — t          dt          | ¦  «        z   ¦  «        ‚)Nzcannot resolve ldap URLs: )ÚNotImplementedErrorrŽ   )Úldap_urlrÐ   s     r   Ú	x_pg_ldaprý   ù  s   € ÝÐ7½#¸h¹-¼-ÑGÑHÔHÐHr   )rj   r¡   ro   rà   c              #   óN  K  — |pi }| D ]›}|d         }t          |t          ¦  «        rx|                     d¦  «        r!|d         ||t          d¦  «        d…         <   ŒU|                     |¦  «        }|r*t           ||d         |¦  «        ||¬¦  «        D ]}|V — ŒŒ–Œ—|V — ŒœdS )zq
	Given an iterable of standardized settings,

		[((path0, path1, ..., pathN), value)]

	Process any callbacks.
	r   zconfig-r   N)rÐ   Ú	callbacks)Ú
isinstancerŽ   Ú
startswithr–   rQ   Úextrapolate)ÚiterrÐ   rÿ   ÚitemrZ   Úcbrä   s          r   r  r    së   è è € ð ˆ,�B€Øð ð €TØ
ˆ1„g€!Ý�•3ÑÔð Ø‡l‚l�9ÑÔð 
Ø!% a¤€Fˆ1�S�‰^Œ^ˆ_ˆ_ÔÑÐà	�Š�qÑ	Ô	€BØ	ð 
ÝØ€bˆˆaŒ�&ÑÔØØðñ ô ð ð ˆð
 €g€g€g€gðð 
à	€:€:€:€:ð#ð r   c                 óÂ   — | \  }}|d         dk    r|dv rd|d<   d}n2|d         dk    rd|d<   n |d         dk    r|                      ¦   «         }t          |¦  «        |fS )z-
	Translate a parameter into standard form.
	r   Ú
requiressl)rc   Tr'   rd   râ   r    )rí   Útuple)r˜   rZ   r[   s      r   Únormalize_parameterr	    s|   € ð �€!€QØ€a„DˆLÒÐ˜Q +Ð-Ð-Ø	€!€A�$Ø€!€!Øˆ„dˆhÒÐØ	€!€A�$€$Øˆ„dˆiÒÐØ‡g‚g�i„i€!Ý	ˆq‰Œ�!ˆÐr   c                 óš   — i }| D ]E\  }}|}|dt          |¦  «        dz
  …         D ]}|                     |i ¦  «        }Œ|||d         <   ŒF|S )zl
	Normally takes the output of `extrapolate` and makes a dictionary suitable
	for applying to a connector.
	Nr   éÿÿÿÿ)r–   Ú
setdefault)r  ÚrdrZ   r[   ÚsdrÕ   s         r   Ú	normalizer  -  sk   € ð
 	€Øð ð �V€aˆØ	€"Øˆi�s�1‰vŒv�a‰xˆiŒLð ð €bØ
�Š�b˜"ÑÔ€2€2Ø€"€Q€r„U�)€)Ø
€r   c                 ó€   — |                       t          |¦  «        }|r t          j                             ||¦  «        S d S rf   )rQ   rt   rH   rI   rK   )rV   Údefault_pg_sysconfdirÚdefault_pg_service_filenamerõ   s       r   Úresolve_pg_service_filer  :  s=   € ð
 �kŠkÕ.Ð0EÑFÔF€Øð ?Ý	Œ�Š�jÐ"=Ñ	>Ô	>Ð>Øˆr   Fr   Úparsed_optionsú(options parsed using the `DefaultParser`Úno_defaultsú;Don't build-out defaults like 'user' from getpass.getuser()rV   ú/environment variables to use, `None` to disableÚenviron_prefixú2prefix to use for collecting environment variablesr  údefault 'PGSYSCONFDIR' to userÜ   ú#the pg-service file to actually user»   ú3additional title to use if a prompt request is madeú5base-client parameters to use(applied after defaults)c                 ó`  — g }|                      d|fg¦  «         |�|                      d|fg¦  «         |�|                      d|fg¦  «         |s#|                      t          |¬¦  «        ¦  «         |r/|                      t          t          |¦  «        ¦  «        ¦  «         |�)|                      t	          ||j        ¬¦  «        ¦  «         t          | dd¦  «        }	|	r|                      |	¦  «         t          t          t          |Ž ¦  «        ¦  «        }
|�t          |
|¬¦  «         |
S )	zf
	Build a normalized client parameters dictionary for use with a connection
	construction interface.
	zconfig-environNrl   rm   )rV   )rV   r^   r…   )r»   )r†   r\   r×   rÎ   rz   Ú__add__Úgetattrr  r  r   rÌ   )r  r  rV   r  r  rÜ   r»   r¸   Úd_parametersÚcopÚcpds              r   Úcollectr%  D  sv  € ð €Ø×ÒÐ'¨Ð1Ð2Ñ3Ô3Ð3ØÐ%Ø×ÒØÐ1Ð2ðñ ô ð ð ÐØ×ÒØ˜oÐ.ðñ ô ð ð 	ð 3Ø×Ò•h¨Ð1Ñ1Ô1Ñ2Ô2Ð2àð @Ø×ÒÕ,­T°*Ñ-=Ô-=Ñ>Ô>Ñ?Ô?Ð?àÐØ×Ò•gØØÔ$ðñ ô ñ ô ð õ ˆ~Ð5°tÑ<Ô<€Øð Ø×Ò�cÑÔÐå•�U LÐ1Ñ2Ô2Ñ3Ô3€ØÐÝ�3 |Ð4Ñ4Ô4Ð4Ø€r   Ú__main__z5print the clientparams dictionary for the environment)ÚdescriptionÚcustom_prompt_title)r  r»   )r^   r_   )r¸   r¹   )r  r  r  r  rV   r  r  r  r  r  rÜ   r  r»   r  r¸   r  )Tr°   rO   rH   ré   ÚoptparseÚ	itertoolsr   Ú	functoolsr   r·   r   rÂ   r   rÇ   Ú
exceptionsr   r
   r   r   r   ÚImportErrorÚ	raw_inputrM   rN   Úpg_service_envvarru   rt   rÞ   rè   rT   rL   rR   rS   Úsetrî   rs   rq   rV   r\   r   rz   Úmake_optionÚoption_datadirÚoption_in_xactrŒ   Úoption_userÚoption_databaseÚoption_passwordÚoption_hostÚoption_portÚoption_unixr™   Úoption_settingsÚoption_sslmoder    Úmake_x_optionÚ
option_iriÚ
option_libÚoption_libpathr±   ÚOptionParserr¥   r¶   Úextendrµ   rÌ   rÒ   r×   rÚ   rù   rý   Údefault_x_callbacksr  r	  r  r  r%  r   ÚpprintrÔ   Ú
parse_argsÚcoÚcaÚrr   r   r   ú<module>rH     s  ððð ð8 €
€
€
Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð ðð ð ð ð ˜5ñ ô ð ðð ð ð ð Ð3ñ ô ð ðØ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%øØð ð ð Ø€ðð ð ð ð ðøøøð
 €Ø€àÐ Ø(Ð Ø%Ð Ø'Ð Ø-Ð ð Ð Ø!Ð ð $Ð Ø#Ð ð  #˜sð $ð $ð $ñ  ô  Ð ð& 	ØØ%Ø
Øðð Ð ð ØØ
Ø
ØØØØ&àØ#ð ð'ð Ð ð, ”zð ð ð ð ð> ”jÐSWÔS_ð :)ð :)ð :)ð :)ð :)ð@ &�Ô% d¨KØ/ØØðñ ô €ð &�Ô% dÐ,@ØØ
Ø0ðñ ô €ðð ð ð ˆgØ	ÔØ
Ø'ðñ ô €ð ˆk˜$ ØØØ!ðñ ô €ð
 �+˜d LØØØðñ ô €ð
 �+˜d LØØðñ ô €ð ˆk˜$ ØØØðñ ô €ð
 ˆk˜$ ØØØðñ ô €ð
 ˆk˜(Ø#ØØðñ ô €ðð ð ð �+˜d KØØ4ØØð	ñ ô €ð �˜\ØØKØ1Øð	ñ ô €ðAð Að Aà�˜Ð0MÐNÑNÔN€àˆ]˜4 ØlØØðñ ô €
ð "ˆXÔ! $ØLØØØ
ð	ñ ô €
ð &�Ô% dØ!ØØØ
ð	ñ ô €ð ˆkØˆoØðÐ ðð ð ð ð �XÔ*ñ ô ð ð4 ØØàðÐ ð × Ò Ð 9Ñ :Ô :Ð :ð1ð 1ð 1ð 1ð 1�Nñ 1ô 1ð 1ð Øð)KØAð)Kð )Kð )Kð )KðZð ð ð
ð ð ð2ð 2ð 2ð
?ð ?ð ?ðBIð Ið Ið ØØØð	ð Ð ð  $Ð1Dð ð ð ð ð8ð ð ðð ð ð Œ:ØØ2ðð ð ð ð @DØOTØ?A¼zØIMØ;?Ø;?ØHJØHJð+Ø<ð+àLð+ð =ð+ð Gð	+ð
 9ð+ð 9ð+ð Fð+ð Fð+ð +ð +ð +ðZ ˆzÒÐØ€€€Ø€]ØGðñ ô €ð �LŠL‰NŒN�€"€bØ€W˜bÐ1FÐGÑGÔG€Ø€„ˆqÑÔÐÐÐð Ðs   ÁA Á
A$Á#A$