<!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
`g@                 @   sr   d dl Z d dlZd dlZd dlZd dlZd dlZd dljZd dl	Z	d dl
T d dlmZ ejj ZG dd dZdS )    N)*)TunedExceptionc               @   s  e Zd ZdbddZdd Zdd Zdd	 Zd
d Zdd ZdcddZ	ddddZ
dd Zdd Zdd ZdeddZdfddZdgd d!Zdhd#d$Zdid%d&Zdjd'd(Zdkd)d*Zdld+d,Zd-d. Zd/d0 Zdmd1d2Zd3d4 Zd5d6 Zdnd7d8Zddi g dfd9d:Zdod;d<Zd=d> Zd?d@ ZdAdB Z dpdDdEZ!dFdG Z"dHdI Z#dJdK Z$dLdM Z%dqdNdOZ&dPdQ Z'dRdS Z(dTdU Z)dVdW Z*dXdY Z+dZd[ Z,d\d] Z-d^d_ Z.d`da Z/dS )rcommandsTc             C   s
   || _ d S )N)_logging)selfZlogging r   /usr/lib/python3.6/commands.py__init__   s    zcommands.__init__c             C   s   | j rtj| d S )N)r   logerror)r   msgr   r   r   _error   s    zcommands._errorc             C   s   | j rtj| d S )N)r   r
   debug)r   r   r   r   r   _debug   s    zcommands._debugc          	   C   s.   t |j j }dddddddddj||S )N10)YZYESTZTRUENZNOFZFALSE)strupperstripget)r   valuevr   r   r   get_bool   s    zcommands.get_boolc             C   s   t jddt|j S )Nz\s+ )resubr   r   )r   sr   r   r   	remove_ws   s    zcommands.remove_wsc             C   s   t jdd|S )Nz^"(.*)"$z\1)r   r   )r   r   r   r   r   unquote"   s    zcommands.unquote\c             C   s   |j |d||f S )Nz%s%s)replace)r   r    Zwhat_escapeZ	escape_byr   r   r   escape&   s    zcommands.escapec             C   s   |j |dS )N )r$   )r   r    Zescape_charr   r   r   unescape*   s    zcommands.unescapec             C   s   |d|t |   | S )Nr   )len)r   s1poss2r   r   r   	align_str.   s    zcommands.align_strc             C   s2   g }|d k	r.x t |j D ]}|t|7 }qW |S )N)sorteditemslist)r   dlir   r   r   	dict2list4   s
    zcommands.dict2listc             C   s(   |d krd S t jddjt|j  S )Nz(%s)z)|()r   compilejoinr/   keys)r   r0   r   r   r   re_lookup_compile<   s    zcommands.re_lookup_compileNr   c                sV    d kr|d kr.|S nt  dks*|d kr.|S |d kr@| j }|j fdd||S )Nr   c                s   t  j | jd  S )N   )r/   values	lastindex)mo)r0   r   r   <lambda>M   s    z.commands.multiple_re_replace.<locals>.<lambda>)r(   r7   r   )r   r0   r    rflagsr   )r0   r   multiple_re_replaceD   s    
zcommands.multiple_re_replacec             C   sR   t |dks|d krd S |d kr*| j|}|j|}|rNt|j |jd  S d S )Nr   r8   )r(   r7   searchr/   r9   r:   )r   r0   r    r=   r;   r   r   r   	re_lookupS   s    

