Add the ORM.

dev
KKlochko 4 months ago
parent 2834ad8bee
commit 690cc7de9c

@ -0,0 +1,3 @@
from .database_manager_port import DatabaseManagerPort
__all__ = ['DatabaseManagerPort']

@ -0,0 +1,11 @@
from abc import ABC, abstractmethod
class DatabaseManagerPort(ABC):
@abstractmethod
def get_connection(self):
pass
@abstractmethod
def create_tables(self):
pass

@ -0,0 +1,4 @@
from .database_manager import DatabaseManager
from .in_memory_database_manager import InMemoryDatabaseManager
__all__ = ['DatabaseManager', 'InMemoryDatabaseManager']

@ -0,0 +1,27 @@
from typing import List
from peewee import Model, Database
from .models import BackupPlan, Destination
from tui_rsync.core.ports.orm import DatabaseManagerPort
class DatabaseManager(DatabaseManagerPort):
models: List[Model] = [
BackupPlan,
Destination,
]
def __init__(self, db: Database):
self.db = db
self._update_model_meta()
self.create_tables()
def _update_model_meta(self):
for model in self.models:
model._meta.database = self.db
def get_connection(self):
return self.db
def create_tables(self):
with self.db:
self.db.create_tables(self.models, safe=True)

@ -0,0 +1,7 @@
from peewee import SqliteDatabase
from .database_manager import DatabaseManager
class InMemoryDatabaseManager(DatabaseManager):
def __init__(self):
super().__init__(SqliteDatabase(':memory:'))

@ -0,0 +1,16 @@
from peewee import *
import uuid
class BackupPlan(Model):
id = UUIDField(primary_key=True, default=uuid.uuid4)
label = CharField()
source = CharField()
class Meta:
database = DatabaseProxy()
class Destination(Model):
source = ForeignKeyField(BackupPlan, backref='destinations')
path = CharField()

@ -0,0 +1,7 @@
from peewee import SqliteDatabase
from .database_manager import DatabaseManager
class SqliteDatabaseManager(DatabaseManager):
def __init__(self, filepath='sync.db'):
super().__init__(SqliteDatabase(filepath))
Loading…
Cancel
Save