From 6f66a98f31132c67d5daebde83894b408f26c102 Mon Sep 17 00:00:00 2001 From: 24_ChernovaSS <24_ChernovaSS@iux.local> Date: Wed, 1 Apr 2026 12:55:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=81=D0=BE=D1=87=D0=BD=D0=B8=D1=86=D1=8B=20(--?= =?UTF-8?q?sandbox)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mypkg/cli/main.py | 14 ++++++++++++-- mypkg/core/package_manager.py | 23 ++++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/mypkg/cli/main.py b/mypkg/cli/main.py index 562b9fd..15796b5 100644 --- a/mypkg/cli/main.py +++ b/mypkg/cli/main.py @@ -12,9 +12,16 @@ def main(): Примеры: mypkg install nano Установить пакет nano mypkg list Показать установленные пакеты + mypkg --sandbox /tmp/test install nano Установить в песочницу """ ) + # Глобальный аргумент --sandbox (может быть указан в любом месте) + parser.add_argument('--sandbox', type=str, default=None, + help='Режим песочницы: установка в изолированную директорию') + parser.add_argument('--repo', default='repo', + help='Путь к репозиторию') + subparsers = parser.add_subparsers(dest='command', help='Команды') # команда install @@ -30,8 +37,11 @@ def main(): parser.print_help() sys.exit(1) - # Создаем менеджер пакетов - pm = PackageManager() + # Создаем менеджер пакетов с учетом песочницы + pm = PackageManager( + repo_path=args.repo, + sandbox=args.sandbox + ) if args.command == 'install': pm.install(args.package) diff --git a/mypkg/core/package_manager.py b/mypkg/core/package_manager.py index 93a3f32..a1bb632 100644 --- a/mypkg/core/package_manager.py +++ b/mypkg/core/package_manager.py @@ -8,17 +8,26 @@ from ..database.db_manager import DatabaseManager class PackageManager: - """Главный класс менеджера пакетов (прототип)""" + """Главный класс менеджера пакетов""" - def __init__(self, repo_path: str = "repo", root: str = "/"): + def __init__(self, repo_path: str = "repo", sandbox: str = None): """ Args: repo_path: путь к репозиторию (папка с пакетами) - root: корень файловой системы (для песочницы) + sandbox: путь к песочнице (если указан, все установки идут туда) """ self.repo_path = repo_path - self.root = root - self.db = DatabaseManager(root) + + # Если указана песочница, используем её как корень + if sandbox: + self.root = sandbox + self.sandbox_mode = True + print(f"🏖️ РЕЖИМ ПЕСОЧНИЦЫ: {sandbox}") + else: + self.root = "/" + self.sandbox_mode = False + + self.db = DatabaseManager(self.root) def install(self, package_name: str) -> bool: """Устанавливает пакет""" @@ -64,6 +73,10 @@ class PackageManager: self.db.add_package(pkg) print(f"✅ Пакет {package_name} успешно установлен") + + if self.sandbox_mode: + print(f"📁 Файлы установлены в: {self.root}") + return True def list_installed(self) -> List[Package]: