3 À<×eã@s4ddlZddlZdgZejjƒZGdd„deƒZdS)éNÚ PluginLoadercsFeZdZdddgZdd„Z‡fdd„Zdd „Zd d „Zd d „Z‡Z S)rÚ _namespaceÚ_prefixÚ _interfacecCs tƒ‚dS)z~ This method has to be implemented in child class and should set _namespace, _prefix, and _interface member attributes. N)ÚNotImplementedError)Úself©rú#/usr/lib/python3.6/plugin_loader.pyÚ_set_loader_parameters sz#PluginLoader._set_loader_parameterscsntt|ƒjƒd|_d|_d|_|jƒt|jƒtks:t ‚t|jƒtksLt ‚t|jƒtkrft |jt ƒsjt ‚dS)N) ÚsuperrÚ__init__rrrr ÚtypeÚstrÚAssertionErrorÚ issubclassÚobject)r)Ú __class__rr r szPluginLoader.__init__cCs,t|ƒtkst‚d|j|j|f}|j|ƒS)Nz%s.%s%s)r rrrrÚ _get_class)rZ plugin_nameÚ module_namerrr Ú load_pluginszPluginLoader.load_plugincCsŽtjd|ƒt|ƒ}|jdƒ}|jdƒx t|ƒdkrJt||jdƒƒ}q,Wx4|jD]*}t||ƒ}t|ƒtkrTt ||j ƒrT|SqTWt dƒ‚dS)Nzloading module %sÚ.rzCannot find the plugin class.) ÚlogÚdebugÚ __import__ÚsplitÚpopÚlenÚgetattrÚ__dict__r rrÚ ImportError)rrÚmoduleÚpathÚnameÚclsrrr r"s    zPluginLoader._get_classc CsŠt|jƒ}g}xvtj|jjdƒD]`}yFtjj|ƒd}|jdƒsDw"|j d|j|fƒ}||krj|j |ƒWq"t k r€Yq"Xq"W|S)NrZplugin_z%s.%s) rrÚosÚlistdirZpluginsÚ__path__r!ÚsplitextÚ startswithrÚappendr)rZplugins_packageZ plugin_clssrZ plugin_classrrr Úload_all_plugins2s   zPluginLoader.load_all_plugins) Ú__name__Ú __module__Ú __qualname__Ú __slots__r r rrr*Ú __classcell__rr)rr rs   ) Z tuned.logsZtunedr$Ú__all__ZlogsÚgetrrrrrrr Ús