From a5c664b9ae197d1136caaba50cebead2ad92da0e Mon Sep 17 00:00:00 2001 From: Alexander Malzkuhn Date: Thu, 5 Jun 2025 13:05:01 +0200 Subject: [PATCH] =?UTF-8?q?Pfadharmonisierungen=20f=C3=BCr=20Docker=20und?= =?UTF-8?q?=20Native?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 4 ++-- lib/admin.py | 29 ++++++++++++++--------------- lib/api.py | 2 +- lib/definitions.py | 3 ++- lib/users.py | 6 +++--- main.py | 4 ---- 6 files changed, 22 insertions(+), 26 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 36814c2..2237bb1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,8 +7,8 @@ services: environment: - PYTHONUNBUFFERED=1 volumes: - - /home/alexander/Dokumente/Python/Zeiterfassung/lib:/app/lib - - /home/alexander/Dokumente/Python/Zeiterfassung/main.py:/app/main.py + #- /home/alexander/Dokumente/Python/Zeiterfassung/lib:/app/lib + #- /home/alexander/Dokumente/Python/Zeiterfassung/main.py:/app/main.py - /home/alexander/Dokumente/Python/Zeiterfassung/docker-work/users:/users - /home/alexander/Dokumente/Python/Zeiterfassung/docker-work/backup:/backup - /home/alexander/Dokumente/Python/Zeiterfassung/docker-work/settings:/settings \ No newline at end of file diff --git a/lib/admin.py b/lib/admin.py index 0e632ab..bd27e74 100644 --- a/lib/admin.py +++ b/lib/admin.py @@ -1189,7 +1189,7 @@ def page_admin(): ui.notify("Benutzer gelöscht") with ui.dialog() as dialog, ui.card(): - ui.label(f"Soll der Benutzer *{current_user.username}* gelöscht werden?") + ui.markdown(f"Soll der Benutzer *{current_user.username}* gelöscht werden?") ui.label("Dies kann nicht rückgängig gemacht werden?").classes('text-bold') with ui.row(): ui.button("Löschen", on_click=del_definitely) @@ -1446,7 +1446,10 @@ def page_admin(): with ui.tab_panel(backups): try: - backupfolder = load_adminsettings()["backup_folder"] + if is_docker(): + backupfolder = "/backup" + else: + backupfolder = load_adminsettings()["backup_folder"] except KeyError: pass try: @@ -1564,7 +1567,7 @@ def page_admin(): if is_docker(): folder_to_delete = "/users" else: - folder_to_delete = os.path.join(scriptpath, userfolder) + folder_to_delete = userfolder for file_path in os.listdir(folder_to_delete): delete_item = os.path.join(folder_to_delete, file_path) if os.path.isfile(delete_item) or os.path.islink(delete_item): @@ -1572,17 +1575,13 @@ def page_admin(): elif os.path.isdir(delete_item): shutil.rmtree(delete_item) - with zipfile.ZipFile(os.path.join(scriptpath, backupfolder, f'{file}.zip'), 'r') as source: - if not is_docker(): - source.extractall(scriptpath) - os.unlink(os.path.join(scriptpath, "app_version.txt")) - else: - filelist = source.namelist() - print(filelist) - for file_list_item in filelist: - if file_list_item.startswith("users"): - source.extract(file_list_item, "/") - source.extract("settings.json", "/settings/") + with zipfile.ZipFile(os.path.join(backupfolder, f'{file}.zip'), 'r') as source: + user_target = userfolder.strip("users") + filelist = source.namelist() + for file_list_item in filelist: + if file_list_item.startswith("users"): + source.extract(file_list_item, user_target) + source.extract("settings.json", scriptpath) with ui.dialog() as confirm_dialog, ui.card(): ui.label("Das Backup wurde wiederhergestellt. Um Änderungen anzuzeigen, muss die Seite neu geladen werden.") with ui.grid(columns=2): @@ -1613,7 +1612,7 @@ def page_admin(): n = ui.notification("Backup wird erzeugt...") compress = zipfile.ZIP_DEFLATED filename = os.path.join(searchpath, datetime.datetime.now().strftime(date_format) + '.zip') - folder = userfolder + folder = userfolder.replace(f'{scriptpath}/', '') with zipfile.ZipFile(filename, 'w', compress) as target: for root, dirs, files in os.walk(folder): for file in files: diff --git a/lib/api.py b/lib/api.py index f1c7457..66421cc 100644 --- a/lib/api.py +++ b/lib/api.py @@ -543,7 +543,7 @@ def backup_api(api_key: str): def make_backup(): compress = zipfile.ZIP_DEFLATED filename = os.path.join(searchpath, datetime.now().strftime(date_format) + '.zip') - folder = userfolder + folder = userfolder.replace(f"{scriptpath}/") with zipfile.ZipFile(filename, 'w', compress) as target: for root, dirs, files in os.walk(folder): for file in files: diff --git a/lib/definitions.py b/lib/definitions.py index 1b9de6d..80a24c0 100644 --- a/lib/definitions.py +++ b/lib/definitions.py @@ -17,10 +17,11 @@ def is_docker(): if is_docker(): scriptpath = "/settings" backupfolder = "/backup" + userfolder = "/users" else: scriptpath = str(Path(os.path.dirname(os.path.abspath(__file__))).parent.absolute()) backupfolder = str(os.path.join(scriptpath, "backup")) -userfolder = "users" + userfolder = os.path.join(scriptpath, "users") # Dateinamen diff --git a/lib/users.py b/lib/users.py index 410a509..eb5c00a 100644 --- a/lib/users.py +++ b/lib/users.py @@ -21,7 +21,7 @@ from lib.definitions import userfolder, scriptpath, usersettingsfilename, photof class user: def __init__(self, name): if not is_docker(): - self.userfolder = os.path.join(scriptpath, userfolder, name) + self.userfolder = os.path.join(userfolder, name) else: self.userfolder = os.path.join("/users", name) self.settingsfile = os.path.join(self.userfolder, usersettingsfilename) @@ -134,9 +134,9 @@ class user: pathcheck = self.userfolder if not is_docker(): - pathcheck = pathcheck.removeprefix(os.path.join(scriptpath, userfolder)) + pathcheck = pathcheck.removeprefix(os.path.join(userfolder)) if pathcheck != self.username: - os.rename(self.userfolder, os.path.join(scriptpath, userfolder, self.username)) + os.rename(self.userfolder, os.path.join(userfolder, self.username)) else: pathcheck = pathcheck.removeprefix("/users") if pathcheck != self.username: diff --git a/main.py b/main.py index be43a16..6566a6c 100644 --- a/main.py +++ b/main.py @@ -54,10 +54,6 @@ def main(): ui.toggle.default_props('rounded') ui.row.default_classes('items-baseline') - #if not os.path.exists(os.path.join(scriptpath, "favicon.svg")): - # with open(os.path.join(scriptpath, "favicon.svg"), 'w') as favicon_file: - # favicon_file.write(favicon) - ui.run(favicon='⏲', port=port, storage_secret=secret, language='de-DE', show_welcome_message=False) if __name__ in ("__main__", "__mp_main__"):