zcommands.re_lookupFc       	      C   s   | j d||f  |r2tjj|}tjj|r2d}y6|rBtj| t|d}|jt| |j	  d}W n` t
tfk
r } z@d}t|tr| st|tr|j|kr| jd||f  W Y dd}~X nX |S )a  Write data to a file.

		Parameters:
		f -- filename where to write
		data -- data to write
		makedir -- if True and the path doesn't exist, it will be created
		no_error -- if True errors are silenced, it can be also list of ignored errnos

		Return:
		bool -- True on success
		zWriting to file: '%s' < '%s'FwTz Writing to file '%s' error: '%s'N)r   ospathdirnameisdirmakedirsopenwriter   closeOSErrorIOError
isinstanceboolr/   errnor   )	r   fdataZmakedirno_errorr0   fdZrcer   r   r   write_to_file]   s$    

$zcommands.write_to_filer&   c             C   sv   |}yt |d}|j }|j  W n< ttfk
r^ } z|sN| jd||f  W Y d d }~X nX | jd||f  |S )Nr=   z"Error when reading file '%s': '%s'z Read data from file: '%s' > '%s')rH   readrJ   rK   rL   r   r   )r   rP   Zerr_retrR   Z	old_valuerT   r   r   r   	read_file|   s    
$zcommands.read_filec             C   sj   | j d|  tjj|rfytj|| W n: tk
rd } z|sVtjd|t	|f  dS d }~X nX dS )NzRemoving tree: '%s'zcannot remove tree '%s': '%s'FT)
r   rC   rD   existsshutilrmtreerK   r
   r   r   )r   rP   rR   r   r   r   r   rZ      s    zcommands.rmtreec             C   sh   | j d|  tjj|rdytj| W n: tk
rb } z|sTtjd|t|f  dS d }~X nX dS )NzRemoving file: '%s'zcannot remove file '%s': '%s'FT)	r   rC   rD   rX   unlinkrK   r
   r   r   )r   rP   rR   r   r   r   r   r[      s    zcommands.unlinkc             C   sd   | j d||f  ytj|| W n< tk
r^ } z |sPtjd||t|f  dS d }~X nX dS )NzRenaming file '%s' to '%s'z%cannot rename file '%s' to '%s': '%s'FT)r   rC   renamerK   r
   r   r   )r   srcdstrR   r   r   r   r   r\      s    zcommands.renamec             C   s`   y"t jd||f  tj|| dS  tk
rZ } z|sLt jd|||f  dS d }~X nX d S )Nzcopying file '%s' to '%s'Tz!cannot copy file '%s' to '%s': %sF)r
   r   rY   copyrL   r   )r   r]   r^   rR   rT   r   r   r   r_      s    zcommands.copyc             C   s6   | j |}t|dkrdS | j|tj|||tjdS )Nr   F)r>   )rW   r(   rU   r   r   	MULTILINE)r   rP   patternreplrQ   r   r   r   replace_in_file   s    
zcommands.replace_in_filec             C   s4   | j |}t|dkrdS | j|| j||tjdS )Nr   F)r>   )rW   r(   rU   r?   r   r`   )r   rP   r0   rQ   r   r   r   multiple_replace_in_file   s    
z!commands.multiple_replace_in_filec             C   s   | j |}x|D ]}t|}t|| }tjd| d |tjdd kr||rt|dkrj|d dkrj|d7 }|d||f 7 }qtjd| d	 d| j| d |tjd}qW | j||S )Nz\bz\s*=.*$)r>   r   r8   
z%s="%s"
z\b(z\s*=).*$z\1"z\1")	rW   r   r   r@   r`   r(   r   r%   rU   )r   rP   r0   addrQ   optor   r   r   r   add_modify_option_in_file   s    

.z"commands.add_modify_option_in_filec             C   s"   | j |}tjt|jdj S )Nzutf-8)rW   hashlibZmd5r   encode	hexdigest)r   rP   rQ   r   r   r   md5sum   s    
zcommands.md5sumc             C   s"   | j |}tjt|jdj S )Nzutf-8)rW   rl   Zsha256r   rm   rn   )r   rP   rQ   r   r   r   	sha256sum   s    
zcommands.sha256sumc             C   s   | j tj|j S )N)rW   constsZMACHINE_ID_FILEr   )r   rR   r   r   r   get_machine_id   s    zcommands.get_machine_idc             C   sV  d}t jj }d|d< |j| | jdt|  d}	d }
yt|tt|||ddd}|j \}	}|j	}|r||krd|kr|d d }t
|dkr|	d d }d	d
j||f }
|s| j|
 W nx ttfk
r8 } zV|jd k	r|j nd}t||kr(d|kr(d	d
j||f }
|s(| j|
 W Y d d }~X nX |rJ||	|
fS ||	fS d S )Nr   CLC_ALLzExecuting %s.r&   T)stdoutstderrenvshellcwdZ	close_fdsZuniversal_newlinesr8   zExecuting '%s' error: %sr   rg   rg   rg   )rC   environr_   updater   r   PopenPIPEZcommunicate
returncoder(   r5   r   rK   rL   rO   abs)r   argsrx   ry   rw   Z	no_errorsZ
return_errZretcodeZ_environmentoutZerr_msgprocerrZerr_outrT   r   r   r   execute   s>    


