
    Mg&                     h    S SK r S SKJr  S SKrS SKrS SKJrJrJr   " S S\	5      r
 " S S\	5      rg)    N)partial)warningerrorexecutable_existsc                   T    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)PluginManager
   zh
Frontend for pluginmanager
https://github.com/benhoff/pluginmanager
Also handles plugin.PluginComposed
c                 :  ^^ SS K nUR                  " 5       U l        UR                  R                  mU4S jnX!R                  l        U R                  R
                  R                  mU4S jnX0R                  R
                  l        [        5       U l        S U l	        SU l
        / U l        S nU R                  R                  U5        U R                  R                  S5        U R                  R                  S5        U R                  R                  S5        g )Nr   c                  `   >  T" U 6 $ ! [          a  n[        U5         S nAOS nAff = fSS KnU$ )Nr   )ImportErrorprintsys)argser   _load_sources      ;/Users/admin/workspace/ai/Jarvis/jarviscli/PluginManager.pypatched_load_source3PluginManager.__init__.<locals>.patched_load_source   s4    #T** aJs    
'"'c                      >  T" U 6   g !    g = fN )r   _handle_class_instances    r   patched_handle_class_instance=PluginManager.__init__.<locals>.patched_handle_class_instance"   s    &-s   	 c                 `    U  Vs/ s H  oR                  S5      (       d  M  UPM     sn$ s  snf )Nz.py)endswith)sxs     r   __ends_with_py.PluginManager.__init__.<locals>.__ends_with_py0   s#     6q!JJu$5Aq666s   ++zjarviscli/packages/aimlzjarviscli/packages/memoryenv)pluginmanager.module_managerPluginInterface_backendmodule_managerload_sourceplugin_managerr   PluginDependency_plugin_dependency_cache_plugins_loaded_cache_disabledset_file_filtersadd_blacklisted_directories)selfpluginmanagerr   r   _PluginManager__ends_with_pyr   r   s        @@r   __init__PluginManager.__init__   s    +%557 %33??	 4G$$0!%!=!=!T!T	
 ?\$$;"2"4 !	7&&~6112KL112MN11%8    c                 H    U R                   R                  U5        SU l        g)z(Add directory to search path for pluginsN)r$   add_plugin_directoriesr*   )r/   paths     r   add_directoryPluginManager.add_directory7   s    ,,T2r4   c                 :    U R                   R                  U5        g)zAdd singe plugin-instanceN)r$   add_pluginsr/   plugins     r   
add_pluginPluginManager.add_plugin<   s    !!&)r4   c                 r   U R                   b  g[        R                  " 5       U l         U R                  R	                  5         U R                  U R                  R                  5       5      u  pU H  nU R                  X0R                   5        M      U R                  X5      U l	        [        U5      U l        g)z	lazy loadN)r*   r=   PluginStorager$   collect_plugins_validate_pluginsget_plugins_load_plugin_filter_duplicated_disabledr,   lenr+   )r/   enableddisabledplugin_to_adds       r   _loadPluginManager._load@   s    ;;"**,%%'"44T]]5N5N5PQ$Mm[[9 %  $?? "7|r4   c                 *   ^ ^ UU 4S jnS mU" U5      $ )Nc                    > / n/ nU  Hh  nT" U5      (       d  M  TR                   R                  U5      nUSL a  UR                  U5        ME  UR                  5       U4nUR                  U5        Mj     X4$ NT)r)   checkappendget_name)pluginsplugins_validplugins_incompatibleplugin_to_validatecompability_check_resultitem	is_pluginr/   s         r   	partition2PluginManager._validate_plugins.<locals>.partitionR   s    M#% &-" !344+/+B+B+H+H&,((+t3!(();< +33502D )//5 '. "88r4   c                 n    [        U [        R                  5      (       d  gU R                  5       S:X  a  gg)NFr=   T)
isinstancer0   IPluginrR   )rV   s    r   rY   2PluginManager._validate_plugins.<locals>.is_pluginf   s0    0-2G2GHH!**,8r4   r   )r/   rS   rZ   rY   s   `  @r   rC   PluginManager._validate_pluginsQ   s    	9(	 !!r4   c                 H   ^^^^ UU4S jnUU4S jmS mU4S jmU" U5      $ )Nc                    > T" U R                  5       R                  S5      U T5        U R                  5        H*  nT" UR                  5       R                  S5      U T5        M,     g )N )rR   splitaliaslower)rJ   namer>   plugin_storages     r   handle_aliases2PluginManager._load_plugin.<locals>.handle_aliasesr   s_    &&(..s3 
 &++-JJL&&s+!"$ .r4   c                 ^   > [        U 5      S:X  a  T" U S   X5        g T" U S   U SS  X5        g )N   r   )rG   )rg   rJ   parentadd_plugin_composeadd_plugin_singles      r   r>   .PluginManager._load_plugin.<locals>.add_plugin~   s2    4yA~!$q'=A"47DHmLr4   c                     UR                  U 5      nUc  UR                  X5        g UR                  5       (       d#  UR                  U5        UR                  X5        g [	        SR                  U 5      5        g )NzDuplicated plugin {}!)rD   r>   is_callable_pluginchange_withr   format)rg   rJ   rm   plugin_existings       r   ro   5PluginManager._load_plugin.<locals>.add_plugin_single   se    $006O&!!$6&99;;#//>%%d:188>?r4   c                    > UR                  U 5      nUc3  [        R                  " 5       nXl        SUl        UR                  X5        T" XU5        g )N )rD   r=   Plugin_name__doc__r>   )
name_firstname_remainingrJ   rm   ru   r>   s        r   rn   6PluginManager._load_plugin.<locals>.add_plugin_compose   sL    
 %00<O&"(--/(2%*,'!!*>~oFr4   r   )r/   rJ   rh   ri   r>   rn   ro   s     ` @@@r   rE   PluginManager._load_pluginq   s'    
	$	M		@	G m,,r4   c                     / nU HA  nUR                  UR                  5       5        UR                  UR                  5       5        MC     0 nU H+  u  pgXc;   a  M  Xe;   a  XV   R                  U5        M&  U/XV'   M-     U$ r   )rQ   rR   extendre   )r/   enabled_listdisabled_listenabled_namesplugin_enableddisabled_uniqueplugin_namedisable_reasons           r   rF   )PluginManager._filter_duplicated_disabled   s    *N  !8!8!:;  !5!5!78 + +8'K+-,33NC0>/?, ,9 r4   c                 V    U R                  5         U R                  R                  5       $ )zL
