pybackive/backive/core/backup.py

62 lines
2.3 KiB
Python
Raw Normal View History

2019-01-06 17:34:02 +01:00
import os
import logging
2020-03-18 21:09:17 +01:00
from subprocess import Popen
import asyncio
from backive.config.config import Config
2019-01-06 17:34:02 +01:00
class Backup:
2019-01-06 21:29:21 +01:00
def __init__(self, name, cfg=None):
2019-02-24 22:42:36 +01:00
self.name = name
self.config = cfg
2019-01-06 17:34:02 +01:00
@classmethod
def instance(cls, name, config=None):
logging.debug("Backup instance created (%s)", name)
return Backup(name, config)
2019-05-03 21:36:44 +02:00
def get_frequency(self):
return self.config.get("frequency", None)
2020-03-18 21:09:17 +01:00
async def run(self):
logging.debug("Running backup %s", self.name)
if self.config.get("script", None) is not None:
2020-03-18 21:09:17 +01:00
logging.debug("Executing script..")
backup_env = os.environ.copy()
backup_env["BACKIVE_FROM"] = self.config.get("from")
backup_env["BACKIVE_TO"] = self.config.get("to")
backup_env["BACKIVE_MOUNT"] = os.path.join(
(await Config().get_preferences()).get("mount_root"),
(await Config().get_device(
self.config.get("target_device")
)).config.get("mountname")
)
2020-03-18 21:09:17 +01:00
proc = await asyncio.create_subprocess_shell(
"""mkdir -p {}""".format(
os.path.join(
backup_env["BACKIVE_MOUNT"],
backup_env["BACKIVE_TO"]
)
),
2020-03-18 21:09:17 +01:00
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
2020-03-18 21:09:17 +01:00
)
stdout, stderr = await proc.communicate()
2021-05-20 20:24:46 +02:00
logging.debug("stdout: %s", stdout.decode())
logging.debug("stderr: %s", stderr.decode())
2020-09-27 17:15:46 +02:00
user = self.config.get("user")
proc = await asyncio.create_subprocess_shell(
2020-09-27 17:15:46 +02:00
# "set -x; chown -R {} ${{BACKIVE_MOUNT}}/${{BACKIVE_TO}};".format(user) +
2021-05-24 23:02:54 +02:00
# "sudo -E -u {} sh -c '".format(user) +
self.config.get("script"),
2020-09-27 17:15:46 +02:00
# "'",
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
2020-09-27 17:15:46 +02:00
shell=True,
env=backup_env
)
stdout, stderr = await proc.communicate()
logging.debug("stdout: %s", stdout.decode())
logging.debug("stderr: %s", stderr.decode())
2020-03-18 21:09:17 +01:00
return stdout