добавила DatabaseManager для хранения установленных пакетов

This commit is contained in:
2026-03-31 23:49:12 +03:00
parent 17f2a79ebd
commit fe1dea1eb3

View File

@@ -0,0 +1,72 @@
# mypkg/database/db_manager.py
import json
import os
from typing import Dict, Optional
from datetime import datetime
from ..models.package import Package
class DatabaseManager:
"""Управляет базой данных установленных пакетов"""
DB_PATH = "/var/lib/mypkg/installed.json"
def __init__(self, root: str = "/"):
"""
Args:
root: корень файловой системы (для песочницы)
"""
self.root = root
self.db_path = os.path.join(root, self.DB_PATH.lstrip('/'))
self.installed: Dict[str, Package] = {}
self._load()
def _load(self):
"""Загружает базу из файла"""
if not os.path.exists(self.db_path):
return
try:
with open(self.db_path, 'r') as f:
data = json.load(f)
for name, pkg_data in data.items():
pkg = Package(**pkg_data)
pkg.installed = True
if pkg_data.get('install_date'):
pkg.install_date = datetime.fromisoformat(pkg_data['install_date'])
self.installed[name] = pkg
except Exception as e:
print(f"Ошибка загрузки базы: {e}")
def save(self):
"""Сохраняет базу в файл"""
os.makedirs(os.path.dirname(self.db_path), exist_ok=True)
data = {}
for name, pkg in self.installed.items():
data[name] = pkg.to_dict()
with open(self.db_path, 'w') as f:
json.dump(data, f, indent=2)
def add_package(self, package: Package):
"""Добавляет пакет в базу"""
package.installed = True
package.install_date = datetime.now()
self.installed[package.name] = package
self.save()
def remove_package(self, name: str):
"""Удаляет пакет из базы"""
if name in self.installed:
del self.installed[name]
self.save()
def is_installed(self, name: str) -> bool:
"""Проверяет, установлен ли пакет"""
return name in self.installed
def get_package(self, name: str) -> Optional[Package]:
"""Возвращает установленный пакет"""
return self.installed.get(name)