zcommands.executec             C   s.   t jd|}|r|jdS |r*|j d S |S )Nz.*\[([^\]]+)\].*r8   r   )r   matchgroupsplit)r   ZoptionsZdosplitmr   r   r   get_active_option  s    
zcommands.get_active_optionc             C   s*   t |}|dkp(| jd| ddj dkS )Nr   z$/sys/devices/system/cpu/cpu%s/onlineT)rR   r   )r   rW   r   )r   cpuZscpur   r   r   is_cpu_online  s    zcommands.is_cpu_onlinec             C   s\   |d krd S t |jdd}yt|d}W n& tk
rP   tjdt |  g S X | j|S )N,r&      zinvalid hexadecimal mask '%s')r   r$   int
ValueErrorr
   r   bitmask2cpulist)r   maskr   r   r   r   hex2cpulist  s    zcommands.hex2cpulistc             C   s<   d}g }x.|dkr6|d@ r$|j | |dL }|d7 }q
W |S )Nr   r8   )append)r   r   r   cpusr   r   r   r   &  s    

zcommands.bitmask2cpulist'"c             C   s^  g }|d kr|S |}t |tk	rD|d k	r6t|j|}t|jd}g }g }d}d}x|D ]}	t|	}
|rt|
dkrd}|j| d}n||
7 }q\|
dd j dkrd}|
}q\|
o|
d dks|
d d	krP|
d
d  jd}yPt|d
kr|ttt	|d t	|d
 d
 7 }n|jt	|
d
d   W n t
k
rL   g S X q\t|
dkr\|j|
 q\W t|dkr|j| x|D ]}	|	jd}|	dd j dkr|| j|	7 }ndyLt|d
kr|ttt	|d t	|d
 d
 7 }n|jt	|d  W n t
k
r   g S X qW ttt|}x"|D ]}||kr<|j| q<W |S )Nr   Fr&   r      Z0xT^!r8   -)typer/   r   r   r   r(   r   lowerranger   r   r   r-   setremove)r   r1   Zstrip_charsrlZllZll2Znegation_listZhexmaskZhvr   ZsvnlZvlZcpu_listr   r   r   r   cpulist_unpack9  sh    





(

zcommands.cpulist_unpackc             C   s   | j |}|d kst|dkr"|S d}|}g }xz|d t|k r||d  ||  dkr||kr|jt|| d t||   n|jt||  |d }|d7 }q0W |d t|k r|jt|| d t|d   n|jt|d  |S )Nr   r8   r   rg   rg   )r   r(   r   r   )r   r1   r2   jr   r   r   r   cpulist_pack}  s"    
$$zcommands.cpulist_packc             C   s.   | j |}| j | jd}tt|t| S )Nz/sys/devices/system/cpu/online)r   rW   r/   r   )r   r1   r   Zonliner   r   r   cpulist_invert  s    
zcommands.cpulist_invertc                s   |d krd S | j |}|d kr"d S | j|}d|  t }|d dkrX|d|d  7 } j| dj fddtdt dD S )Nz%x   r   r   c             3   s   | ]} ||d   V  qdS )r   Nr   ).0r2   )r    r   r   	<genexpr>  s    z'commands.cpulist2hex.<locals>.<genexpr>)r   cpulist2bitmaskr(   zfillr5   r   )r   r1   Zulr   Zlsr   )r    r   cpulist2hex  s    


zcommands.cpulist2hexc             C   s$   d}x|D ]}|t d|O }q
W |S )Nr   r   )pow)r   r1   r   r   r   r   r   r     s    
zcommands.cpulist2bitmaskc                s   dj  fdd|D S )Nr   c             3   s   | ]} t | V  qd S )N)r   )r   r   )prefixr   r   r     s    z*commands.cpulist2string.<locals>.<genexpr>)r5   )r   r1   r   r   )r   r   cpulist2string  s    zcommands.cpulist2stringc             C   sb   |dd j  dkrH|dd  }|dd j  dkrHdd | j|D S tjd|}dd |D S )Nr   r   zcpulist:c             S   s   g | ]}d t | qS )r   )r   )r   r   r   r   r   
<listcomp>  s    z(commands.devstr2devs.<locals>.<listcomp>z\s*(?<!\\),\s*c             S   s   g | ]}t |jd dqS )z\,r   )r   r$   )r   r   r   r   r   r     s    )r   r   r   r   )r   r    r1   r   r   r   devstr2devs  s    zcommands.devstr2devsc          	   C   s"   y|j |dS    |j |S d S )NF)wait)r   Z	terminateZtimer   r   r   r     s    zcommands.waitc             C   s   t |j j }xdD ]}|j|}|dkr.qybt|d | }||d  }|dkr^|d9 }n0|dkrp|d	9 }n|dkr|d9 }n|dkrd }|S  tk
r   d S X qW d S )NKBMBGBr&   r8   i   )r   r   r   r&   rg   i   i   i   @)r   r   r   rfindr   r   )r   r    ZunitZunit_ixvalur   r   r   get_size  s&    




