Ë
    M/Åe,  ã                   ó¢  — d 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 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 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 ddlmZ ej0                  dk\  rddlmZ nddlZ ej8                  e«      Zej>                  ej@                  ejB                  gZ"	  G d„ d«      Z# G d„ de
«      Z$y)z.Utilities for plugins discovery and selection.é    N)ÚCallable)Úcast)ÚDict)ÚIterable)ÚIterator)ÚList)ÚMapping)ÚOptional)ÚType)ÚUnion)Úconfiguration)Úerrors)Ú
interfaces)Ú	constants)Úos)ÚError)é   é
   c                   óÌ  — e Zd ZdZdZdej                  ddfd„Zdee	   de
fd„Zedej                  de	fd„«       Zede	fd	„«       Zede	fd
„«       Zede	fd„«       Zede
fd„«       Zdee   de
fd„Zede
fd„«       Zddeej0                     dej4                  fd„Zede
fd„«       Zdee
ef   fd„Zede
fd„«       Z edee!   fd„«       Z"ede
fd„«       Z#de	fd„Z$de	fd„Z%y)ÚPluginEntryPointzPlugin entry point.NÚentry_pointÚreturnc                 ó’   — | j                  |«      | _        |j                  «       | _        || _        d | _        d | _        d | _        y ©N)Úentry_point_to_plugin_nameÚnameÚloadÚ
plugin_clsr   Úwarning_messageÚ_initializedÚ	_prepared)Úselfr   s     úA/usr/lib/python3/dist-packages/certbot/_internal/plugins/disco.pyÚ__init__zPluginEntryPoint.__init__(   sC   € Ø×3Ñ3°KÓ@ˆŒ	Ø3>×3CÑ3CÓ3EˆŒØ&ˆÔØ.2ˆÔØ9=ˆÔØ7;ˆ�ó    r   c                 ó$   — || j                   k(  ryy)z(Check if the name refers to this plugin.TF©r   ©r"   r   s     r#   Ú
check_namezPluginEntryPoint.check_name0   s   € à�4—9‘9ÒØØr%   c                 ó   — |j                   S )z)Unique plugin name for an ``entry_point``r'   )Úclsr   s     r#   r   z+PluginEntryPoint.entry_point_to_plugin_name6   s   € ð ×ÑÐr%   c                 ó.   — | j                   j                  S )zDescription of the plugin.)r   Údescription©r"   s    r#   r-   zPluginEntryPoint.description;   s   € ð �‰×*Ñ*Ð*r%   c                 óN   — dj                  | j                  | j                  «      S )z$Description with name. Handy for UI.z	{0} ({1}))Úformatr-   r   r.   s    r#   Údescription_with_namez&PluginEntryPoint.description_with_name@   s!   € ð ×!Ñ! $×"2Ñ"2°D·I±IÓ>Ð>r%   c                 óD   — t        | j                  d| j                  «      S )zLong description of the plugin.Úlong_description)Úgetattrr   r-   r.   s    r#   r3   z!PluginEntryPoint.long_descriptionE   s   € ô �t—‘Ð(:¸D×<LÑ<LÓMÐMr%   c                 ó0   — t        | j                  dd«      S )z%Should this plugin be hidden from UI?ÚhiddenF)r4   r   r.   s    r#   r6   zPluginEntryPoint.hiddenJ   s   € ô �t—‘¨°%Ó8Ð8r%   Úifaces_groupsc                 ó6   ‡ — | xs t        ˆ fd„|D «       «      S )z1Does plugin implement specified interface groups?c              3   óF   •K  — | ]  }t        ˆfd „|D «       «      –— Œ y­w)c              3   óJ   •K  — | ]  }t        ‰j                  |«      –— Œ y ­wr   )Ú
issubclassr   ©Ú.0Úifacer"   s     €r#   ú	<genexpr>z4PluginEntryPoint.ifaces.<locals>.<genexpr>.<genexpr>R   s$   øè ø€ ò %Øô ˜4Ÿ?™?¨E×2ñ %ùs   ƒ #N)Úall)r=   Úifacesr"   s     €r#   r?   z*PluginEntryPoint.ifaces.<locals>.<genexpr>Q   s-   øè ø€ ò ()ð ô ó %Ø#ô%÷ %ñ()ùs   ƒ!)Úany©r"   r7   s   ` r#   rA   zPluginEntryPoint.ifacesO   s)   ø€ à Ð ò )¤Có ()ð (ô()ó %)ð 	)r%   c                 ó   — | j                   duS )z(Has the plugin been initialized already?N)r    r.   s    r#   ÚinitializedzPluginEntryPoint.initializedV   s   € ð × Ñ ¨Ð,Ð,r%   Úconfigc                 ót   — | j                   s!| j                  || j                  «      | _         | j                   S )zMemoized plugin initialization.)r    r   r   )r"   rF   s     r#   ÚinitzPluginEntryPoint.init[   s0   € à× Ò ð !%§¡°¸¿	¹	Ó BˆDÔØ× Ñ Ð r%   c                 ób   — | j                   st        j                  d| «       | j                  duS )z%Has the plugin been prepared already?z$.prepared called on uninitialized %rN)rE   ÚloggerÚdebugr!   r.   s    r#   ÚpreparedzPluginEntryPoint.preparedc   s+   € ð ×ÒÜ�L‰LÐ?ÀÔFØ�~‰~ TÐ)Ð)r%   c                 óF  — | j                   €t        d«      ‚| j                  €"	 | j                   j                  «        d| _        t        t        t        t        f   | j                  «      S # t        j
                  $ r*}t        j                  d| |d¬«       || _        Y d}~Œ_d}~wt        j                  $ r*}t        j                  d| |d¬«       || _        Y d}~Œšd}~wt        j                  $ r*}t        j                  d| |d¬«       || _        Y d}~ŒÕd}~ww xY w)zMemoized plugin preparation.NzPlugin is not initialized.TzMisconfigured %r: %s)Úexc_infozNo installation (%r): %szOther error:(%r): %s)r    Ú
