4 Commits
3.0.0 ... 3.0.2

Author SHA1 Message Date
d2e03f89ca Add desktop notifications 2023-04-29 21:28:42 +02:00
92ecc95f72 Fix Arch Linux .install file 2023-04-15 22:16:50 +02:00
3e5e3cb066 Add timing 2023-04-15 21:53:16 +02:00
bd74cf0e14 Fix PKGBUILD 2023-04-15 21:43:09 +02:00
3 changed files with 69 additions and 33 deletions

View File

@ -13,7 +13,8 @@ license=('GPL3')
makedepends=('git')
depends=('python3'
'rsync'
'python-dotenv')
'python-dotenv'
'python-dbus')
install=${pkgname}.install
source=(git+https://github.com/Fuxino/${pkgname}.git)
sha256sums=('SKIP')
@ -27,5 +28,5 @@ pkgver()
package()
{
install -Dm755 "${srcdir}/${pkgname}/${pkgname}.py" "${pkgdir}/usr/bin/${pkgname}"
install -Dm644 "${srcdir}/${pkgname}/config" "${pkgdir}/etc/${pkgname}/config"
install -Dm644 "${srcdir}/${pkgname}/${pkgname}.config" "${pkgdir}/etc/${pkgname}/${pkgname}.config"
}

View File

@ -1,5 +1,5 @@
post_install() {
echo "An example configuration file is found in /etc/simple_backup/config."
echo "An example configuration file is found in /etc/simple_backup/simple_backup.config."
echo "Copy it to ~/.simple_backup/simple_backup.config and modify it as needed"
}

View File

@ -3,17 +3,69 @@
# Import libraries
from dotenv import load_dotenv
import os
from functools import wraps
import dbus
from shutil import rmtree
import argparse
import configparser
import logging
from logging import StreamHandler
from logging.handlers import RotatingFileHandler
from timeit import default_timer
from subprocess import Popen, PIPE, STDOUT
from datetime import datetime
from tempfile import mkstemp
load_dotenv()
euid = os.geteuid()
if euid == 0:
user = os.getenv("SUDO_USER")
homedir = os.path.expanduser(f'~{user}')
else:
homedir = os.getenv('HOME')
logging.getLogger().setLevel(logging.DEBUG)
logger = logging.getLogger(os.path.basename(__file__))
c_handler = StreamHandler()
try:
f_handler = RotatingFileHandler(f'{homedir}/.simple_backup/simple_backup.log', maxBytes=1024000, backupCount=5)
except Exception:
f_handler = None
c_handler.setLevel(logging.INFO)
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)
if f_handler:
f_handler.setLevel(logging.INFO)
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(f_format)
logger.addHandler(f_handler)
def timing(_logger):
def decorater_timing(func):
@wraps(func)
def wrapper_timing(*args, **kwargs):
start = default_timer()
value = func(*args, **kwargs)
end = default_timer()
_logger.info(f'Elapsed time: {end - start:.3f} seconds')
return value
return wrapper_timing
return decorater_timing
class MyFormatter(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
pass
@ -47,7 +99,7 @@ class Backup:
self.inputs.append(i_new)
except Exception:
logger.warning(f'Input {i} is a link and cannot be read. Skipping')
self.inpts.remove(i)
self.inputs.remove(i)
if not os.path.isdir(self.output):
logger.critical('Output path for backup does not exist')
@ -97,6 +149,7 @@ class Backup:
logger.error('Previous backup could not be read')
# Function to read configuration file
@timing(logger)
def run(self):
logger.info('Starting backup...')
@ -159,35 +212,9 @@ class Backup:
if self._err_flag:
logger.warning('Some errors occurred (check log for details)')
return 1
load_dotenv()
euid = os.geteuid()
if euid == 0:
user = os.getenv("SUDO_USER")
homedir = os.path.expanduser(f'~{user}')
else:
homedir = os.getenv('HOME')
logging.getLogger().setLevel(logging.DEBUG)
logger = logging.getLogger(os.path.basename(__file__))
c_handler = StreamHandler()
try:
f_handler = RotatingFileHandler(f'{homedir}/.simple_backup/simple_backup.log', maxBytes=1024000, backupCount=5)
except Exception:
f_handler = None
c_handler.setLevel(logging.INFO)
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)
if f_handler:
f_handler.setLevel(logging.INFO)
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(f_format)
logger.addHandler(f_handler)
return 0
def _parse_arguments():
@ -253,7 +280,15 @@ def simple_backup():
backup = Backup(inputs, output, exclude, keep, backup_options)
if backup.check_params():
backup.run()
obj = dbus.SessionBus().get_object("org.freedesktop.Notifications", "/org/freedesktop/Notifications")
obj = dbus.Interface(obj, "org.freedesktop.Notifications")
obj.Notify("simple_backup", 0, "", "Starting backup...", "", [], {"urgency": 1}, 10000)
status = backup.run()
if status == 0:
obj.Notify("simple_backup", 0, "", "Backup finished.", "", [], {"urgency": 1}, 10000)
else:
obj.Notify("simple_backup", 0, "", "Backup finished. Some errors occurred.", "", [], {"urgency": 1}, 10000)
if __name__ == '__main__':