utils: move config backup methods to confighelper

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2022-02-04 10:54:16 -05:00
parent 6749d3836e
commit f6d8de2cee
3 changed files with 29 additions and 25 deletions

View File

@ -8,6 +8,10 @@ from __future__ import annotations
import configparser
import os
import hashlib
import shutil
import filecmp
import pathlib
import logging
from utils import SentinelClass
from components.gpio import GpioOutputPin
from components.template import JinjaTemplate
@ -423,3 +427,22 @@ def get_configuration(server: Server,
raise ConfigError("No section [server] in config")
orig_sections = config.sections()
return ConfigHelper(server, config, 'server', orig_sections)
def backup_config(cfg_path: str) -> None:
cfg = pathlib.Path(cfg_path).expanduser().resolve()
backup = cfg.parent.joinpath(f".{cfg.name}.bkp")
try:
if backup.exists() and filecmp.cmp(cfg, backup):
# Backup already exists and is current
return
shutil.copy2(cfg, backup)
logging.info(f"Backing up last working configuration to '{backup}'")
except Exception:
logging.exception("Failed to create a backup")
def find_config_backup(cfg_path: str) -> Optional[str]:
cfg = pathlib.Path(cfg_path).expanduser().resolve()
backup = cfg.parent.joinpath(f".{cfg.name}.bkp")
if backup.is_file():
return str(backup)
return None

View File

@ -193,7 +193,8 @@ class Server:
if not self.warnings:
cfg_file = self.app_args['config_file']
await self.event_loop.run_in_thread(utils.backup_config, cfg_file)
await self.event_loop.run_in_thread(
confighelper.backup_config, cfg_file)
# Start HTTP Server
logging.info(
@ -855,7 +856,8 @@ def main() -> None:
"-n", "--nologfile", action='store_true',
help="disable logging to a file")
cmd_line_args = parser.parse_args()
app_args = {'config_file': cmd_line_args.configfile}
cfg_file = cmd_line_args.configfile
app_args = {'config_file': cfg_file}
# Setup Logging
version = utils.get_software_version()
@ -885,7 +887,7 @@ def main() -> None:
try:
server = Server(app_args, file_logger, event_loop)
except confighelper.ConfigError as e:
backup_cfg = utils.find_config_backup(app_args['config_file'])
backup_cfg = confighelper.find_config_backup(cfg_file)
if alt_config_loaded or backup_cfg is None:
logging.exception("Server Config Error")
estatus = 1
@ -915,7 +917,7 @@ def main() -> None:
# Restore the original config and clear the warning
# before the server restarts
if alt_config_loaded:
app_args['config_file'] = cmd_line_args.configfile
app_args['config_file'] = cfg_file
app_args.pop('config_warning', None)
alt_config_loaded = False
event_loop.close()

View File

@ -18,8 +18,6 @@ import hashlib
import json
import shlex
import re
import shutil
import filecmp
from queue import SimpleQueue as Queue
# Annotation imports
@ -232,22 +230,3 @@ def load_system_module(name: str) -> ModuleType:
else:
raise ServerError(f"Unable to import module {name}")
return module
def backup_config(cfg_path: str) -> None:
cfg = pathlib.Path(cfg_path).expanduser().resolve()
backup = cfg.parent.joinpath(f".{cfg.name}.bkp")
try:
if backup.exists() and filecmp.cmp(cfg, backup):
# Backup already exists and is current
return
shutil.copy2(cfg, backup)
logging.info(f"Backing up last working configuration to '{backup}'")
except Exception:
logging.exception("Failed to create a backup")
def find_config_backup(cfg_path: str) -> Optional[str]:
cfg = pathlib.Path(cfg_path).expanduser().resolve()
backup = cfg.parent.joinpath(f".{cfg.name}.bkp")
if backup.is_file():
return str(backup)
return None