ValueErrorr!   Úpreparer   ÚMisconfigurationErrorrJ   rK   ÚNoInstallationErrorÚPluginErrorr   r   Úboolr   )r"   Úerrors     r#   rP   zPluginEntryPoint.preparej   sô   € à×ÑÐ$ÜÐ9Ó:Ð:Ø�>‰>Ð!ð&Ø×!Ñ!×)Ñ)Ô+ð "&�”ä”Eœ$¤˜+Ñ&¨¯©Ó7Ð7øô ×/Ñ/ò 'Ü—‘Ð3°T¸5È4�ÔPØ!&�—‘ûÜ×-Ñ-ò 'Ü—‘Ø.°°eÀdð ô Là!&�—‘ûÜ×%Ñ%ò 'Ü—‘Ð3°T¸5È4�ÔPØ!&�—‘ûð'ús/   ¥A- Á-D Â  B%Â%D Â; C Ã D Ã6 DÄD c                 óJ   — t        | j                  t        j                  «      S )zIs plugin misconfigured?)Ú
isinstancer!   r   rQ   r.   s    r#   ÚmisconfiguredzPluginEntryPoint.misconfigured€   s   € ô ˜$Ÿ.™.¬&×*FÑ*FÓGÐGr%   c                 óP   — t        | j                  t        «      r| j                  S y)zGReturn the Exception raised during plugin setup, or None if all is wellN)rW   r!   Ú	Exceptionr.   s    r#   ÚproblemzPluginEntryPoint.problem…   s   € ô �d—n‘n¤iÔ0Ø—>‘>Ð!Ør%   c                 ó:   — | j                   du xs | j                  S )z4Is plugin available, i.e. prepared or misconfigured?T)r!   rX   r.   s    r#   Ú	availablezPluginEntryPoint.availableŒ   s   € ð �~‰~ Ð%Ò;¨×);Ñ);Ð;r%   c                 ó8   — dj                  | j                  «      S )NzPluginEntryPoint#{0})r0   r   r.   s    r#   Ú__repr__zPluginEntryPoint.__repr__‘   s   € Ø%×,Ñ,¨T¯Y©YÓ7Ð7r%   c                 ó  ‡ — dj                  ‰ j                  «      dj                  ‰ j                  j                  «      dj                  dj	                  ˆ fd„t
        D «       «      «      dj                  ‰ j                  «      g}‰ j                  rh|j                  dj                  ‰ j                  «       «      «       ‰ j                  r.|j                  dj                  ‰ j                  «       «      «       d	j	                  |«      S )
