o
    _                     @   s4   d dl Zd dlZdgZej ZG dd deZdS )    NPluginLoaderc                       sD   e Zd Zg dZdd Z fddZdd Zdd	 Zd
d Z  Z	S )r   )
_namespace_prefix
_interfacec                 C   s   t  )z~
		This method has to be implemented in child class and should
		set _namespace, _prefix, and _interface member attributes.
		)NotImplementedErrorself r	   ;/usr/lib/python3/dist-packages/tuned/utils/plugin_loader.py_set_loader_parameters   s   z#PluginLoader._set_loader_parametersc                    sn   t t|   d | _d | _d | _|   t| jtu sJ t| jtu s&J t| jtu r3t	| jt
s5J d S )N)superr   __init__r   r   r   r   typestr
issubclassobjectr   	__class__r	   r
   r      s   "zPluginLoader.__init__c                 C   s,   t |tu sJ d| j| j|f }| |S )Nz%s.%s%s)r   r   r   r   
_get_class)r   plugin_namemodule_namer	   r	   r
   load_plugin   s   
zPluginLoader.load_pluginc                 C   s   t d|  t|}|d}|d t|dkr)t||d}t|dks|jD ]}t||}t|tu rCt	|| j
rC|  S q,td)Nzloading module %s.r   zCannot find the plugin class.)logdebug
__import__splitpoplengetattr__dict__r   r   r   ImportError)r   r   modulepathnameclsr	   r	   r
   r   "   s   



zPluginLoader._get_classc              	   C   s   t | j}g }t|jjd D ]/}z$tj|d }|ds"W q| 	d| j|f }||vr5|
| W q ty?   Y qw |S )Nr   plugin_z%s.%s)r   r   oslistdirplugins__path__r#   splitext
startswithr   appendr!   )r   plugins_packageplugin_clssr   plugin_classr	   r	   r
   load_all_plugins2   s"   


zPluginLoader.load_all_plugins)
__name__
__module____qualname__	__slots__r   r   r   r   r1   __classcell__r	   r	   r   r
   r      s    )	
tuned.logstunedr'   __all__logsgetr   r   r   r	   r	   r	   r
   <module>   s
    
