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 {}
|