Nz* {0}zDescription: {0}zInterfaces: {0}z, c              3   ób   •K  — | ]&  }t        ‰j                  |«      r|j                  –— Œ( y ­wr   )r;   r   Ú__name__r<   s     €r#   r?   z+PluginEntryPoint.__str__.<locals>.<genexpr>˜   s+   øè ø€ ò /Ø#(Ü˜dŸo™o¨uÔ5ð —•ñ/ùs   ƒ,/zEntry point: {0}zInitialized: {0}z	Prep: {0}ú
)r0   r   r   r-   ÚjoinÚPLUGIN_INTERFACESr   rE   ÚappendrH   rL   rP   )r"   Úliness   ` r#   Ú__str__zPluginEntryPoint.__str__”   sÊ   ø€ à�N‰N˜4Ÿ9™9Ó%Ø×%Ñ% d§o¡o×&AÑ&AÓBØ×$Ñ$ T§Y¡Yó /Ü,=ô/ó &ó ð ×%Ñ% d×&6Ñ&6Ó7ð
ˆð ×ÒØ�L‰LÐ+×2Ñ2°4·9±9³;Ó?Ô@Ø�}Š}Ø—‘˜[×/Ñ/°·±³Ó?Ô@à�y‰y˜ÓÐr%   r   )&rb   Ú
__module__Ú__qualname__Ú__doc__Ú__hash__Úimportlib_metadataÚ
EntryPointr$   r
   ÚstrrT   r)   Úclassmethodr   Úpropertyr-   r1   r3   r6   r   r   rA   rE   r   ÚNamespaceConfigr   ÚPluginrH   rL   r   r   rP   rX   rZ   r[   r]   r_   rh   © r%   r#   r   r   "   sÍ  „ Ùð €Hð<Ð$6×$AÑ$Að <Àdó <ð˜x¨™}ð °ó ð ð Ð5G×5RÑ5Rð  ÐWZò  ó ð ð ð+˜Sò +ó ð+ð ð? sò ?ó ð?ð ðN #ò Nó ðNð ð9˜ò 9ó ð9ð) X¨d¡^ð )¸ó )ð ð-˜Tò -ó ð-ñ!˜8 M×$AÑ$AÑBð !Èj×N_ÑN_ó !ð ð*˜$ò *ó ð*ð8˜˜t U˜{Ñ+ó 8ð, ðH˜tò Hó ðHð ð˜ )Ñ,ò ó ðð ð<˜4ò <ó ð<ð8˜#ó 8ð ˜ô  r%   r   c                   ó„  — e Zd ZdZdeeef   ddfd„Zedd„«       Z	ede
