WMGZON/controllers/database/database.py

62 lines
1.5 KiB
Python
Raw Normal View History

from abc import ABC, abstractmethod
2024-01-21 22:06:06 +00:00
from typing import Mapping, Any
import sqlite3
2024-01-09 20:53:55 +00:00
import os
2024-01-21 22:06:06 +00:00
class DatabaseController(ABC):
2024-01-09 20:53:55 +00:00
__data_dir = "./data/"
__db_name = "wmgzon.db"
# Use test file if necessary
if os.environ.get("ENVIRON") == "test":
__db_name = "test_" + __db_name
__sqlitefile = __data_dir + __db_name
def __init__(self):
self._conn = None
try:
2024-01-21 22:22:29 +00:00
# Creates a connection and specifies a flag to parse all types
# back down into Python declared types e.g. date & time
2024-01-21 22:06:06 +00:00
self._conn = sqlite3.connect(
self.__sqlitefile, detect_types=sqlite3.PARSE_DECLTYPES)
except sqlite3.Error as e:
# Close the connection if still open
if self._conn:
self._conn.close()
print(e)
def __del__(self):
2024-01-21 22:22:29 +00:00
if self._conn is not None:
self._conn.close()
2024-01-21 22:22:29 +00:00
""" Takes a dictionary of fields and returns the object
2024-01-02 22:26:03 +00:00
with those fields populated """
2024-01-21 22:06:06 +00:00
2024-01-02 22:22:14 +00:00
def new_instance(self, of: type, with_fields: Mapping[str, Any]):
obj = of.__new__(of)
for attr, value in with_fields.items():
setattr(obj, attr, value)
return obj
2024-01-21 22:06:06 +00:00
"""
Set of CRUD methods to allow for Data manipulation on the backend
"""
@abstractmethod
def create(self):
pass
@abstractmethod
def read(self):
pass
@abstractmethod
def update(self):
pass
2024-01-21 22:06:06 +00:00
@abstractmethod
def delete(self):
2024-01-21 22:06:06 +00:00
pass