Ë
    GKÕi¡K  ã                   ó`  — d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZ d dl m!Z!  ejD                   ejF                  e$«      «      Z%dd	d
œZ&dZ'dZ(dZ) ejT                  «       Z+ G d„ d«      Z,de-fd„Z.dd„Z/de-fd„Z0y)é    N)Ú	lru_cacheÚwraps)ÚAnyÚDictÚOptional)ÚaptÚevent_loggerÚ
exceptionsÚhttpÚmessagesÚsnapÚsystemÚutil)	ÚAPT_NEWS_URLÚBASE_CONTRACT_URLÚBASE_LIVEPATCH_URLÚBASE_SECURITY_URLÚBASE_VULNERABILITY_DATA_URLÚCONFIG_DEFAULTSÚCONFIG_FIELD_ENVVAR_ALLOWLISTÚDEFAULT_CONFIG_FILEÚDEFAULT_DATA_DIR)Ústate_filesÚuser_config_file)Ú	safe_loadÚnameÚtype)ÚavailableResourcesÚresourceEntitlementsÚ_unset)Ú
http_proxyÚhttps_proxyÚapt_http_proxyÚapt_https_proxyÚua_apt_http_proxyÚua_apt_https_proxyÚglobal_apt_http_proxyÚglobal_apt_https_proxyÚupdate_messaging_timerÚmetering_timerÚapt_newsÚapt_news_urlÚvulnerability_data_url_prefixÚlxd_guest_attach)
Úcontract_urlÚdata_dirÚfeaturesÚlog_fileÚ	log_levelÚsecurity_urlr-   Úsettings_overridesÚ	ua_configÚlivepatch_urlc            	       óø  — e Zd ZdZdZdZ	 	 	 d1deeee	f      dee
j                     dee   ddfd	„Zedefd
„«       Zedefd„«       Zedefd„«       Zedee   fd„«       Zej$                  defd„«       Zedee   fd„«       Zej$                  defd„«       Zedee   fd„«       Zej$                  defd„«       Zedee   fd„«       Zej$                  defd„«       Zedefd„«       Zej$                  defd„«       Ze ed¬«      dee   fd„«       «       Zej$                  defd„«       Ze ed¬«      dee   fd„«       «       Zej$                  defd„«       Zedefd„«       Zej$                  defd„«       Zedefd„«       Zej$                  defd „«       Zedefd!„«       Zej$                  defd"„«       Zedefd#„«       Zej$                  defd$„«       Zedefd%„«       Z e j$                  defd&„«       Z edefd'„«       Z!e!j$                  defd(„«       Z!ede
jD                  fd)„«       Z#e#j$                  de
jD                  fd*„«       Z#ed+„ «       Z$ed,„ «       Z%edefd-„«       Z&ed.„ «       Z'd/„ Z(d0„ Z)y)2ÚUAConfig)r%   r&   )r'   r(   )r#   r$   NÚcfgÚuser_configÚseriesÚreturnc                 óp  — |rd| _         || _        d| _        n1t        «       | _         t	        | j                   «      \  | _        | _        |r|| _        n$	 t        j
                  j                  «       | _        d| j                  v rOt        j                  j                  i | j
                  j                  «       ¥| j                  d   ¥d¬«      | _        || _        y# t        $ rO}t        j                  d|¬«       t        j                  d«       t        j                  «       | _        Y d}~Œ¸d}~ww xY w)Ú NzError loading user config)Úexc_infozUsing default config valuesr6   T)Ú optional_type_errors_become_null)Úcfg_pathr:   Úinvalid_keysÚget_config_pathÚparse_configr;   r   ÚreadÚ	ExceptionÚLOGÚwarningÚUserConfigDataÚ	from_dictÚto_dictr<   )Úselfr:   r;   r<   Úes        ú1/usr/lib/python3/dist-packages/uaclient/config.pyÚ__init__zUAConfig.__init__V   s  € ñ Ø ˆDŒMØˆDŒHØ $ˆDÕä+Ó-ˆDŒMÜ*6°t·}±}Ó*EÑ'ˆDŒH�dÔ'áØ*ˆDÕðEÜ#3×#?Ñ#?×#DÑ#DÓ#F�Ô ð ˜$Ÿ(™(Ñ"Ü/×>Ñ>×HÑHØG�4×#Ñ#×+Ñ+Ó-ÐG°·±¸+Ñ1FÐGØ15ð  Ió  ˆDÔð
 ˆ�øô ò EÜ—‘Ð7À!�ÔDÜ—‘Ð9Ô:Ü#3×#BÑ#BÓ#D�× Ñ ûðEús   Á#C Ã	D5Ã&AD0Ä0D5c                 óB   — | j                   j                  dt        «      S )Nr/   )r:   Úgetr   ©rM   s    rO   r/   zUAConfig.contract_urly   ó   € à�x‰x�|‰|˜NÔ,=Ó>Ð>ó    c                 óB   — | j                   j                  dt        «      S )Nr4   )r:   rR   r   rS   s    rO   r4   zUAConfig.security_url}   rT   rU   c                 óB   — | j                   j                  dt        «      S )Nr7   )r:   rR   r   rS   s    rO   r7   zUAConfig.livepatch_url�   s   € à�x‰x�|‰|˜OÔ-?Ó@Ð@rU   c                 ó.   — | j                   j                  S ©N)r;   r!   rS   s    rO   r!   zUAConfig.http_proxy…   s   € à×Ñ×*Ñ*Ð*rU   Úvaluec                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r!   r   Úwrite©rM   rZ   s     rO   r!   zUAConfig.http_proxy‰   s*   € à&+ˆ×ÑÔ#Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ó.   — | j                   j                  S rY   )r;   r"   rS   s    rO   r"   zUAConfig.https_proxyŽ   s   € à×Ñ×+Ñ+Ð+rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r"   r   r\   r]   s     rO   r"   zUAConfig.https_proxy’   s*   € à',ˆ×ÑÔ$Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ó.   — | j                   j                  S rY   )r;   r&   rS   s    rO   r&   zUAConfig.ua_apt_https_proxy—   s   € à×Ñ×2Ñ2Ð2rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r&   r   r\   r]   s     rO   r&   zUAConfig.ua_apt_https_proxy›   s*   € à.3ˆ×ÑÔ+Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ó.   — | j                   j                  S rY   )r;   r%   rS   s    rO   r%   zUAConfig.ua_apt_http_proxy    s   € à×Ñ×1Ñ1Ð1rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r%   r   r\   r]   s     rO   r%   zUAConfig.ua_apt_http_proxy¤   s*   € à-2ˆ×ÑÔ*Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 óB   — | j                   j                  }|€t        S |S rY   )r;   r-   r   ©rM   Úvals     rO   r-   z&UAConfig.vulnerability_data_url_prefix©   s#   € à×Ñ×<Ñ<ˆØˆ;Ü.Ð.Øˆ
rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r-   r   r\   r]   s     rO   r-   z&UAConfig.vulnerability_data_url_prefix°   s*   € à9>ˆ×ÑÔ6Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   )Úmaxsizec                 óÔ   — | j                   j                  }|r|S | j                   j                  }|r6t        j	                  t
        j                  j                  dd¬«      «       |S y )Nr#   r'   ©ÚoldÚnew)r;   r'   r#   ÚeventÚinfor   ÚWARNING_DEPRECATED_FIELDÚformat©rM   Ú
global_valÚold_apt_vals      rO   r'   zUAConfig.global_apt_http_proxyµ   sh   € ð ×%Ñ%×;Ñ;ˆ
ÙØÐà×&Ñ&×5Ñ5ˆÙÜ�J‰JÜ×1Ñ1×8Ñ8Ø(Ð.Eð 9ó ôð
 ÐØrU   c                 óê   — || j                   _        d | j                   _        t        j                  j                  j                  «        t        j                   j                  | j                   «       y rY   )r;   r'   r#   r9   ÚfgetÚcache_clearr   r\   r]   s     rO   r'   zUAConfig.global_apt_http_proxyÆ   sP   € à16ˆ×ÑÔ.Ø*.ˆ×ÑÔ'Ü×&Ñ&×+Ñ+×7Ñ7Ô9Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 óÔ   — | j                   j                  }|r|S | j                   j                  }|r6t        j	                  t
        j                  j                  dd¬«      «       |S y )Nr$   r(   rj   )r;   r(   r$   rm   rn   r   ro   rp   rq   s      rO   r(   zUAConfig.global_apt_https_proxyÍ   sh   € ð ×%Ñ%×<Ñ<ˆ
ÙØÐà×&Ñ&×6Ñ6ˆÙÜ�J‰JÜ×1Ñ1×8Ñ8Ø)Ð/Gð 9ó ôð
 ÐØrU   c                 óê   — || j                   _        d | j                   _        t        j                  j                  j                  «        t        j                   j                  | j                   «       y rY   )r;   r(   r$   r9   ru   rv   r   r\   r]   s     rO   r(   zUAConfig.global_apt_https_proxyÞ   sP   € à27ˆ×ÑÔ/Ø+/ˆ×ÑÔ(Ü×'Ñ'×,Ñ,×8Ñ8Ô:Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ó8   — | j                   j                  }|€y|S )Ni`T  )r;   r)   re   s     rO   r)   zUAConfig.update_messaging_timerå   s    € à×Ñ×5Ñ5ˆØˆ;ØØˆ
rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r)   r   r\   r]   s     rO   r)   zUAConfig.update_messaging_timerì   s*   € à27ˆ×ÑÔ/Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ó8   — | j                   j                  }|€y|S )Ni@8  )r;   r*   re   s     rO   r*   zUAConfig.metering_timerñ   s    € à×Ñ×-Ñ-ˆØˆ;ØØˆ
rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r*   r   r\   r]   s     rO   r*   zUAConfig.metering_timerø   s*   € à*/ˆ×ÑÔ'Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ó8   — | j                   j                  }|€y|S )NF)r;   Úpoll_for_pro_licensere   s     rO   r~   zUAConfig.poll_for_pro_licenseý   s"   € ð
 ×Ñ×3Ñ3ˆØˆ;ØØˆ
rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r~   r   r\   r]   s     rO   r~   zUAConfig.poll_for_pro_license  s*   € à05ˆ×ÑÔ-Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ó8   — | j                   j                  }|€y|S )NiX  )r;   Úpolling_error_retry_delayre   s     rO   r�   z"UAConfig.polling_error_retry_delay  s"   € ð ×Ñ×8Ñ8ˆØˆ;ØØˆ
rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r�   r   r\   r]   s     rO   r�   z"UAConfig.polling_error_retry_delay  s*   € à5:ˆ×ÑÔ2Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ó8   — | j                   j                  }|€y|S )NT)r;   r+   re   s     rO   r+   zUAConfig.apt_news  s    € à×Ñ×'Ñ'ˆØˆ;ØØˆ
rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r+   r   r\   r]   s     rO   r+   zUAConfig.apt_news!  s*   € à$)ˆ×ÑÔ!Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 óB   — | j                   j                  }|€t        S |S rY   )r;   r,   r   re   s     rO   r,   zUAConfig.apt_news_url&  s#   € à×Ñ×+Ñ+ˆØˆ;ÜÐØˆ
rU   c                 óx   — || j                   _        t        j                   j                  | j                   «       y rY   )r;   r,   r   r\   r]   s     rO   r,   zUAConfig.apt_news_url-  s*   € à(-ˆ×ÑÔ%Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 ój   — | j                   j                  }|€t        j                  j                  S |S rY   )r;   r.   r   ÚLXDGuestAttachEnumÚOFFre   s     rO   r.   zUAConfig.lxd_guest_attach2  s/   € à×Ñ×/Ñ/ˆØˆ;Ü#×6Ñ6×:Ñ:Ð:Øˆ
rU   c                 ó°   — |€t         j                  j                  }|| j                  _        t         j                  j                  | j                  «       y rY   )r   rˆ   r‰   r;   r.   r\   r]   s     rO   r.   zUAConfig.lxd_guest_attach9  s@   € àˆ=Ü$×7Ñ7×;Ñ;ˆEØ,1ˆ×ÑÔ)Ü×$Ñ$×*Ñ*¨4×+;Ñ+;Õ<rU   c                 óB   — | j                   j                  dt        «      S )Nr0   )r:   rR   r   rS   s    rO   r0   zUAConfig.data_dir@  s   € à�x‰x�|‰|˜JÔ(8Ó9Ð9rU   c                 ó¶   — | j                   j                  dd«      }	 t        t        |j	                  «       «      S # t
        $ r t        j                  cY S w xY w)Nr3   ÚDEBUG)r:   rR   ÚgetattrÚloggingÚupperÚAttributeErrorr�   )rM   r3   s     rO   r3   zUAConfig.log_levelD  sH   € à—H‘H—L‘L ¨gÓ6ˆ	ð	!Üœ7 I§O¡OÓ$5Ó6Ð6øÜò 	!Ü—=‘=Ò ð	!ús   ž< ¼AÁAc                 óH   — | j                   j                  dt        d   «      S )Nr2   )r:   rR   r   rS   s    rO   r2   zUAConfig.log_fileL  s   € à�x‰x�|‰|˜J¬¸
Ñ(CÓDÐDrU   c                 ó�   — | j                   j                  d«      }|r(t        |t        «      r|S t        j                  d|«       i S )z>Return a dictionary of any features provided in uaclient.conf.r1   zDUnexpected uaclient.conf features value. Expected dict, but found %s)r:   rR   Ú
isinstanceÚdictrH   rI   )rM   r1   s     rO   r1   zUAConfig.featuresP  sC   € ð —8‘8—<‘< 
Ó+ˆÙÜ˜(¤DÔ)Ø�ä—‘ð3àôð
 ˆ	rU   c                 óf	  — dD ]S  }t        | |«      }|€t        j                  d|«       Œ(t        |t        «      r|dk  sŒ>t        j                  ||¬«      ‚ | j                  s| j                  r,| j                  s| j                  rt        j                  «       ‚t        j                  d| j                  t        j                  «       t        j                  d| j                  t        j                  «       t        j                  d| j                  t        j                  «       t        j                  d| j                  t        j                  «       t        j                  d| j                   t        j"                  «       t        j                  d| j$                  t        j&                  «       | j                  s| j                  rDt)        j*                  | j                  | j                  t(        j,                  j.                  «       n[| j                  s| j                  rCt)        j*                  | j                  | j                  t(        j,                  j0                  «       g }t3        j4                  «       r™t3        j6                  | j                   | j$                  «       | j                   s#t3        j8                  t2        j:                  «      s/| j$                  s4t3        j8                  t2        j<                  «      r|j?                  d«       ddl m!} dd	l"m#}  || «      jH                  }tK        d
„ |D «       «      }|r…|jM                  | j                   | j$                  «       | j                   s|j9                  |j:                  «      s'| j$                  s,|j9                  |j<                  «      r|j?                  d«       tO        |«      dkD  r:djQ                  |«      }tS        tT        jV                  jY                  |¬«      «       ddl-m.}	 | j^                  t`        jb                  jd                  k7  r, |	| «      jf                  stS        tT        jh                  «       y tj        jl                  jo                  tk        jp                  | j^                  ¬«      «       y )N)r)   r*   z1No config set for %s, default value will be used.r   ©ÚkeyrZ   r   Úhttpsr   )Ú	livepatch)Ú_enabled_servicesc              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)rš   N)r   )Ú.0Úents     rO   ú	<genexpr>z*UAConfig.process_config.<locals>.<genexpr>¬  s    è ø€ ò  
Ø¨s¯x©x¸;Ó/FŒCñ 
ùs   ‚—rš   z, )Úservices)Ú_is_attached)Úguest_attach)9rŽ   rH   Údebugr”   Úintr
   ÚInvalidPosIntConfigValuer'   r(   r%   r&   ÚInvalidProxyCombinationConfigr   Úvalidate_proxyÚPROXY_VALIDATION_APT_HTTP_URLÚPROXY_VALIDATION_APT_HTTPS_URLr!   ÚPROXY_VALIDATION_SNAP_HTTP_URLr"   ÚPROXY_VALIDATION_SNAP_HTTPS_URLr   Úsetup_apt_proxyÚAptProxyScopeÚGLOBALÚUACLIENTr   Úis_snapd_installedÚconfigure_snap_proxyÚget_config_option_valueÚHTTP_PROXY_OPTIONÚHTTPS_PROXY_OPTIONÚappendÚuaclientrš   Ú-uaclient.api.u.pro.status.enabled_services.v1r›   Úenabled_servicesÚanyÚconfigure_livepatch_proxyÚlenÚjoinÚprintr   Ú!PROXY_DETECTED_BUT_NOT_CONFIGUREDrp   Ú(uaclient.api.u.pro.status.is_attached.v1r¡   r.   r   rˆ   r‰   Úis_attachedÚ-WARNING_LXD_GUEST_ATTACH_SET_BUT_NOT_ATTACHEDr   Úlxd_pro_config_filer\   ÚLXDProConfig)
