{"id":15102738,"url":"https://github.com/nsstnc/cli-fastapi-json","last_synced_at":"2026-01-18T01:36:15.826Z","repository":{"id":248242982,"uuid":"828164285","full_name":"nsstnc/cli-fastapi-json","owner":"nsstnc","description":"CLI-приложение для валидации документов, описанных в JSON Schema и генерации кода контроллеров в приложении FastAPI","archived":false,"fork":false,"pushed_at":"2024-07-21T17:30:50.000Z","size":11113,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-10T22:45:53.567Z","etag":null,"topics":["alembic","cli","click","fastapi","json-schema","postgres","pydantic","rabbitmq","sqlalchemy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nsstnc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-13T10:05:09.000Z","updated_at":"2024-11-30T08:49:58.000Z","dependencies_parsed_at":"2024-07-19T20:03:03.442Z","dependency_job_id":"b56204bf-510d-41f6-988b-965ad6ad5f82","html_url":"https://github.com/nsstnc/cli-fastapi-json","commit_stats":{"total_commits":32,"total_committers":1,"mean_commits":32.0,"dds":0.0,"last_synced_commit":"025dff25fd852a16e95c7e9448ba66033e9984a6"},"previous_names":["nsstnc/cli-fastapi-json"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcli-fastapi-json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcli-fastapi-json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcli-fastapi-json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcli-fastapi-json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nsstnc","download_url":"https://codeload.github.com/nsstnc/cli-fastapi-json/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247332525,"owners_count":20921852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alembic","cli","click","fastapi","json-schema","postgres","pydantic","rabbitmq","sqlalchemy"],"created_at":"2024-09-25T19:05:43.869Z","updated_at":"2026-01-18T01:36:15.758Z","avatar_url":"https://github.com/nsstnc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CLI генератор Pydantic моделей и REST API контроллеров\n\n## Обзор\nПроект включает в себя CLI приложение, которое предоставляет набор инструментов для разработки и управления FastAPI проектом. Он же в свою очередь предоставляет интерфейс для взаимодействия с базой данных и системой сообщений.\n\n\n\n## Возможности\n\n**CLI** приложение позволяет:\n- **Генерировать Pydantic модели** на основе их описания в виде JSON Schema\n- **Генерировать код контроллеров** FastAPI REST приложения\n- **Создавать базу данных** PostgresSQL\n- Задавать конфигурацию заранее подготовленного RabbitMQ сервера, на который будут отправляться сообщения\n- Создавать и применять **миграции базы данных** с помощью **Alembic**\n- Сохранять **изменения** в удаленном репозитории **Git**\n- Присваивать новую версию **(tag)** проекту с помощью **Git**\n\n\n**REST FastAPI** приложение позволяет:\n- **Автоматическое обновление** Swagger документации API после изменения/добавления/удаления файлов\n- Автоматически **отправлять сообщения в брокер RabbitMQ** после выполнения POST, PUT и DELETE запросов\n- Добавлять в базу данных JSON документы, валидные к моделям, которые были сгенерированы через CLI приложение\n- Изменять записи в базе данных\n- Удалять записи из базы данных\n\n\n## Стек технологий\n\n- **Backend**: Python, FastAPI, PostgreSQL, SQLAlchemy, Alembic, Click, Pydantic, RabbitMQ, WatchFiles\n- **Frontend**: FastAPI Swagger\n\n## Установка\n\n1. Клонировать репозиторий\n\n    ```bash\n    git clone https://github.com/nsstnc/cli-fastapi-json.git\n    cd cli-fastapi-json\n    ```\n\n2. Настроить виртуальное окружение\n\n    ```bash\n    python -m venv venv\n    ```\n   ```bash\n    venv/bin/activate  # `venv/Scripts/activate` на Windows\n    ```\n3. Установить зависимости\n\n   ```bash\n    pip install -r requirements.txt\n    ```\n\n## Использование\n### JSON Schema\nПеред работой с приложением необходимо заранее подготовить JSON схемы для JSON объектов различных видов kind.\nJSON схема описывает документы вида kind. Для каждой схемы нового вида kind создается модель Pydantic с тем же названием,\nв дальнейшем на ее основе генерируются kind-контроллеры FastAPI приложения.  \nПример JSON схемы вида \"mykind\":\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"kind\": {\n      \"type\": \"string\",\n      \"maxLength\": 32,\n      \"default\": \"mykind\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"maxLength\": 128\n    },\n    \"version\": {\n      \"type\": \"string\",\n      \"pattern\": \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+(-[a-zA-Z0-9]+(\\\\.[a-zA-Z0-9]+)*)?(\\\\+[a-zA-Z0-9]+(\\\\.[a-zA-Z0-9]+)*)?$\"\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"maxLength\": 4096\n    },\n    \"configuration\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"specification\": {\n          \"type\": \"object\",\n          \"additionalProperties\": true\n        },\n        \"settings\": {\n          \"type\": \"object\",\n          \"additionalProperties\": true\n        }\n      },\n      \"required\": [\"specification\", \"settings\"]\n    }\n  },\n  \"required\": [\"kind\", \"name\", \"version\", \"description\", \"configuration\"]\n}\n```\nГенератор моделей заточен под схемы такого вида, где словари specification и settings задаются пользователем и имеют свободную структуру.\nТакже в схеме обязательно должны присутствовать поля kind, name, version и description. Иначе сгенерированная модель не будет валидна к таблице в БД.  \nПример JSON-документа, который валиден описанной выше схеме и Pydantic модели, сгенерированной на ее основе:\n```json\n{\n  \"kind\": \"mykind\",\n  \"name\": \"hello-world\",\n  \"version\": \"1.0.0\",\n  \"description\": \"My application\",\n  \"configuration\": {\n    \"specification\": {\n      \"jvmConfig\": [\n        \"-Dcom.sun.a=a\",\n        \"-Dcom.sun.b=b\",\n        \"-Dcom.sun.c=c\"\n      ],\n      \"exposedPorts\": [\n        {\n          \"name\": \"my-port\",\n          \"port\": 8000,\n          \"protocol\": \"TCP\"\n        }\n      ],\n      \"sharedNamespace\": true,\n      \"log\": {\n        \"level\": \"INFO\"\n      },\n      \"environmentVariables\": [\n        \"VAR1=VALUE1\"\n      ]\n    },\n    \"settings\": {\n    }\n  }\n}\n```\nСгенерированные контроллеры FastAPI позволят работать с каждым видом kind добавленных моделей. Для каждого kind будут отдельные контроллеры GET, POST, PUT И DELETE запросов. \n\n### CLI\n- Создание базы данных:\n```bash\npython cli/main.py create-db\n```\nДалее потребуется ввести конфигурационные данные для подключения к СУБД и создания базы данных.  \n- Запись конфигурационных данных для RabbitMQ\n```bash\npython cli/main.py set-rabbit-config\n```\n- Генерация Pydantic моделей на основе JSON schema\n```bash\npython cli/main.py gen-models --json-schema=cli/schema.json\n```\nГде \"cli/schema.json\" - путь к файлу JSON Schema\n- Генерация REST API контроллеров на основе добавленных Pydantic моделей\n```bash\npython cli/main.py gen-rest\n```\n- Сохранение и отправка изменений в удаленный репозиторий Git\n```bash\npython cli/main.py commit-changes --message=\"Initial commit\"\n```\nГде \"Initial commit\" - описание коммита\n- Присваивание тега новой версии приложения\n```bash\npython cli/main.py create-tag v0.0.1\n```\n- Создание миграции Alembic\n```bash\npython cli/main.py migrate --message=\"added record\" \n```\n- Применение всех миграций Alembic\n```bash\npython cli/main.py upgrade\n```\n- Подробную информацию обо всех командах можно посмотреть с помощью --help\n```bash\npython cli/main.py --help\n```\n### REST API\n- Запуск сервера **(Только после создания базы данных)**\n```bash\n./run_api.sh # `./run_api.bat` на Windows\n```\nДалее по адресу http://localhost:8001/docs можно использовать Swagger FastAPI, где описаны все возможные запросы к API.\n\n\n## Архитектура проекта\n### Flowchart диаграмма CLI-приложения\n![Flowchart ClI](markdown-images/flowchart_cli.png)\n### Flowchart диаграмма REST API приложения\n![Flowchart REST API](markdown-images/flowchart_rest_api.png)\n### Диаграмма развертывания\n![Deployment diagram](markdown-images/deployment_diagram.png)\n### Представление таблицы в Базе Данных\n![DB](markdown-images/db_schema.png)\n\n## Файловая структура\n```\ncli-fastapi-json/  \n├── markdown-images/ # Папка с изображениями для README.md файла  \n├── alembic/ # Папка с файлами alembic  \n   └── versions/ # Миграции alembic\n   └── env.py # Основной файл конфигурации Alembic\n   └── README\n   └── script.py.mako # Шаблон для новых файлов миграций\n├── api/ # Директория FastAPI приложения\n   └── models/ # Папка с Pydantic моделями\n   └── routers/ # Папка с контроллерами REST API\n   └── database.py # Файл с настройкой подключения к БД и генератором сессий\n   └── db_models.py # SQLAlchemy модели для таблиц БД\n   └── main.py # Основной файл FastAPI приложения\n   └── rabbitmq.py # Файл с настройкой подключения к RabbitMQ и методами для отправки сообщений\n├── cli/ # Директория CLI приложения\n   └── create_database.py # Скрипт, для создания базы данных PostgreSQL\n   └── main.py # Основной файл CLI приложения\n   └── ModelGenerator.py # Класс-генератор моделей Pydantic\n   └── router_template.py.jinja # Jinja шаблон контроллеров для FastAPI приложения\n   └── RouterGenerator.py # Класс-генератор контроллеров FastAPI\n├── venv/ # Файлы виртуального окружения\n├── .env # Файл с переменными окружения (записан в .gitignore и создается автоматически)  \n├── .gitignore\n├── alembic.ini # Конфигурация alembic\n├── README.md # Документация\n├── requirements.txt # Файл с зависимостями\n├── run_api.bat # Скрипт для запуска приложения Fast API на Windows\n├── run_api.sh # Скрипт для запуска приложения Fast API на UNIX-системах\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnsstnc%2Fcli-fastapi-json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnsstnc%2Fcli-fastapi-json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnsstnc%2Fcli-fastapi-json/lists"}