Data management and updating
Tracker for updating and getting data Datamanager to serialize/deserialize Main for initialization Config for config
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
from core.user import User
|
||||
from core.item import Item
|
||||
from core.transaction import Transaction
|
||||
|
||||
|
||||
class DataManager:
|
||||
def __init__(self, data_dir) -> None:
|
||||
self.data_dir = Path(data_dir)
|
||||
self.data_dir.mkdir(exist_ok=True)
|
||||
|
||||
self.users_file = self.data_dir / "users.json"
|
||||
self.items_file = self.data_dir / "items.json"
|
||||
self.debts_file = self.data_dir / "debts.json"
|
||||
self.transactions_file = self.data_dir / "transactions.json"
|
||||
|
||||
self._init_files()
|
||||
|
||||
def _init_files(self):
|
||||
if not self.users_file.exists():
|
||||
self._save_json(self.users_file, {})
|
||||
if not self.items_file.exists():
|
||||
self._save_json(self.items_file, {})
|
||||
if not self.debts_file.exists():
|
||||
self._save_json(self.debts_file, {})
|
||||
if not self.transactions_file.exists():
|
||||
self._save_json(self.transactions_file, [])
|
||||
|
||||
def load_users(self):
|
||||
data = self._load_json(self.users_file)
|
||||
return {
|
||||
user_id: User.from_json(user_data) for user_id, user_data in data.items()
|
||||
}
|
||||
|
||||
def load_items(self):
|
||||
data = self._load_json(self.items_file)
|
||||
return {
|
||||
item_id: Item.from_json(item_data) for item_id, item_data in data.items()
|
||||
}
|
||||
|
||||
def load_debts(self):
|
||||
return self._load_json(self.debts_file)
|
||||
|
||||
def load_transactions(self):
|
||||
data = self._load_json(self.transactions_file)
|
||||
return [Transaction.from_json(t) for t in data]
|
||||
|
||||
def save_users(self, users):
|
||||
data = {user_id: user.to_json() for user_id, user in users.items()}
|
||||
self._save_json(self.users_file, data)
|
||||
|
||||
def save_items(self, items):
|
||||
data = {item_id: item.to_json() for item_id, item in items.items()}
|
||||
self._save_json(self.items_file, data)
|
||||
|
||||
def save_debts(self, debts):
|
||||
self._save_json(self.debts_file, debts)
|
||||
|
||||
def save_transactions(self, transactions):
|
||||
data = [t.to_json() for t in transactions]
|
||||
self._save_json(self.transactions_file, data)
|
||||
|
||||
def _load_json(self, filepath):
|
||||
try:
|
||||
with open(filepath, "r") as f:
|
||||
return json.load(f)
|
||||
|
||||
except (FileNotFoundError, json.JSONDecodeError):
|
||||
return (
|
||||
{}
|
||||
if filepath.name.endswith(".json")
|
||||
and "transaction" not in filepath.name
|
||||
else []
|
||||
)
|
||||
|
||||
def _save_json(self, filepath, data):
|
||||
with open(filepath, "w") as f:
|
||||
json.dump(data, f, indent=2)
|
||||
Reference in New Issue
Block a user