rM   ÚproprZ   Úservices_with_proxiesrš   r›   r¸   Úlivepatch_enabledr    r¡   s
             rO   Úprocess_configzUAConfig.process_config_  s²  € ð
ò 	ˆDô ˜D $Ó'ˆEØˆ}Ü—	‘	ØGÈõô   ¤sÔ+¨u°q«yÜ ×9Ñ9Ø Eôð ð	ð ×&Ò&¨$×*EÒ*EØ×"Ò" d×&=Ò&=ô ×:Ñ:Ó<Ð<ä×ÑØØ×&Ñ&Ü×.Ñ.ô	
ô
 	×ÑØØ×'Ñ'Ü×/Ñ/ô	
ô
 	×ÑØ�D×*Ñ*¬D×,NÑ,Nô	
ô 	×ÑØØ×#Ñ#Ü×/Ñ/ô	
ô
 	×ÑØ�D—O‘O¤T×%HÑ%Hô	
ô 	×ÑØ�T×%Ñ%¤t×'KÑ'Kô	
ð ×%Ò%¨×)DÒ)DÜ×ÑØ×*Ñ*Ø×+Ñ+Ü×!Ñ!×(Ñ(õð
 ×#Ò# t×'>Ò'>Ü×ÑØ×&Ñ&Ø×'Ñ'Ü×!Ñ!×*Ñ*ôð !#ÐÜ×"Ñ"Ô$Ü×%Ñ% d§o¡o°t×7GÑ7GÔHà—O’OÜ×0Ñ0´×1GÑ1GÔHà×$Ò$Ü×0Ñ0´×1HÑ1HÔIà%×,Ñ,¨VÔ4å&õ	
ñ -¨TÓ2×CÑCÐÜñ  
Ø+ô 
ó 
Ðñ Ø×/Ñ/Ø—‘ ×!1Ñ!1ôð —O’OØ×5Ñ5Ø×/Ñ/ôð ×$Ò$Ø×5Ñ5Ø×0Ñ0ôð &×,Ñ,¨[Ô9äÐ$Ó%¨Ò)Ø—y‘yÐ!6Ó7ˆHÜÜ×:Ñ:×AÑAØ%ð Bó ôõ 	Jð ×!Ñ!Ô%5×%HÑ%H×%LÑ%LÒLÙ  Ó&×2Ò2ä”(×HÑHÕIä×+Ñ+×1Ñ1Ü×(Ñ(°d×6KÑ6KÔLõrU   c                 óB  — | j                   �0t        | j                   «      D ]  }t        j                  d|«       Œ d| j                  v rUt        j                  d«       t        j                  d«       t        j                  d«       t        j                  d«       y y )Nz&Ignoring invalid uaclient.conf key: %sr6   z)legacy "ua_config" found in uaclient.confzPlease do the following:z…  1. run `sudo pro config set field=value` for each field/value pair present under "ua_config" in /etc/ubuntu-advantage/uaclient.confzQ  2. Delete "ua_config" and all sub-fields in /etc/ubuntu-advantage/uaclient.conf)rC   ÚsortedrH   rI   r:   )rM   Úinvalid_keys     rO   Úwarn_about_invalid_keysz UAConfig.warn_about_invalid_keysÕ  sŒ   € Ø×ÑÐ(Ü% d×&7Ñ&7Ó8ò �Ü—‘Ø<¸kõðð ˜$Ÿ(™(Ñ"ô �K‰KÐCÔDÜ�K‰KÐ2Ô3Ü�K‰Kð7ôô
 �K‰Kð7õð #rU   )NNN)*Ú__name__Ú
__module__Ú__qualname__Úua_scoped_proxy_optionsÚglobal_scoped_proxy_optionsÚ&deprecated_global_scoped_proxy_optionsr   r   Ústrr   r   rJ   rP   Úpropertyr/   r4   r7   r!   Úsetterr"   r&   r%   r-   r   r'   r(   r¤   r)   r*   Úboolr~   r�   r+   r,   rˆ   r.   r0   r3   r2   r1   rÇ   rË   © rU   rO   r9   r9   K   s¬  „ ØIÐð#Ðð.Ð*ð )-ØAEØ $ñ	!à�d˜3 ˜8‘nÑ%ð!ð Ð.×=Ñ=Ñ>ð!ð ˜‘ð	!ð
 
ó!ðF ð?˜cò ?ó ð?ð ð?˜cò ?ó ð?ð ðA˜sò Aó ðAð ð+˜H S™Mò +ó ð+ð ×Ñð= ò =ó ð=ð ð,˜X c™]ò ,ó ð,ð ×Ñð= ò =ó ð=ð ð3 H¨S¡Mò 3ó ð3ð ×Ñð=¨ò =ó ð=ð ð2 8¨C¡=ò 2ó ð2ð ×Ñð= sò =ó ð=ð ð¨sò ó ðð #×)Ñ)ð=°3ò =ó *ð=ð Ù�tÔð x°¡}ò ó ó ðð ×!Ñ!ð=¨3ò =ó "ð=ð Ù�tÔð¨°©ò ó ó ðð ×"Ñ"ð=¨Cò =ó #ð=ð ð¨ò ó ðð ×"Ñ"ð=¨Cò =ó #ð=ð ð ò ó ðð ×Ñð= Cò =ó ð=ð ð dò ó ðð × Ñ ð=¨$ò =ó !ð=ð ð¨3ò ó ðð ×%Ñ%ð=¨sò =ó &ð=ð ð˜$ò ó ðð ‡_�_ð=˜dò =ó ð=ð ð˜cò ó ðð ×Ñð= #ò =ó ð=ð ðÐ"2×"EÑ"Eò ó ðð ×Ñð=Ð&6×&IÑ&Iò =ó ð=ð ñ:ó ð:ð ñ!ó ð!ð ðE˜#ò Eó ðEð ñó ðòtólrU   r9   r=   c                  óT   — t         j                  j                  d«      } | r| S t        S )z4Get config path to be used when loading config dict.ÚUA_CONFIG_FILE)ÚosÚenvironrR   r   )Úconfig_files    rO   rD   rD   ë  s$   € ä—*‘*—.‘.Ð!1Ó2€KÙØÐäÐrU   c                 ó`  — t        j                   t        «      }| s
t        «       } t        j	                  d| «       t
        j                  j                  | «      r-|j                  t        t        j                  | «      «      «       i }t
        j                  j                  «       D ]Ê  \  }}|j                  «       }|j                  d«      sŒ(|dd }|j                  d«      r|dd }|j!                  d«      rTt
        j                  j                  |«      rt        t        j                  |«      «      }nt#        j$                  |¬«      ‚d	|vr||i|d	<   Œ´||d	   |<   Œ½|t&        v sŒÆ|||<   ŒÌ |j                  |«       d
