/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.2.0
src/liquidcode/commands/make/api.py
123 строки
4 KB
User
ci: настроен Black и flake8 для автоматического форматирования кода
04 июл 2026, 08:14
04 июл 2026, 08:14
4778ed6
Код
Авторство
О чём код?
""" Генератор API-контроллера для LiquidCode. Команда: lcc make:api <name> [--directory DIR] [--force] [--no-interactive] [--version VERSION] Интерактивный режим позволяет выбрать методы и добавить поля для сериализатора. """ import argparse from ..base import ( generate_from_template, TemplateError, normalize_class_name, normalize_route, ask_fields, ask_methods, normalize_field_type, ) def configure_parser(subparser: argparse.ArgumentParser) -> None: """ Добавляет аргументы для команды make:api. Args: subparser: Объект ArgumentParser для команды. """ subparser.add_argument( "name", nargs="?", help="Имя API-контроллера (например, Product)" ) subparser.add_argument( "--directory", default="src/Controller", help="Целевая директория (по умолчанию: src/Controller)", ) subparser.add_argument( "--force", action="store_true", help="Перезаписать файл, если он существует", ) subparser.add_argument( "--no-interactive", action="store_true", help="Отключить интерактивный режим (использовать значения по умолчанию)", ) subparser.add_argument( "--version", default="v1", help="Версия API (по умолчанию: v1)" ) def run(args: argparse.Namespace) -> None: """ Выполняет команду make:api. Args: args: Объект аргументов командной строки. """ try: # 1. Имя name = args.name if not name: name = input("Введите имя API-контроллера (например, Product): ").strip() if not name: print("❌ Имя не может быть пустым") return normalized_name = normalize_class_name(name, suffix="APIController") # 2. Версия version = args.version.lstrip("v") # убираем v, если есть # 3. Маршрут route = normalized_name.lower() normalized_route = normalize_route(route) # 4. Поля для сериализатора (интерактивно, если не отключено) fields = [] if not args.no_interactive: print(f"\nСоздание API-контроллера {normalized_name}APIController") print( "Добавляйте поля для сериализатора (Pydantic). Оставьте имя пустым для завершения." ) fields = ask_fields() else: fields = [] # Нормализуем типы полей for field in fields: field["type"] = normalize_field_type(field["type"], field["nullable"]) # 5. Выбор методов (интерактивно, если не отключено) if not args.no_interactive: selected_methods = ask_methods() else: selected_methods = ["index", "show", "create", "update", "delete"] # 6. Генерация extra = { "name": normalized_name, "route": normalized_route, "version": version, "fields": fields, "use_serializer": bool(fields), "methods": selected_methods, } created = generate_from_template( template_name="api", args=args, extra_kwargs=extra, default_filename="{name}APIController.py", default_dir="src/Controller", ) if created: print( f"✅ Создан API-контроллер: {normalized_name}APIController (v{version})" ) if fields: print(f" Поля сериализатора: {', '.join(f['name'] for f in fields)}") if selected_methods: print(f" Методы: {', '.join(selected_methods)}") else: print("⚠️ Файл уже существует. Используйте --force для перезаписи.") except (TypeError, ValueError, TemplateError, IOError) as e: print(f"❌ Ошибка: {e}")