Sindbad~EG File Manager
3
�<�e�@sVddljZddlmZddlZddlZddlmZm Z ej
j�ZGdd�dej
�ZdS)�N�)�base)�Popen�PIPEcsbeZdZdZedd��Zdd�Zdd�Zdd �Z�fd
d�Z �fdd
�Z
ejf�fdd� Z
�ZS)�ScriptPluginac
`script`::
Executes an external script or binary when the profile is loaded or
unloaded. You can choose an arbitrary executable.
+
IMPORTANT: The `script` plug-in is provided mainly for compatibility
with earlier releases. Prefer other *TuneD* plug-ins if they cover
the required functionality.
+
*TuneD* calls the executable with one of the following arguments:
+
--
** `start` when loading the profile
** `stop` when unloading the profile
--
+
You need to correctly implement the `stop` action in your executable
and revert all settings that you changed during the `start`
action. Otherwise, the roll-back step after changing your *TuneD*
profile will not work.
+
Bash scripts can import the [filename]`/usr/lib/tuned/functions`
Bash library and use the functions defined there. Use these
functions only for functionality that is not natively provided
by *TuneD*. If a function name starts with an underscore, such as
`_wifi_set_power_level`, consider the function private and do not
use it in your scripts, because it might change in the future.
+
Specify the path to the executable using the `script` parameter in
the plug-in configuration.
+
.Running a Bash script from a profile
====
To run a Bash script named `script.sh` that is located in the profile
directory, use:
----
[script]
script=${i:PROFILE_DIR}/script.sh
----
====
cCsddiS)N�script�)�selfrr�#/usr/lib/python3.6/plugin_script.py�_get_config_options6sz ScriptPlugin._get_config_optionscCsFd|_d|_|jddk r<t|jdt�s.t�|jd|_ng|_dS)NTFr)Z_has_static_tuningZ_has_dynamic_tuningZoptions�
isinstance�list�AssertionError�_scripts)r �instancerrr
�_instance_init<szScriptPlugin._instance_initcCsdS)Nr)r rrrr
�_instance_cleanupFszScriptPlugin._instance_cleanupc
Csd}�x|D�]�}tj}|j|jj��tjd|t|�f�tjdtt |j
����ytt|g|ttd|dtj
j|�d�}|j�\}}t|�r�tjd||dd
�f�|jr�tjd||jf�d}Wqttfk
�r
} ztjd || f�d}WYdd} ~ XqXqW|S)NTz'calling script '%s' with arguments '%s'zusing environment '%s')�stdout�stderrZ close_fds�envZuniversal_newlines�cwdzscript '%s' error output: '%s'rz#script '%s' returned error code: %dFzscript '%s' error: %s���)�os�environ�updateZ
_variablesZget_env�log�info�str�debugr
�itemsrr�path�dirnameZcommunicate�len�error�
returncode�OSError�IOError)
r �scriptsZ arguments�retrr�proc�out�err�errr
�
_call_scriptsIs,
zScriptPlugin._call_scriptscs$tt|�j|�|j|jdg�dS)N�start)�superr�_instance_apply_staticr-r)r r)� __class__rr
r0asz#ScriptPlugin._instance_apply_staticcstd}tt|�j|||�dkr d}dg}|r4|dg7}|j|j|�dkrZtjtj|j�ntj tj
|j�d}|S)NTFZverify�ignore_missing)r/r�_instance_verify_staticr-rrr�constsZSTR_VERIFY_PROFILE_OKr#ZSTR_VERIFY_PROFILE_FAIL)r rr2Zdevicesr(�args)r1rr
r3es
z$ScriptPlugin._instance_verify_staticcsBdg}|tjkr|dg}|jt|j�|�tt|�j||�dS)N�stopZ
full_rollback)r4Z
ROLLBACK_FULLr-�reversedrr/r�_instance_unapply_static)r rZrollbackr5)r1rr
r8ts
z%ScriptPlugin._instance_unapply_static)�__name__�
__module__�__qualname__�__doc__�classmethodrrrr-r0r3r4Z
ROLLBACK_SOFTr8�
__classcell__rr)r1r
r s+
r)Ztuned.constsr4�rZ
tuned.logsZtunedr�
subprocessrrZlogs�getrZPluginrrrrr
�<module>s
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists