/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
src/liquidcode/commands/make/subscriber.py
76 строк
3 KB
User
0.4.12 - Event Dispatcher / Subscriber и улучшения на русском языке
06 июл 2026, 15:23
06 июл 2026, 15:23
65223a0
Код
Авторство
О чём код?
"""Генератор subscriber для LiquidCode. Команда: lcc make:subscriber <name> [--directory DIR] [--force] [--no-interactive] Интерактивный режим позволяет ввести имя, если оно не передано. """ import argparse from ..base import generate_from_template, TemplateError, normalize_class_name def configure_parser(subparser: argparse.ArgumentParser) -> None: """ Добавляет аргументы для команды make:subscriber. Args: subparser: Объект ArgumentParser для команды. """ subparser.add_argument("name", nargs="?", help="Имя subscriber (например, Logging)") subparser.add_argument( "--directory", default="src/Subscriber", help="Целевая директория (по умолчанию: src/Subscriber)", ) subparser.add_argument( "--force", action="store_true", help="Перезаписать файл, если он существует", ) subparser.add_argument( "--no-interactive", action="store_true", help="Отключить интерактивный режим (имя должно быть передано через аргумент)", ) def run(args: argparse.Namespace) -> None: """ Выполняет команду make:subscriber. Args: args: Объект аргументов командной строки. """ try: # 1. Если имя не передано и не отключен интерактив — запрашиваем name = args.name if not name and not args.no_interactive: name = input("Введите имя subscriber (например, Logging): ").strip() if not name: print("[ERROR] Имя не может быть пустым") return # 2. Нормализуем имя (убираем дублирующий суффикс Subscriber) normalized_name = normalize_class_name(name, suffix="Subscriber") # 3. Генерируем файл created = generate_from_template( template_name="subscriber", args=args, extra_kwargs={}, default_filename="{name}Subscriber.py", default_dir="src/Subscriber", ) if created: print(f"[OK] Создан subscriber: {normalized_name}Subscriber") print() print("Пример регистрации в app.py:") print(f" from .subscriber import {normalized_name}Subscriber") print(f" app.add_listener('request', {normalized_name}Subscriber.on_request)") print(f" app.add_listener('response', {normalized_name}Subscriber.on_response)") print(f" app.add_listener('exception', {normalized_name}Subscriber.on_exception)") print(f" app.add_listener('terminate', {normalized_name}Subscriber.on_terminate)") else: print("[WARN] Файл уже существует. Используйте --force для перезаписи.") except (TypeError, ValueError, TemplateError, IOError) as e: print(f"[ERROR] Ошибка: {e}")