zcommands.get_sizec             C   s  d}d}y(t tjd}|j j }W d Q R X W nj tk
rj } z|jtjkrZtd| W Y d d }~X n2 t	t
fk
r } ztd| W Y d d }~X nX yHt tjd2}|j j }|dtjtjgkrtdtj W d Q R X W np tk
r" } z |jtjkrtd| W Y d d }~X n4 t	t
fk
rT } ztd| W Y d d }~X nX |dkrfd }n
|tjk}|dkr~d }||fS )Nr&   r=   z!Failed to read active profile: %szInvalid value in file %s.zFailed to read profile mode: %s)rH   rq   ACTIVE_PROFILE_FILErV   r   rL   rO   ENOENTr   rK   EOFErrorPROFILE_MODE_FILEACTIVE_PROFILE_AUTOACTIVE_PROFILE_MANUAL)r   profile_namemoderP   rT   manualr   r   r   get_active_profile  s4    


zcommands.get_active_profilec             C   s   y2t tjd}|d k	r&|j|d  W d Q R X W n4 ttfk
rf } ztd|j W Y d d }~X nX y:t tjd$}|rtj	ntj
}|j|d  W d Q R X W n4 ttfk
r } ztd|j W Y d d }~X nX d S )NrB   re   z!Failed to save active profile: %szFailed to save profile mode: %s)rH   rq   r   rI   rK   rL   r   strerrorr   r   r   )r   r   r   rP   rT   r   r   r   r   save_active_profile  s     zcommands.save_active_profilec             C   s   d}y(t tjd}|j j }W d Q R X W nj tk
rf } z|jtjkrVtd| W Y d d }~X n2 t	t
fk
r } ztd| W Y d d }~X nX |dkrd }|S )Nr&   r=   z1Failed to read the active post-loaded profile: %s)rH   rq   POST_LOADED_PROFILE_FILErV   r   rL   rO   r   r   rK   r   )r   r   rP   rT   r   r   r   get_post_loaded_profile  s    z commands.get_post_loaded_profilec             C   sl   y2t tjd}|d k	r&|j|d  W d Q R X W n4 ttfk
rf } ztd|j W Y d d }~X nX d S )NrB   re   z1Failed to save the active post-loaded profile: %s)rH   rq   r   rI   rK   rL   r   r   )r   r   rP   rT   r   r   r   save_post_loaded_profile  s    z!commands.save_post_loaded_profilec             C   sD   yt j||}W n( tk
r8   dd l}|j||}Y nX |j|S )Nr   )r   	maketransAttributeErrorstring	translate)r   textZsource_charsZ
dest_charsZtransr   r   r   r   tr  s    zcommands.trc             C   s&   | p$t dd |D o$t|tjkS )Nc             s   s   | ]}|t jkV  qd S )N)rq   ZNAMES_ALLOWED_CHARS)r   cr   r   r   r   &  s    z)commands.is_valid_name.<locals>.<genexpr>)allr(   rq   ZNAMES_MAX_LENGTH)r   namer   r   r   is_valid_name%  s    zcommands.is_valid_name)T)r#   r#   )r#   )Nr   )N)FF)r&   F)F)F)F)F)T)T)T)r   )r&   )0__name__
__module____qualname__r	   r   r   r   r!   r"   r%   r'   r,   r3   r7   r?   rA   rU   rW   rZ   r[   r\   r_   rc   rd   rk   ro   rp   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sZ   
















'
	
D
		r   )rO   rl   Z
tuned.logsZtunedr_   rC   rY   Ztuned.constsrq   r   
subprocessZtuned.exceptionsr   Zlogsr   r
   r   r   r   r   r   <module>   s   