j                  deeef   ddfd„«       Zd	edefd
„Zdee   fd„Zdefd„Zdej(                  deej.                     fd„Zdeegef   dd fd„Zdd„Zdee   dd fd„Zdee ee!f      fd„Z"dd„Z#dej.                  de$e   fd„Z%defd„Z&defd„Z'y)ÚPluginsRegistryzPlugins registry.Úpluginsr   Nc                 óR   — t        t        |j                  «       «      «      | _        y r   )ÚdictÚsortedÚitemsÚ_plugins)r"   rw   s     r#   r$   zPluginsRegistry.__init__ª   s   € ô
 œV G§M¡M£OÓ4Ó5ˆ�r%   c           	      ó  — i }t        j                  d«      }|r|j                  d«      ng }t        j                  j                  |«       t        t        j                  t        j                  ¬«      «      }t        t        j                  t        j                  ¬«      «      }||z   D ]  }	 | j                  ||«       Œ  | |«      S # t        $ r,}t        j                  d|j                   › d|› d�«      |‚d}~ww xY w)z+Find plugins using setuptools entry points.ÚCERTBOT_PLUGIN_PATHú:)ÚgroupzThe 'z ' plugin errored while loading: z˜. You may need to remove or update this plugin. The Certbot log will contain the full error details and this should be reported to the plugin developer.N)r   ÚgetenvÚsplitÚsysÚpathÚextendÚlistrm   Úentry_pointsr   ÚSETUPTOOLS_PLUGINS_ENTRY_POINTÚ"OLD_SETUPTOOLS_PLUGINS_ENTRY_POINTÚ_load_entry_pointrZ   r   rS   Úmodule)r+   rw   Úplugin_paths_stringÚplugin_pathsr‡   Úold_entry_pointsr   Úes           r#   Úfind_allzPluginsRegistry.find_all±   s  € ð 02ˆÜ Ÿi™iÐ(=Ó>ÐÙ9LÐ*×0Ñ0°Ô5ÐRTˆä�‰�‰˜Ô%ÜÔ.×;Ñ;Ü×:Ñ:ô<ó =ˆäÔ 2× ?Ñ ?Ü×>Ñ>ô!@ó AÐà'Ð*:Ñ:ò 	0ˆKð0Ø×%Ñ% k°7Õ;ð	0ñ �7‹|Ðøô ò 0Ü×(Ñ(Ø˜K×.Ñ.Ð/Ð/OÐPQÈsð S(ð (ó)ð /0ð	0ûð0ús   Â/CÃ	D Ã'C;Ã;D r   c                 ó  — t        |«      }|j                  |v r�||j                     }|j                  j                  }|j                  j                  }|r|j                  j	                  «       nd}|r|j                  j	                  «       nd}t        dj                  |j                  ||«      «      ‚t        |j                  t        j                  «      r|||j                  <   y t        j                  d|«       y )NÚunknownz+Duplicate plugin name {0} from {1} and {2}.z)%r does not inherit from Plugin, skipping)r   r   r   ÚdistÚlowerrZ   r0   r;   r   r   rs   rJ   Úwarning)	r+   r   rw   Ú	plugin_epÚother_epÚplugin1_distÚplugin2_distÚplugin1Úplugin2s	            r#   rŠ   z!PluginsRegistry._load_entry_pointÈ   sÖ   € ô % [Ó1ˆ	Ø�>‰>˜WÑ$Ø˜yŸ~™~Ñ.ˆHØ$×0Ñ0×5Ñ5ˆLØ#×/Ñ/×4Ñ4ˆLÙ3?�l×'Ñ'×-Ñ-Ô/ÀYˆGÙ3?�l×'Ñ'×-Ñ-Ô/ÀYˆGäÐI×PÑPØ—‘ ¨ó2ó 3ð 3ä�i×*Ñ*¬J×,=Ñ,=Ô>Ø&/ˆG�I—N‘NÒ#ä�N‰NØ;¸YõHr%   r   c                 ó    — | j                   |   S r   )r|   r(   s     r#   Ú__getitem__zPluginsRegistry.__getitem__Û   s   € Ø�}‰}˜TÑ"Ð"r%   c                 ó,   — t        | j                  «      S r   )Úiterr|   r.   s    r#   Ú__iter__zPluginsRegistry.__iter__Þ   s   € Ü�D—M‘MÓ"Ð"r%   c                 ó,   — t        | j                  «      S r   )Úlenr|   r.   s    r#   Ú__len__zPluginsRegistry.__len__á   s   € Ü�4—=‘=Ó!Ð!r%   rF   c                 óz   — | j                   j                  «       D �cg c]  }|j                  |«      ‘Œ c}S c c}w )z'Initialize all plugins in the registry.)r|   ÚvaluesrH   )r"   rF   r–   s      r#   rH   zPluginsRegistry.initä   s6   € ð —=‘=×'Ñ'Ó)ö+¨9�	—‘˜vÕ&ò +ð 	+ùò +s   �8Úpredc           	      ó˜   —  t        | «      | j                  j                  «       D ��ci c]  \  }} ||«      r||“Œ c}}«      S c c}}w )z"Filter plugins based on predicate.)Útyper|   r{   )r"   r¦   r   r–   s       r#   ÚfilterzPluginsRegistry.filteré   sP   € àŒt�D‹zØ"Ÿm™m×1Ñ1Ó3÷H©¨t°YÙ7;¸I´ð   ™?ó Hó Ið 	Iùó Hs   ©A
c                 ó&   — | j                  d„ «      S )z#Filter plugins based on visibility.c                 ó   — | j                    S r   )r6   )r–   s    r#   ú<lambda>z)PluginsRegistry.visible.<locals>.<lambda>ð   s   € °×1AÑ1AÐ-A€ r%   ©r©   r.   s    r#   ÚvisiblezPluginsRegistry.visibleî   s   € à�{‰{ÑAÓBÐBr%   r7   c                 ó,   ‡— | j                  ˆfd„«      S )z#Filter plugins based on interfaces.c                 ó"   •—  | j                   ‰Ž S r   )rA   )Úp_epr7   s    €r#   r¬   z(PluginsRegistry.ifaces.<locals>.<lambda>ô   s   ø€ ¨¨¯©°]Ð(C€ r%   r­   rC   s    `r#   rA   zPluginsRegistry.ifacesò   s   ø€ à�{‰{ÓCÓDÐDr%   c                 óx   — | j                   j                  «       D �cg c]  }|j                  «       ‘Œ c}S c c}w )z$Prepare all plugins in the registry.)r|   r¥   rP   )r"   r–   s     r#   rP   zPluginsRegistry.prepareö   s,   € à59·]±]×5IÑ5IÓ5KÖL¨	�	×!Ñ!Õ#ÒLÐLùÒLs   �7c                 ó&   — | j                  d„ «      S )z%Filter plugins based on availability.c                 ó   — | j                   S r   )r]   )r±   s    r#   r¬   z+PluginsRegistry.available.<locals>.<lambda>ü   s
   € ¨¯©€ r%   r­   r.   s    r#   r]   zPluginsRegistry.availableú   s   € à�{‰{Ñ6Ó7Ð7r%   Úpluginc                 óÆ   — | j                   j                  «       D �cg c]"  }|j                  r|j                  «       |u r|‘Œ$ }}t	        |«      dk  sJ ‚|r|d   S yc c}w )aM  Find an initialized plugin.

        This is particularly useful for finding a name for the plugin::

          # plugin is an instance providing Plugin, initialized
          # somewhere else in the code
          plugin_registry.find_init(plugin).name

        Returns ``None`` if ``plugin`` is not found in the registry.

        é   r   N)r|   r¥   rE   rH   r¢   )r"   rµ   r–   Ú
