feat: migrate to uv package manager

- Add pyproject.toml with project configuration
- Update requirements.txt and requirements.dev.txt with versions
- Add .uv configuration file
- Update .gitignore for uv
- Update README with uv instructions
- Configure hatchling build system
- Add mypy configuration
- Test uv sync and pytest integration
This commit is contained in:
2025-08-12 13:12:39 +03:00
parent 333dc19020
commit 663942c41e
7 changed files with 2168 additions and 183 deletions

232
README.md
View File

@@ -1,184 +1,124 @@
# GraphQL API Backend
# Discours Core
<div align="center">
Core backend for Discours.io platform
![Version](https://img.shields.io/badge/v0.7.8-lightgrey)
![Tests](https://img.shields.io/badge/tests%2090%25-lightcyan?logo=pytest&logoColor=black)
![Python](https://img.shields.io/badge/python%203.12+-lightblue?logo=python&logoColor=black)
![PostgreSQL](https://img.shields.io/badge/postgresql%2016.1-lightblue?logo=postgresql&logoColor=black)
![Redis](https://img.shields.io/badge/redis%206.2.0-salmon?logo=redis&logoColor=black)
![txtai](https://img.shields.io/badge/txtai%208.6.0-lavender?logo=elasticsearch&logoColor=black)
![GraphQL](https://img.shields.io/badge/ariadne%200.23.0-pink?logo=graphql&logoColor=black)
![TypeScript](https://img.shields.io/badge/typescript%205.8.3-blue?logo=typescript&logoColor=black)
![SolidJS](https://img.shields.io/badge/solidjs%201.9.1-blue?logo=solid&logoColor=black)
![Vite](https://img.shields.io/badge/vite%207.0.0-blue?logo=vite&logoColor=black)
![Biome](https://img.shields.io/badge/biome%202.0.6-blue?logo=biome&logoColor=black)
## Requirements
</div>
- Python 3.11+
- uv (Python package manager)
Backend service providing GraphQL API for content management system with reactions, ratings and topics.
## Installation
## 📚 Documentation
### Install uv
- [API Documentation](docs/api.md)
- [Authentication Guide](docs/auth.md)
- [Caching System](docs/redis-schema.md)
- [Features Overview](docs/features.md)
- [RBAC System](docs/rbac-system.md)
```bash
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
## 🚀 Core Features
### Shouts (Posts)
- CRUD operations via GraphQL mutations
- Rich filtering and sorting options
- Support for multiple authors and topics
- Rating system with likes/dislikes
- Comments and nested replies
- Bookmarks and following
### Reactions System
- `ReactionKind` types: LIKE, DISLIKE, COMMENT
- Rating calculation for shouts and comments
- User-specific reaction tracking
- Reaction stats and aggregations
- Nested comments support
### Authors & Topics
- Author profiles with stats
- Topic categorization and hierarchy
- Following system for authors/topics
- Activity tracking and stats
- Community features
### RBAC & Permissions
- RBAC with hierarchy using Redis
## 🛠️ Tech Stack
**Core:** Python 3.12 • GraphQL • PostgreSQL • SQLAlchemy • JWT • Redis • txtai
**Server:** Starlette • Granian 1.8.0 • Nginx
**Frontend:** SolidJS 1.9.1 • TypeScript 5.7.2 • Vite 5.4.11
**GraphQL:** Ariadne 0.23.0
**Tools:** Pytest • MyPy • Biome 2.0.6
## 🔧 Development
![PRs Welcome](https://img.shields.io/badge/PRs-welcome-lightcyan?logo=git&logoColor=black)
![Biome](https://img.shields.io/badge/biome%202.0.6-yellow?logo=code&logoColor=black)
![Mypy](https://img.shields.io/badge/mypy-lavender?logo=python&logoColor=black)
### 📦 Prepare environment:
```shell
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.dev.txt
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
```
### 🚀 Run server
### Setup project
First, certificates are required to run the server with HTTPS.
```bash
# Clone repository
git clone <repository-url>
cd discours-core
```shell
mkcert -install
mkcert localhost
# Install dependencies
uv sync --dev
# Activate virtual environment
source .venv/bin/activate # Linux/macOS
# or
.venv\Scripts\activate # Windows
```
Then, run the server:
## Development
```shell
python -m granian main:app --interface asgi
### Install dependencies
```bash
# Install all dependencies (including dev)
uv sync --dev
# Install only production dependencies
uv sync
# Install specific group
uv sync --group test
uv sync --group lint
```
### ⚡ Useful Commands
### Run tests
```shell
# Linting and formatting with Biome
biome check . --write
```bash
# Run all tests
uv run pytest
# Lint only
biome lint .
# Run specific test file
uv run pytest tests/test_auth_fixes.py
# Format only
biome format . --write
# python lint
ruff check . --fix --select I # линтер и сортировка импортов
ruff format . --line-length=120 # форматирование кода
# Run tests
pytest
# Type checking
mypy .
# dev run
python -m granian main:app --interface asgi
# Run with coverage
uv run pytest --cov=services,utils,orm,resolvers
```
### 📝 Code Style
### Code quality
![Line 120](https://img.shields.io/badge/line%20120-lightblue?logo=prettier&logoColor=black)
![Types](https://img.shields.io/badge/typed-pink?logo=python&logoColor=black)
![Docs](https://img.shields.io/badge/documented-lightcyan?logo=markdown&logoColor=black)
```bash
# Run ruff linter
uv run ruff check .
**Biome 2.1.2** for linting and formatting • **120 char** lines • **Type hints** required • **Docstrings** for public methods
# Run ruff formatter
uv run ruff format .
### 🔍 GraphQL Development
Test queries in GraphQL Playground at `http://localhost:8000`:
```graphql
# Example query
query GetShout($slug: String) {
get_shout(slug: $slug) {
id
title
main_author {
name
}
}
}
# Run mypy type checker
uv run mypy .
```
---
### Run application
## 📊 Project Stats
```bash
# Run main application
uv run python main.py
<div align="center">
# Run development server
uv run python dev.py
```
![Lines](https://img.shields.io/badge/15k%2B-lines-lightcyan?logo=code&logoColor=black)
![Files](https://img.shields.io/badge/100%2B-files-lavender?logo=folder&logoColor=black)
![Coverage](https://img.shields.io/badge/90%25-coverage-gold?logo=test-tube&logoColor=black)
![MIT](https://img.shields.io/badge/MIT-license-silver?logo=balance-scale&logoColor=black)
## Project structure
</div>
```
discours-core/
├── auth/ # Authentication and authorization
├── cache/ # Caching system
├── orm/ # Database models
├── resolvers/ # GraphQL resolvers
├── services/ # Business logic services
├── utils/ # Utility functions
├── schema/ # GraphQL schema
├── tests/ # Test suite
└── docs/ # Documentation
```
## 🤝 Contributing
## Configuration
[CHANGELOG.md](CHANGELOG.md)
The project uses `pyproject.toml` for configuration:
![Contributing](https://img.shields.io/badge/contributing-guide-salmon?logo=handshake&logoColor=black) • [Read the guide](CONTRIBUTING.md)
- **Dependencies**: Defined in `[project.dependencies]` and `[project.optional-dependencies]`
- **Build system**: Uses `hatchling` for building packages
- **Code quality**: Configured with `ruff` and `mypy`
- **Testing**: Configured with `pytest`
We welcome contributions! Please read our contributing guide before submitting PRs.
## CI/CD
## 📄 License
The project includes GitHub Actions workflows for:
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
- Automated testing
- Code quality checks
- Deployment to staging and production servers
## 🔗 Links
## License
![Website](https://img.shields.io/badge/discours.io-website-lightblue?logo=globe&logoColor=black)
![GitHub](https://img.shields.io/badge/discours/core-github-silver?logo=github&logoColor=black)
• [discours.io](https://discours.io)
• [Source Code](https://github.com/discours/core)
---
<div align="center">
**Made with ❤️ by the Discours Team**
![Made with Love](https://img.shields.io/badge/made%20with%20❤-pink?logo=heart&logoColor=black)
![Open Source](https://img.shields.io/badge/open%20source-lightcyan?logo=open-source-initiative&logoColor=black)
</div>
MIT License