<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
<e                 @   s6   d dl Z d dljZd dlmZmZ G dd deZdS )    N)ConfigParserErrorc               @   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k	rtd|| _d S )Nz(load_directories parameter is not a list)typelist	TypeErrorr   )selfload_directories r   /usr/lib/python3.6/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j|S )Nz
tuned.conf)r   ospathjoinnormpath)r	   
path_partsZconfig_namer   r   r   _get_config_filename   s    zLocator._get_config_filenameNc             C   s   d }|dd dk}|r$|dd  }xLt | jD ]>}| j|tjj|}|d k	r^||kr^d}q0tjj|r0|S q0W |r|d krd}|S )Nr      - )reversedr   r   r   r   basenameisfile)r	   profile_nameZ
skip_filesretZconditional_loaddir_nameconfig_filer   r   r   
get_config   s    zLocator.get_configc             C   s   |d k	o|dkod|kS )Nr   /r   )r	   r   r   r   r   check_profile_name_format0   s    z!Locator.check_profile_name_formatc             C   s   | j |sd S | j|}|d kr$d S yJtddddd}t|_t|"}|jdtj d |j	   W d Q R X |S  t
ttfk
r } zd S d }~X nX d S )N=#TF)Z
delimitersZinline_comment_prefixesZallow_no_valuestrict[z]
)r    r   r   strZoptionxformopenZread_stringconstsZMAGIC_HEADER_NAMEreadIOErrorOSErrorr   )r	   r   r   configfer   r   r   parse_config3   s    


&zLocator.parse_configc             C   s$  yt |}W n tk
r*   |g}d}Y nX yt |}W n tk
rV   |g}d}Y nX ||k rv||d g||   }| j|}|d krddddgS tj|j k}d|g}xtt||D ]f\}	}
|	dks|	d krd|d< |dg }q|o|	|jtjkr||jtj|	ddg }q||
g }qW |S )Nr   Fr   Tr   )raw)	lenr   r.   r'   ZPLUGIN_MAIN_UNIT_NAMEZsectionszipZoptionsget)r	   r   ZattrsZdefvalsZ	attrs_lenZdefvals_lenr+   Zmain_unit_in_configvalsattrZdefvalr   r   r   get_profile_attrsG   s2    


zLocator.get_profile_attrsc             C   sj   t  }x^| jD ]T}y:x4tj|D ]&}| j||}tjj|r |j| q W W q tk
r`   Y qX qW |S )N)	setr   r   listdirr   r   r   addr*   )r	   Zprofilesr   r   r   r   r   r   list_profilese   s    
zLocator.list_profilesc             C   s   t | j S )N)sortedr:   )r	   r   r   r   get_known_namesq   s    zLocator.get_known_namesc                s    fddt  j D S )Nc                s(   g | ] }| j |tjgd gd fqS )r      )r6   r'   ZPROFILE_ATTR_SUMMARY).0Zprofile)r	   r   r   
<listcomp>u   s    z3Locator.get_known_names_summary.<locals>.<listcomp>)r;   r:   )r	   r   )r	   r   get_known_names_summaryt   s    zLocator.get_known_names_summary)N)N)__name__
__module____qualname____doc__	__slots__r   propertyr
   r   r   r    r.   r6   r:   r<   r@   r   r   r   r   r      s   

r   )r   Ztuned.constsr'   Ztuned.utils.config_parserr   r   objectr   r   r   r   r   <module>   s   