candidatess       r#   Ú	find_initzPluginsRegistry.find_initÿ   so   € ð 26·±×1EÑ1EÓ1Gö O IØ"×.Ò.°9·>±>Ó3CÀvÑ3Mò  ð Oˆ
ð Oä�:‹ !Ò#Ð#Ð#ÙØ˜a‘=Ð ØùòOs   �'Ac                 óª   — dj                  | j                  j                  dj                  d„ | j                  j                  «       D «       «      «      S )Nz{0}({1})ú,c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Úrepr©r=   r±   s     r#   r?   z+PluginsRegistry.__repr__.<locals>.<genexpr>  s   è ø€ ò .?Ø#”�T—
ñ.?ùó   ‚)r0   Ú	__class__rb   rd   r|   r¥   r.   s    r#   r_   zPluginsRegistry.__repr__  sI   € Ø× Ñ Ø�N‰N×#Ñ# S§X¡Xñ .?Ø'+§}¡}×';Ñ';Ó'=ô.?ó &?ó@ð 	@r%   c                 ó|   — | j                   sydj                  d„ | j                   j                  «       D «       «      S )Nz
No pluginsz

c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )ro   r¾   s     r#   r?   z*PluginsRegistry.__str__.<locals>.<genexpr>  s   è ø€ ÒH¨œ3˜tŸ9ÑHùr¿   )r|   rd   r¥   r.   s    r#   rh   zPluginsRegistry.__str__  s.   € Ø�}Š}ØØ�{‰{ÑH°·±×1EÑ1EÓ1GÔHÓHÐHr%   )r   rv   )(rb   ri   rj   rk   r	   ro   r   r$   rp   r�   rm   rn   r   rŠ   r�   r   r    Úintr£   r   rr   r   r   rs   rH   r   rT   r©   r®   r   r   rA   r   r   rP   r]   r
   r¹   r_   rh   rt   r%   r#   rv   rv   §   so  „ Ùð6 ¨Ð-=Ð(=Ñ >ð 6À4ó 6ð òó ðð, ðHÐ,>×,IÑ,Ið HØ#'¨Ð-=Ð(=Ñ#>ðHØCGòHó ðHð$# ð #Ð(8ó #ð#˜( 3™-ó #ð"˜ó "ð+˜=×8Ñ8ð +¸TÀ*×BSÑBSÑ=Tó +ð
I˜8Ð%5Ð$6¸Ð$<Ñ=ð IÐBSó Ió
CðE X¨d¡^ð EÐ8Ió EðM˜˜e D¨% KÑ0Ñ1ó Mó8ð
 
× 1Ñ 1ð °hÐ?OÑ6Pó ð(@˜#ó @ð
I˜ô Ir%   rv   )%rk   Úloggingrƒ   Útypingr   r   r   r   r   r   r	   r
   r   r   Úcertbotr   r   r   Úcertbot._internalr   Úcertbot.compatr   Úcertbot.errorsr   Úversion_infoÚimportlib.metadataÚmetadatarm   Ú	getLoggerrb   rJ   ÚAuthenticatorÚ	Installerrs   re   r   rv   rt   r%   r#   ú<module>rÐ      s¥   ðÙ 4Û Û 
Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý å !Ý Ý Ý 'Ý Ý  à×Ñ�wÒÞ3ãà	ˆ×	Ñ	˜8Ó	$€ð  ×-Ñ-¨z×/CÑ/CÀZ×EVÑEVÐWÐ Ø B÷B ñ B ôJtI�gõ tIr%   