|v r%t
        j                  j)                  |d
   «      |d
<   dD ]4  }t+        j,                  ||   «      rŒt#        j.                  |||   ¬«      ‚ t1        |j3                  «       «      j5                  t6        «      }|D ]  }|j9                  |«       Œ ||fS )aŽ  Parse known Pro config file

    Attempt to find configuration in cwd and fallback to DEFAULT_CONFIG_FILE.
    Any missing configuration keys will be set to CONFIG_DEFAULTS.

    Values are overridden by any environment variable with prefix 'UA_'.

    @param config_path: Fullpath to pro configfile. If unspecified, use
        DEFAULT_CONFIG_FILE.

    @return: Dict of configuration values.
    z%Using client configuration file at %sÚua_é   NÚ	features_é	   Úyaml)Úfilepathr1   r0   )r/   r4   r—   )Úcopyr   rD   rH   r£   rÙ   ÚpathÚexistsÚupdater   r   Ú	load_filerÚ   ÚitemsÚlowerÚ
startswithÚendswithr
   ÚInvalidFeatureYamlConfigValuer   Ú
expanduserr   Úis_service_urlÚInvalidURLConfigValueÚsetÚkeysÚ
differenceÚVALID_UA_CONFIG_KEYSÚpop)	Úconfig_pathr:   Úenv_keysr˜   rZ   Ú
field_nameÚfeature_field_namerC   rÊ   s	            rO   rE   rE   ô  sí  € ô �)‰)”OÓ
$€CáÜ%Ó'ˆä‡I�IÐ5°{ÔCÜ	‡w�w‡~�~�kÔ"Ø�
‰
”9œV×-Ñ-¨kÓ:Ó;Ô<Ø€HÜ—j‘j×&Ñ&Ó(ò -‰
ˆˆUØ�i‰i‹kˆØ�>‰>˜%Õ à˜Q˜R˜ˆJØ×$Ñ$ [Ô1à%/°° ^Ð"ð —>‘> &Ô)Ü—w‘w—~‘~ eÔ,Ü )¬&×*:Ñ*:¸5Ó*AÓ B™ä(×FÑFØ%*ôð ð  SÑ(Ø'9¸5Ð&A�C˜
’Oà:?�C˜
‘OÐ$6Ò7ØÔ5Ò5Ø',�˜Ò$ð5-ð6 ‡J�JˆxÔØ�SÑÜŸ'™'×,Ñ,¨S°©_Ó=ˆˆJ‰Ø/ò LˆÜ×"Ñ" 3 s¡8Õ,Ü×2Ñ2°sÀ#ÀcÁ(ÔKÐKðLô �s—x‘x“z“?×-Ñ-Ô.BÓC€LØ#ò ˆØ�‰�Õðð �ÐÐrU   Úoverride_keyc                 ó   ‡ — ˆ fd„}|S )aì  Decorator used to override function return by config settings.

    To identify if we should override the function return, we check
    if the config object has the expected override key, we use it
    has, we will use the key value as the function return. Otherwise
    we will call the function normally.

    @param override_key: key to be looked for in the settings_override
     entry in the config dict. If that key is present, we will return
     its value as the function return.
    c                 ó2   •‡ — t        ‰ «      ˆ ˆfd„«       }|S )Nc                  ó    •— t        «       \  } }| j                  di «      j                  ‰t        «      }|t        k7  r‰dk(  r|d fS |S  ‰«       S )Nr5   Ú
