3 �<�e��@s6ddlZddljZddlmZmZGdd�de�ZdS)�N)� ConfigParser�Errorc@sneZdZdZdgZdd�Zedd��Zdd�Zdd d �Z d d �Z dd�Z ddd�Z dd�Z dd�Zdd�Zd S)�Locatorz$ Profiles locator and enumerator. �_load_directoriescCst|�tk rtd��||_dS)Nz(load_directories parameter is not a list)�type�list� TypeErrorr)�self�load_directories�r �/usr/lib/python3.6/locator.py�__init__ s zLocator.__init__cCs|jS)N)r)r r r r r szLocator.load_directoriescGs&t|�dg}tjj|�}tjj|�S)Nz tuned.conf)r�os�path�join�normpath)r � path_partsZ config_namer r r �_get_config_filenames zLocator._get_config_filenameNcCs�d}|dd�dk}|r$|dd�}xLt|j�D]>}|j|tjj|��}|dk r^||kr^d}q0tjj|�r0|Sq0W|r�|dkr�d}|S)Nr��-�)�reversedrrrr�basename�isfile)r � profile_nameZ skip_files�retZconditional_load�dir_name� config_filer r r � get_configs   zLocator.get_configcCs|dk o|dkod|kS)Nr�/r )r rr r r �check_profile_name_format0sz!Locator.check_profile_name_formatcCs�|j|�sdS|j|�}|dkr$dSyJtddddd�}t|_t|��"}|jdtjd|j ��WdQRX|St t t fk r�}zdSd}~XnXdS)N�=�#TF)Z delimitersZinline_comment_prefixesZallow_no_value�strict�[z] ) r rr�strZ optionxform�openZ read_string�constsZMAGIC_HEADER_NAME�read�IOError�OSErrorr)r rr�config�f�er r r � parse_config3s   &zLocator.parse_configc Cs$y t|�}Wntk r*|g}d}YnXy t|�}Wntk rV|g}d}YnX||krv||dg||}|j|�}|dkr�ddddgStj|j�k}d|g}xtt||�D]f\} } | dks�| dkr�d|d<|dg}q�|o�| |jtj�k�r||jtj| dd�g}q�|| g}q�W|S)NrFrTr)�raw�����) �lenrr.r'ZPLUGIN_MAIN_UNIT_NAMEZsections�zipZoptions�get) r rZattrsZdefvalsZ attrs_lenZ defvals_lenr+Zmain_unit_in_config�vals�attrZdefvalr r r �get_profile_attrsGs2       zLocator.get_profile_attrsc Csjt�}x^|jD]T}y:x4tj|�D]&}|j||�}tjj|�r |j|�q WWqtk r`YqXqW|S)N) �setrr�listdirrrr�addr*)r Zprofilesrrrr r r � list_profileses    zLocator.list_profilescCs t|j��S)N)�sortedr:)r r r r �get_known_namesqszLocator.get_known_namescs�fdd�t�j��D�S)Ncs(g|] }|�j|tjgdg�df�qS)r�)r6r'ZPROFILE_ATTR_SUMMARY)�.0Zprofile)r r r � usz3Locator.get_known_names_summary..)r;r:)r r )r r �get_known_names_summarytszLocator.get_known_names_summary)N)N)�__name__� __module__� __qualname__�__doc__� __slots__r �propertyr rrr r.r6r:r<r@r r r r rs    r)rZ tuned.constsr'Ztuned.utils.config_parserrr�objectrr r r r �s