o
    _                     @   s8   d dl Z d dlmZ d dlmZmZ G dd deZdS )    N)	ConfigObjConfigObjErrorc                   @   sn   e Zd ZdZdgZdd Zedd Zdd Zdd
dZ	dd Z
dd ZdddZdd Zdd Zdd Zd	S )Locatorz$
	Profiles locator and enumerator.
	_load_directoriesc                 C   s   t |tur
td|| _d S )Nz(load_directories parameter is not a list)typelist	TypeErrorr   )selfload_directories r   8/usr/lib/python3/dist-packages/tuned/profiles/locator.py__init__   s   
zLocator.__init__c                 C   s   | j S N)r   r	   r   r   r   r
      s   zLocator.load_directoriesc                 G   s&   t |dg }tjj| }tj|S )Nz
tuned.conf)r   ospathjoinnormpath)r	   
path_partsconfig_namer   r   r   _get_config_filename   s   zLocator._get_config_filenameNc                 C   sN   t | jD ]}| |tj|}|d ur||v rqtj|r$|  S qd S r   )reversedr   r   r   r   basenameisfile)r	   profile_name
skip_filesdir_nameconfig_filer   r   r   
get_config   s   zLocator.get_configc                 C   s   |d uo|dkod|vS )N /r   )r	   r   r   r   r   check_profile_name_format'   s   z!Locator.check_profile_name_formatc              
   C   sb   |  |sd S | |}|d u rd S zt|dddW S  tttfy0 } zW Y d }~d S d }~ww )NF)list_valuesinterpolation)r!   r   r   IOErrorOSErrorr   )r	   r   r   er   r   r   parse_config*   s   

zLocator.parse_configc                 C   s   zt |}W n ty   |g}d}Y nw zt |}W n ty)   |g}d}Y nw ||k r9||d g||   }| |}|d u rFg dS tj|v rQ|tj }nt }d|g}t||D ]\}	}
|	dksi|	d u rsd|d< |dg }q]|||	|
g }q]|S )N   )Fr   r   r   Tr   Fr   )lenr   r'   constsPLUGIN_MAIN_UNIT_NAMEdictzipget)r	   r   attrsdefvals	attrs_lendefvals_lenconfigdvalsattrdefvalr   r   r   get_profile_attrs:   s6   

zLocator.get_profile_attrsc              	   C   s^   t  }| jD ]&}zt|D ]}| ||}tj|r!|| qW q ty,   Y qw |S r   )	setr   r   listdirr   r   r   addr%   )r	   profilesr   r   r   r   r   r   list_profilesY   s   

zLocator.list_profilesc                 C   s   t |  S r   sortedr>   r   r   r   r   get_known_namese   s   zLocator.get_known_namesc                    s    fddt   D S )Nc                    s(   g | ]}|  |tjgd gd fqS )r      )r9   r+   PROFILE_ATTR_SUMMARY).0profiler   r   r   
<listcomp>i   s   ( z3Locator.get_known_names_summary.<locals>.<listcomp>r?   r   r   r   r   get_known_names_summaryh   s   zLocator.get_known_names_summaryr   )__name__
__module____qualname____doc__	__slots__r   propertyr
   r   r   r!   r'   r9   r>   rA   rG   r   r   r   r   r      s    


r   )r   tuned.constsr+   	configobjr   r   objectr   r   r   r   r   <module>   s    