Returns all loaded plugins as dictionary
Key: name
Value: plugin instance)
)rK   r*   rD   r/   s    r   rD   PluginManager.get_plugins   s      	

{{&&((r4   c                 :    U R                  5         U R                  $ )z`
Returns all disabled plugins names as dictionary
Key: name
Value: List of reasons why disabled
)rK   r,   r   s    r   get_disabledPluginManager.get_disabled   s     	

###r4   c                 :    U R                  5         U R                  $ r   )rK   r+   r   s    r   get_number_plugins_loaded'PluginManager.get_number_plugins_loaded   s    

###r4   )r$   r*   r,   r)   r+   N)__name__
__module____qualname____firstlineno__r{   r2   r8   r>   rK   rC   rE   rF   rD   r   r   __static_attributes__r   r4   r   r   r   
   s<    $9L
*,""@--^$)$$r4   r   c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)r(      z
Plugins may have requirement - specified by require().
Please refere plugin-doku.

This module checks if dependencies are fulfilled.
c                    SU l         [        R                  S:X  a  [        R                  U l        g [        R                  S:X  a  [        R                  U l        g [        R                  R                  S5      (       a  [        R                  U l        g S U l        [        SR                  [        R                  5      5        g )NTdarwinwin32linuxzUnsupported platform {})_requirement_has_networkr   platformr=   MACOS_requirement_platformWINDOWS
startswithLINUXr   rt   r   s    r   r2   PluginDependency.__init__   s{    (,%<<8#)/D&\\W$)/D&\\$$W--)/D&)-D&-44S\\BCr4   c                     / / / S.nU Hn  nUS   nUS   n[        U[        5      (       d  [        U[        5      (       a  U/nXB;   a  X$   R                  U5        MT  [	        SR                  XE5      5        Mp     U$ )N)r   networknativer   rl   z{}={}: No supported requirement)r]   strboolr   r   rt   )r/   requirements_iterplugin_requirementsrequirementkeyvaluess         r   _plugin_get_requirements)PluginDependency._plugin_get_requirements   s    
 -Ka.C ^F&#&&*VT*B*B )#(//79@@MN - #"r4   c                 .   U R                  UR                  " 5       5      nU R                  US   5      (       d%  SR                  US   5      nSR	                  U5      $ U R                  US   U5      (       d  gU R                  US   U5      nUSLa  U$ g)zC
Parses plugin.require(). Plase refere plugin.Plugin-documentation
r   z, zRequires os {}r   zRequires networkingr   T)r   require_check_platformjoinrt   _check_network_check_native)r/   r=   r   required_platform
natives_oks        r   rP   PluginDependency.check   s     #;;FNN<LM##$7
$CDD $		*=j*I J#**+<==""#6y#A6JJ(''(;H(EvN
T!r4   c                     U(       d  g[         R                  U;   a#  U[         R                  [         R                  /-  nU R                  U;   $ rO   )r=   UNIXr   r   r   )r/   r   s     r   r    PluginDependency._check_platform  s<    ;;& v||V\\22F))V33r4   c                 X    SU;   a$  U R                   (       d  gU R                  U5        gg)NTF)r   #_plugin_patch_network_error_message)r/   r   r=   s      r   r   PluginDependency._check_network  s)    6>0044V<r4   c                     SnU HJ  nUR                  S5      (       a  [        USS  5      (       + nO[        U5      nU(       a  MA  X4-  nUS-  nML     U(       d  gSnUR                  U5      $ )Nrx   !rl   rc   TzMissing native executables {})r   r   rt   )r/   r   r=   missingr   requirement_okmessages          r   r   PluginDependency._check_native  sq    F  %%%6vabz%B!B!26!:!>!3  1~~g&&r4   c                 p    SUR                   ;  a&  [        UR                  UR                  5      Ul        g g )Nzplugin._network_error_patched)__dict__r   _plugin_run_with_network_errorrunr<   s     r   r   4PluginDependency._plugin_patch_network_error_message,  s0    *&//A 55vzzCFJ Br4   )r   r   N)r   r   r   r   r{   r2   r   rP   r   r   r   r   r   r   r4   r   r(   r(      s,    D#,&4'&Cr4   r(   )r   	functoolsr   r0   r=   utilities.GeneralUtilitiesr   r   r   objectr   r(   r   r4   r   <module>r      s6    
    H H|$F |$~fCv fCr4   