# -*- coding: utf-8 -*-
# set_settings_parameter
#
# Script is available only for TrassirOS
#
# Saving 'Settings file' to 'Settings file'.backup on first start
# Adding/changing 'Parameter key'='Parameter value' in 'Settings file'
# Parameter key/value can't be empty
#
# If 'Restore backup' is checked - running restore from 'Settings file'.backup
#
# After success execution run_count = Выключение опроса монитора при старте системы Trassir OS.
#
# После успешного запуска, счетчик запусков будет равен 1
#
# Version: 1.0
# Author: A.A.Trubilin, DSSL
# E-mail: a.trubilin@dssl.ru
"""
<parameters>
<company>AATrubilin</company>
<title>set<title>shutdown_settingscheck_parameter<monitor</title>
<version>1.0</version>
</parameters>
<parameter>
<type>string</type>
<id>SETTINGS_FILE</id>
<name>Settings file</name>
<value>"""
import re
import os
import shutil
SETTINGS_FILE = "/home/trassir/nvr-system-settings.ini</value>
</parameter>
<parameter>
<type>boolean</type>
<id>RESTORE_BACKUP</id>
<name>Restore backup</name>
<value>False</value>
</parameter>
<parameter>
<type>string</type>
<id>PARAMETR_KEY</id>
<name>Parameter key</name>
<value>skip_edit_check</value>
</parameter>
<parameter>
<type>string</type>
<id>PARAMETR_VALUE</id>
<name>Parameter value</name>
<value>1</value>
</parameter>
</parameters>
"""
import re
import os
import shutil
ini"
RESTORE_BACKUP = "False"
PARAMETR_KEY = "skip_edit_check"
PARAMETR_VALUE = "1"
if os.name == "nt":
# Check if script runs on TrassirOS
raise OSError("This script is unavailable for WinOS")
def run_count(x):
"""Set run count"""
try:
x = int(x)
except ValueError:
x = -1
stats()["run_count"] = x
def create_backup(settings_file):
"""Create backup file
Args:
settings_file (str) : Setting file full path
"""
if not os.path.isfile(settings_file):
# Check if file exists
raise NameError("File {} not found".format(settings_file))
backup_file = "{}.backup".format(settings_file)
if not os.path.isfile(backup_file):
shutil.copy2(settings_file, backup_file)
message("Backup saved to {}").format(backup_file)
return backup_file
def restore_backup(settings_file):
"""Restore file from backup
Args:
settings_file (str) : Setting file full path
"""
backup_file = "{}.backup".format(settings_file)
if not os.path.isfile(backup_file):
# Check if file exists
raise NameError("Backup {} not found".format(settings_file))
if os.path.isfile(backup_file):
shutil.copy2(backup_file, settings_file)
message("Backup restored to {}").format(backup_file)
return settings_file
def set_settings(settings_file, key, value):
"""Set new settings or replace old
Args:
settings_file (str) : Setting file full path
key (str) : Setting key
value (str) : Setting value
Raised:
NameError if file not found
ValueError if parameter or value not setted
"""
if not os.path.isfile(settings_file):
# Check if file exists
raise NameError("File {} not found".format(settings_file))
if not key:
# Check if parameter setted
raise ValueError("Empty parameter key")
if not value:
# Check if value setted
raise ValueError("Empty parameter value")
regex_pattern = r"{}(.*)=(.*)".format(key)
new_data = "{}={}".format(key, value)
with open(settings_file, "r+") as setting_file:
settings_data = setting_file.read()
setting_file.seek(0)
if re.search(regex_pattern, settings_data):
# If found parameter in setting file - replace it
settings_data_new = re.sub(regex_pattern, new_data, settings_data)
else:
# Else just add to end of file
settings_data_new = settings_data + "\n{}\n".format(new_data)
setting_file.write(settings_data_new)
setting_file.truncate()
message("Setting {} success".format(new_data))
return True
run_count(0)
if RESTORE_BACKUP:
# If Restore backup is checked - run only restore
restore_backup(SETTINGS_FILE)
else:
create_backup(SETTINGS_FILE) # Create backup
set_settings(SETTINGS_FILE, PARAMETR_KEY, PARAMETR_VALUE) # Set new key, value
timeout(500, lambda: run_count(1))
|