o
    _	                     @   sh   d dl Z d dlZd dlZddlmZ d dlmZ d dlmZ d dl	m
Z
mZ ej ZG dd dZdS )    N   )	functions)commands)	ConfigObjConfigObjErrorc                   @   s`   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdS )	Variablesz8
	Storage and processing of variables used in profiles
	c                 C   s"   t  | _i | _i | _t | _d S N)r   _cmd
_lookup_re_lookup_envr   	Functions
_functionsself r   :/usr/lib/python3/dist-packages/tuned/profiles/variables.py__init__   s   zVariables.__init__c                 C   s   | |dkr	|S || S )Nr   )find)r   sprefixr   r   r   _add_env_prefix   s   zVariables._add_env_prefixc                 C   s   t d|S )Nz\w+$)rematch)r   variabler   r   r   
_check_var   s   zVariables._check_varc                 C   sj   |d u rd S t |}| |std|  d S | |}|| jdt| d < || j| 	|t
j< d S )Nz6variable definition '%s' contains unallowed charactersz
(?<!\\)\${})strr   logerrorexpandr
   r   escaper   r   consts
ENV_PREFIX)r   r   valuer   vr   r   r   add_variable   s   

zVariables.add_variablec                 C   s   |D ]
}|  |||  qd S r   )r%   )r   ditemr   r   r   add_dict+   s   zVariables.add_dictc                 C   s   t j|std|  d S zt|ddddd}W n ty+   td|  Y d S w |D ]}t|| tr?| 	||  q.| 
|||  q.d S )Nz#unable to find variables_file: '%s'TF)raise_errors
file_errorlist_valuesinterpolationz"error parsing variables_file: '%s')ospathexistsr   r   r   r   
isinstancedictr(   r%   )r   filenameconfigr'   r   r   r   add_from_file/   s   zVariables.add_from_filec                 C   sB   |D ]}t |dkr| tj||  q| |||  qd S )Ninclude)r   r4   r-   r.   normpathr%   )r   cfgr'   r   r   r   add_from_cfg>   s
   zVariables.add_from_cfgc                 C   s   t dd| j| j|S )Nz\\(\${\w+})z\1)r   subr	   multiple_re_replacer
   )r   r#   r   r   r   expand_staticF   s   zVariables.expand_staticc                 C   s&   |d u rd S |  t|}| j|S r   )r;   r   r   r   )r   r#   r   r   r   r   r   I   s   zVariables.expandc                 C   s   | j S r   )r   r   r   r   r   get_envQ   s   zVariables.get_envN)__name__
__module____qualname____doc__r   r   r   r%   r(   r4   r8   r;   r   r<   r   r   r   r   r      s    r   )r-   r   
tuned.logstunedr   tuned.constsr!   tuned.utils.commandsr   	configobjr   r   logsgetr   r   r   r   r   r   <module>   s    
