################################################################################ # Copyright (C) 2023 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 . # ################################################################################ from peewee import * db = SqliteDatabase('sync.db') class BaseModel(Model): class Meta: database = db class Path(BaseModel): path = CharField(unique=True) def __str__(self) -> str: return f"{self.path}" def __repr__(self) -> str: return f"Path({self.path})" class SyncCommand(BaseModel): command = CharField() def __str__(self) -> str: return self.command class Source(BaseModel): label = CharField(unique=True) source = ForeignKeyField(Path) args = ForeignKeyField(SyncCommand) @staticmethod def create_save(label:str, source:str, destinations:list[str], args:str): src_path, _ = Path.get_or_create(path=source) src_sync_cmd, _ = SyncCommand.get_or_create(command=args) src = Source.create( label=label, source=src_path, destinations=[], args=src_sync_cmd ) for destination in destinations: des_path, _ = Path.get_or_create(path=destination) src_des, _ = Destination.get_or_create(source=src, path=des_path) src.save() return src def __str__(self) -> str: return f"{self.label}" def __repr__(self) -> str: return f"{self.label}" class Destination(BaseModel): source = ForeignKeyField(Source, backref='destinations') path = ForeignKeyField(Path) def __str__(self) -> str: return f"{self.path}" def create_tables(): with db: db.create_tables([Source, Path, Destination, SyncCommand], safe=True) def all_labels(): with db: return Source.select(Source.label)