From fe1dea1eb35d938fbf7ab72bb4662346ae427505 Mon Sep 17 00:00:00 2001 From: 24_ChernovaSS <24_ChernovaSS@iux.local> Date: Tue, 31 Mar 2026 23:49:12 +0300 Subject: [PATCH] =?UTF-8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20DatabaseManager=20=D0=B4=D0=BB=D1=8F=20=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=83=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BA=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mypkg/database/db_manager.py | 72 ++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 mypkg/database/db_manager.py diff --git a/mypkg/database/db_manager.py b/mypkg/database/db_manager.py new file mode 100644 index 0000000..ce256f2 --- /dev/null +++ b/mypkg/database/db_manager.py @@ -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) \ No newline at end of file