cloud_type)rE   rR   ÚUNSET_SETTINGS_OVERRIDE_KEY)r:   Ú_Úvalue_overrideÚfrù   s      €€rO   Únew_fz>apply_config_settings_override.<locals>.wrapper.<locals>.new_fA  s[   ø€ ä!“^‰FˆC�Ø ŸW™WÐ%9¸2Ó>×BÑBØÔ9óˆNð Ô!<Ò<Ø <Ò/Ø*¨DÐ1Ð1Ø%Ð%á“3ˆJrU   )r   )r  r  rù   s   ` €rO   Úwrapperz/apply_config_settings_override.<locals>.wrapper@  s    ù€ Ü	ˆq‹ô	ó 
ð	ð ˆrU   rÖ   )rù   r  s   ` rO   Úapply_config_settings_overrider  3  s   ø€ ôð" €NrU   rY   )1rã   r�   rÙ   Ú	functoolsr   r   Útypingr   r   r   r¶   r   r	   r
   r   r   r   r   r   Úuaclient.defaultsr   r   r   r   r   r   r   r   r   Úuaclient.filesr   r   Úuaclient.yamlr   Ú	getLoggerÚreplace_top_level_logger_namerÌ   rH   ÚMERGE_ID_KEY_MAPrþ   ÚUA_CONFIGURABLE_KEYSró   Úget_event_loggerrm   r9   rÒ   rD   rE   r  rÖ   rU   rO   ú<module>r     sÂ   ðÛ Û Û 	ß &ß &Ñ &÷	÷ 	ó 	÷
÷ 
õ 
÷ 9Ý #à€g×ÑÐ:˜×:Ñ:¸8ÓDÓE€ð !Ø"ñÐ ð 'Ð ðÐ ð$Ð ð 	&ˆ×%Ñ%Ó'€÷]ñ ]ð@˜ó ó<ð~°ô rU   