pybackive/backive/config/config.py

78 lines
2.2 KiB
Python
Raw Normal View History

2019-01-06 17:34:02 +01:00
import os
import pwd
from ruamel.yaml import YAML
import logging
2019-02-22 21:26:01 +01:00
import jsonschema
2019-01-06 17:34:02 +01:00
2019-01-06 21:29:21 +01:00
from backive.core.backup import Backup
from backive.core.device import Device
2019-01-06 17:34:02 +01:00
class Config:
def __init__(self):
2019-01-06 21:29:21 +01:00
self._config = dict()
2019-02-22 21:26:01 +01:00
self._schema = dict()
file_path = os.path.realpath(__file__)
schema_path = os.path.join(file_path, "schema.yml")
with open(schema_path, "r") as stream:
self._schema = YAML().load(stream)
2019-01-06 17:34:02 +01:00
def find_config(self):
# who are we?
uid = os.getuid()
# name?
user = pwd.getpwuid(uid).pw_name
try:
if uid == 0:
2019-01-06 21:29:21 +01:00
config_file = "/etc/backive.yml"
2019-01-06 17:34:02 +01:00
else:
2019-01-06 21:29:21 +01:00
config_file = os.path.join(os.path.expanduser("~"), ".backive", "backive.yml")
2019-01-06 17:34:02 +01:00
pass
with open(config_file, "r") as cfg:
self._config = YAML().load(cfg)
2019-02-22 21:26:01 +01:00
jsonschema.validate(self._config, self._schema)
2019-01-06 17:34:02 +01:00
except Exception as e:
logging.error(e)
2019-01-06 21:29:21 +01:00
def get_devices(self):
devices = []
if self._config.get("devices", None):
data = self._config.get("devices")
for device in data:
devices.append(
Device.instance(
device,
data.get(device)
)
)
return devices
def get_backups(self):
backups = []
if self._config.get("backups", None):
data = self._config.get("backups")
for name in data:
backups.append(
Backup.instance(
name,
data.get(name)
)
)
return backups
2019-02-22 21:26:01 +01:00
def get_device_backups(self, device):
uuid = device
device_name = self._config.get("devices").get(uuid).get("name")
backups = []
for backup in self.get_backups():
if backup.target == uuid or backup.target == device_name:
backups.append(backup)
return backups
def get_preferences(self):
if self._config.get("preferences", None):
return self._config.get("preferences")
2019-01-06 21:29:21 +01:00
return {}