Основная цель проекта — создание инструмента для преобразования спецификации OpenAPI в Python-пакет. 📋
Этот пакет предоставляет структурированный и удобный интерфейс для взаимодействия с открытым API мессенджера "Пачка". 🌐
- Конвертацию файлов OpenAPI: Автоматизация генерации Python-кода, содержащего методы и классы для работы с API.
- Подготовку Python-пакета: Упаковка сгенерированного кода для распространения через менеджеры пакетов, такие как pip и poetry.
- Обработка HTTP-запросов: Сгенерированный код выполняет авторизованные запросы к серверу с использованием токенов.
- Структуры данных: Входные и выходные данные представлены в виде Python-классов.
- Методы для эндпоинтов: Методы названы в соответствии с эндпоинтами API, что обеспечивает ясность и соответствие.
- Полная документация: Сгенерированные классы и методы включают подробные docstring’и, созданные на основе OpenAPI.
- Формат: JSON или YAML.
- Версия OpenAPI: 3.0.
Обязательные секции:
openapi
: Версия файла OpenAPI.info
: Общая информация об API.servers
: Данные о серверах для выполнения запросов.paths
: Описание эндпоинтов с параметрамиoperationId
иtags
для генерации методов.components
: Схемы данных для структур входных и выходных параметров.
- Основной объект: Центральный класс (
Pachca
- для 1 генератора,Bot
- для 2 генератора), инициализируемый токеном авторизации. - Методы эндпоинтов: Генерируются на основе параметра
operationId
из OpenAPI. - Модели данных: Определены с использованием
pydantic
для входных и выходных схем. - Обработка ошибок: Пользовательские исключения для API-ошибок на основе описания OpenAPI.
- Python 3.12+.
- httpx (0.28.1): Для выполнения асинхронных HTTP-запросов.
- Jinja2 (3.1.4): Для генерации кода на основе шаблонов.
- ruamel.yaml (0.18.6): Для работы с YAML файлами.
- openapi-python-client (0.22.0): Для автоматической генерации клиентского кода на основе OpenAPI спецификаций.
src/generator1/
- Автоматически генерируемый файл (появляется после запуска генерации)
- Представлена моделями и методами для работы с API на основе OpenAPI спецификации
- Содержит "динамическую" часть (основной класс для работы с API) после запуска скрипта-генератора
- Передает запрос пользователя в "статическую" часть, преобразовав из формата Python в JSON
- Передает ответ пользователю от "статической" части, преобразовав из формата JSON в Python
- Директория хранения основных шаблонов для автоматической генерации
- "Статическая" часть
- Отвечает за отправку/приемку данных на/от сервер(а)
- Полученные данные передает в "динамическую" часть (генерируемую)
- Содержит логику обеспечении безопасности и управления доступом
- Создает "динамическую" часть в client.py
- Собирает главный и основной класс Pachca для работы с API
- Список зависимостей генератора с версиями
- Пример использования сгенерированного API клиента
- Тестовые вызовы различных методов API
- OpenAPI спецификации API
- Описание эндпоинтов, схем, параметров
- директория автоматически сгенерированного кода
- Создайте файл
.env
в директорииgenerator1
, с токеном для работы с API "Пачка".
Пример файла:TOKEN=ваштокен
- Создайте и активируйте виртуальное окружение, установите зависимости:
- Для Linux/gitBash:
python3 -m venv venv source venv/scripts/activate pip install -r requirements.txt
- Для Windows cmd:
python -m venv venv .\venv\scripts\activate pip install -r requirements.txt
- Для Linux/gitBash:
- Запустите генерацию клиента::
python generator.py generate
- Запустите пример запроса:
python generator.py test
- Python 3.12+
- httpx (0.28.1): Для выполнения асинхронных HTTP-запросов.
- pydantic (2.10.4): Для определения моделей данных ввода и вывода.
- ruamel.yaml (0.18.6): Для работы с YAML файлами.
- openapi3-parser (1.1.19): Для парсинга OpenAPI спецификации.
- ruff (0.7.1): Для автоматического исправления стилизации кода.
- black (24.10.0): Для автоматического исправления стилизации кода.
src/generator2/generator2_full
- models_response_ # Модели ответов API
- models_reqBod_ # Модели запросов API
- Основной класс для работы с API
- Метакласс RequestMethodsCollector для сбора методов
- Базовая функциональность для HTTP-запросов
- Форматирование URL и параметров запросов
- Константы клиента
- Константы логгера
- Пример использования сгенерированного API клиента
- Тестовые вызовы различных методов API
- Подготовка объекта логгера для логирования результатов работы
- Содержит асинхронные методы для работы с API
- Импортирует сгенерированные Pydantic модели
- Реализует логику HTTP-запросов
src/generator2/services
- Константы проекта
- Маппинги типов данных
- Пути к файлам
- HTTP методы
- Обеспечивает безопасную запись файлов
- Создает необходимые директории
- Управляет генерацией выходных файлов
- Загрузка YAML файла спецификации OpenAPI
- Создание глобального объекта YAML_DICT
- Подготовка объекта логгера для логирования результатов работы
src/generator2/
- Обрабатывает YAML спецификацию
- Генерирует модели запросов и ответов
- Функция get_all_endpoints для извлечения эндпоинтов из YAML документации
- Функция process_endpoints для обработки эндпоинтов и генерации моделей для requestBody и response
- Создает модели pydantic для конкретного эндпоинта
- create_model для генерации текста модели pydantic
- create_enum для создания класса Enum
- look_into_schema_new для рекурсивного прохода по модели спецификации и создания всех необходимых моделей
- check_error_field для подмены тайпхинта в модели ошибок API
- Обрабатывает ссылки на схемы в YAML спецификации
- Генерирует модели для ссылок на схемы
- unite_schemas для объединения схем
- load_schema для загрузки схемы по ссылке
- new_replace_ref_with_schema для замены ссылок на схемы
- Список зависимостей генератора с версиями
- Генерация методов для работы с API на основе OpenAPI спецификации
- Функции форматирования URL, параметров и обработки ответов
- OpenAPI спецификации API
- Описание эндпоинтов, схем, параметров
- Основной запуск генерации необходимых файлов для клиента
- Форматтинг и правка сгенерированного кода в автоматическом режиме
- Создайте файл
.env
в директорииgenerator2
, с токеном для работы с API "Пачка".
Пример файла .env.example:TOKEN=ваштокен
- Создайте и активируйте виртуальное окружение, установите зависимости:
- Для Linux/gitBash:
python3 -m venv venv source venv/scripts/activate pip install -r requirements.txt
- Для Windows cmd:
python -m venv venv .\venv\scripts\activate pip install -r requirements.txt
- Для Linux/gitBash:
- Запустите генерацию клиента:
python -m generator2.generator_starter
- Запустите пример запроса:
Или перейдите в
python -m generator2.generator2_full.pachca
generator2
и запустите модуль:cd generator2 python -m generator2_full.pachca
-
Для запуска MakeFile командой make из VSCode нужно установить через PowerShell или cmd:
- winget install GnuWin32.Make.
-
Создание зависимостей для работы сборки библиотеки:
pip install requirements_builder.txt
-
Создание зависимостей для библиотеки:
pipenv install requirements.txt
-
В папке проекта pachca_code_gen_team2 в файле .env указать:
- PACKAGE_VERSION=<Версия пакета>
- TWINE_USERNAME=<Имя пользвателя сервиса TestPyPI>
- TWINE_API_TOKEN=<Токен пользвателя сервиса TestPyPI>
-
Запуск создания и загрузки библиотеки на серис TestPyPI при помощи команды:
make upload
-
Установка бибилотеки с сериса TestPyPI:
- pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ pachca-generator1
- pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ pachca-generator2
src/builder/
- файл, содержащий список пакетов или библиотек, необходимых для работы упаковщика библиотеки.
- файл, содержащий список пакетов или библиотек, необходимых для работы над библиотек.
- файл, используемый виртуальной средой Pipenv для управления зависимостями библиотек.
- файл в формате JSON хранит контрольные суммы пакетов, которые устанавливаются в проект, что даёт гарантию, что развёрнутые на разных машинах окружения будут идентичны друг другу.
- файл с инструкциями для утилиты make, которая нужна для автоматической сборки проекта.
- файл с описанием, каким именно образом будет упакован код для медотов генерации
📄 Документация API: Pachca API Documentation