From f3915d93a9f8afbd5a5f9e29cc3e1c81e38b19cd Mon Sep 17 00:00:00 2001 From: KKlochko Date: Fri, 10 Jan 2025 21:58:35 +0200 Subject: [PATCH] Add the configuration to get user data. --- .../core/ports/configuration/__init__.py | 3 + .../configuration/user_data_paths_port.py | 15 +++++ .../infrastructure/configuration/__init__.py | 3 + .../configuration/user_data_paths.py | 56 +++++++++++++++++++ .../orm/sqlite_database_manager.py | 4 +- tui_rsync/main.py | 2 + .../components/backup_plan/add_backup_plan.py | 3 +- .../backup_plan/remove_backup_plan.py | 5 +- .../backup_plan/show_backup_plan.py | 5 +- 9 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 tui_rsync/core/ports/configuration/__init__.py create mode 100644 tui_rsync/core/ports/configuration/user_data_paths_port.py create mode 100644 tui_rsync/infrastructure/configuration/__init__.py create mode 100644 tui_rsync/infrastructure/configuration/user_data_paths.py diff --git a/tui_rsync/core/ports/configuration/__init__.py b/tui_rsync/core/ports/configuration/__init__.py new file mode 100644 index 0000000..f4722a1 --- /dev/null +++ b/tui_rsync/core/ports/configuration/__init__.py @@ -0,0 +1,3 @@ +from .user_data_paths_port import UserDataPathsPort + +__all__ = ['UserDataPathsPort'] diff --git a/tui_rsync/core/ports/configuration/user_data_paths_port.py b/tui_rsync/core/ports/configuration/user_data_paths_port.py new file mode 100644 index 0000000..22598a9 --- /dev/null +++ b/tui_rsync/core/ports/configuration/user_data_paths_port.py @@ -0,0 +1,15 @@ +from abc import ABC, abstractmethod + + +class UserDataPathsPort(ABC): + @abstractmethod + def safe_create_user_data_dir(self): + pass + + @abstractmethod + def get_user_db_path(self): + pass + + @abstractmethod + def get_user_data_dir(self): + pass diff --git a/tui_rsync/infrastructure/configuration/__init__.py b/tui_rsync/infrastructure/configuration/__init__.py new file mode 100644 index 0000000..50a2fbd --- /dev/null +++ b/tui_rsync/infrastructure/configuration/__init__.py @@ -0,0 +1,3 @@ +from .user_data_paths import UserDataPaths + +__all__ = ['UserDataPaths'] diff --git a/tui_rsync/infrastructure/configuration/user_data_paths.py b/tui_rsync/infrastructure/configuration/user_data_paths.py new file mode 100644 index 0000000..9e7926c --- /dev/null +++ b/tui_rsync/infrastructure/configuration/user_data_paths.py @@ -0,0 +1,56 @@ +################################################################################ +# Copyright (C) 2023-2025 Kostiantyn Klochko # +# # +# This file is part of tui-rsync. # +# # +# tui-rsync is free software: you can redistribute it and/or modify it under # +# uthe terms of the GNU General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# tui-rsync is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # +# details. # +# # +# You should have received a copy of the GNU General Public License along with # +# tui-rsync. If not, see . # +################################################################################ + +import platformdirs +import os + +from tui_rsync.core.ports.configuration import UserDataPathsPort + + +class UserDataPaths(UserDataPathsPort): + """ + Configuration of the tui-rsync + """ + __APP_NAME = "tui-rsync" + __APP_AUTHOR = "KKlochko" + __DB_NAME = "sync.db" + + def safe_create_user_data_dir(self): + self.safe_create_path(self.get_user_data_dir()) + + def get_user_db_path(self): + return platformdirs.user_data_path( + self.__APP_NAME, + self.__APP_AUTHOR, + self.__DB_NAME + ) + + def get_user_data_dir(self): + return platformdirs.user_data_dir( + self.__APP_NAME, + self.__APP_AUTHOR, + ) + + @staticmethod + def safe_create_path(path): + """ + Create path's folders if they do not exist + """ + if not os.path.exists(path): + os.makedirs(path) diff --git a/tui_rsync/infrastructure/orm/sqlite_database_manager.py b/tui_rsync/infrastructure/orm/sqlite_database_manager.py index 0881000..e31120f 100644 --- a/tui_rsync/infrastructure/orm/sqlite_database_manager.py +++ b/tui_rsync/infrastructure/orm/sqlite_database_manager.py @@ -1,7 +1,9 @@ from peewee import SqliteDatabase from .database_manager import DatabaseManager +from ...core.ports.configuration import UserDataPathsPort class SqliteDatabaseManager(DatabaseManager): - def __init__(self, filepath='sync.db'): + def __init__(self, user_data_paths: UserDataPathsPort): + filepath = user_data_paths.get_user_db_path() super().__init__(SqliteDatabase(filepath)) diff --git a/tui_rsync/main.py b/tui_rsync/main.py index c5e54c7..4ea8112 100644 --- a/tui_rsync/main.py +++ b/tui_rsync/main.py @@ -1,7 +1,9 @@ +from tui_rsync.infrastructure.configuration import UserDataPaths from tui_rsync.user_interface.cli.cli import cli_app def main(): + UserDataPaths().safe_create_user_data_dir() cli_app() if __name__ == "__main__": diff --git a/tui_rsync/user_interface/cli/components/backup_plan/add_backup_plan.py b/tui_rsync/user_interface/cli/components/backup_plan/add_backup_plan.py index 261919d..d4c466d 100644 --- a/tui_rsync/user_interface/cli/components/backup_plan/add_backup_plan.py +++ b/tui_rsync/user_interface/cli/components/backup_plan/add_backup_plan.py @@ -25,6 +25,7 @@ from tui_rsync.core.components.backup_plan.application.repository.backup_plan_re from tui_rsync.core.components.backup_plan.application.services.backup_plan_service import BackupPlanService from tui_rsync.core.components.backup_plan.domain import BackupPlan, Source, Destination from tui_rsync.core.shared_kernel.components.common import Label +from tui_rsync.infrastructure.configuration import UserDataPaths from tui_rsync.infrastructure.orm import SqliteDatabaseManager @@ -57,7 +58,7 @@ def add( if source is None: source = console.input("What is the [yellow b]path to the source[/]? ") - db = SqliteDatabaseManager() + db = SqliteDatabaseManager(UserDataPaths()) repository = BackupPlanRepository(db) service = BackupPlanService(repository) diff --git a/tui_rsync/user_interface/cli/components/backup_plan/remove_backup_plan.py b/tui_rsync/user_interface/cli/components/backup_plan/remove_backup_plan.py index 4ac9bd3..2e900ef 100644 --- a/tui_rsync/user_interface/cli/components/backup_plan/remove_backup_plan.py +++ b/tui_rsync/user_interface/cli/components/backup_plan/remove_backup_plan.py @@ -24,6 +24,7 @@ from tui_rsync.core.components.backup_plan.application.commands import RemoveAll from tui_rsync.core.components.backup_plan.application.repository.backup_plan_repository import BackupPlanRepository from tui_rsync.core.components.backup_plan.application.services.backup_plan_service import BackupPlanService from tui_rsync.core.shared_kernel.components.common import UUID +from tui_rsync.infrastructure.configuration import UserDataPaths from tui_rsync.infrastructure.orm import SqliteDatabaseManager console = Console() @@ -42,7 +43,7 @@ def one( [red b]Remove[/] an [yellow]existing backup plan[/]. """ - db = SqliteDatabaseManager() + db = SqliteDatabaseManager(UserDataPaths()) repository = BackupPlanRepository(db) service = BackupPlanService(repository) @@ -65,7 +66,7 @@ def all(): [red b]Remove[/] [yellow] all existing backup plans[/]. """ - db = SqliteDatabaseManager() + db = SqliteDatabaseManager(UserDataPaths()) removed = RemoveAllBackupBackupPlansCommand().execute() if removed: diff --git a/tui_rsync/user_interface/cli/components/backup_plan/show_backup_plan.py b/tui_rsync/user_interface/cli/components/backup_plan/show_backup_plan.py index 8529da2..3eb9e40 100644 --- a/tui_rsync/user_interface/cli/components/backup_plan/show_backup_plan.py +++ b/tui_rsync/user_interface/cli/components/backup_plan/show_backup_plan.py @@ -25,6 +25,7 @@ from tui_rsync.core.components.backup_plan.application.Queries import GetAllBack from tui_rsync.core.components.backup_plan.application.repository.backup_plan_repository import BackupPlanRepository from tui_rsync.core.components.backup_plan.application.services.backup_plan_service import BackupPlanService from tui_rsync.core.shared_kernel.components.common import UUID +from tui_rsync.infrastructure.configuration import UserDataPaths from tui_rsync.infrastructure.orm import SqliteDatabaseManager from tui_rsync.user_interface.cli.components.backup_plan.formating import BackupPlanFormat @@ -44,7 +45,7 @@ def one( [green b]Show[/] an [yellow]existing backup plan by the id[/]. """ - db = SqliteDatabaseManager() + db = SqliteDatabaseManager(UserDataPaths()) repository = BackupPlanRepository(db) service = BackupPlanService(repository) @@ -67,7 +68,7 @@ def all(): [green b]Show[/] [yellow]all existing backup plans[/]. """ - db = SqliteDatabaseManager() + db = SqliteDatabaseManager(UserDataPaths()) query = GetAllBackupBackupPlansQuery() for backup_plan in query.execute():