docs: simplify documentation structure
- Remove manual API docs (mkdocstrings generates automatically) - Remove internal docs (ARCHITECTURE, GITEA_PAGES, RELEASE, SEMANTIC_RELEASE) - Add usage.md with examples - Simplify index.md - Update mkdocs.yml (minimal config) - Remove api_reference.md duplicate
This commit is contained in:
parent
43a75ae09b
commit
309556c1a0
@ -1,261 +0,0 @@
|
|||||||
# Architecture — kwork-api
|
|
||||||
|
|
||||||
## 📐 Обзор
|
|
||||||
|
|
||||||
**kwork-api** — асинхронный Python клиент для Kwork.ru API с полной типизацией и документацией.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🏗️ Архитектура
|
|
||||||
|
|
||||||
```
|
|
||||||
┌─────────────────────────────────────────────────────────┐
|
|
||||||
│ User Application │
|
|
||||||
└─────────────────────────────────────────────────────────┘
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
┌─────────────────────────────────────────────────────────┐
|
|
||||||
│ KworkClient │
|
|
||||||
│ ┌──────────────────────────────────────────────────┐ │
|
|
||||||
│ │ Authentication Layer │ │
|
|
||||||
│ │ - login() / token auth │ │
|
|
||||||
│ │ - Session management │ │
|
|
||||||
│ └──────────────────────────────────────────────────┘ │
|
|
||||||
│ ┌──────────────────────────────────────────────────┐ │
|
|
||||||
│ │ API Groups │ │
|
|
||||||
│ │ - catalog, projects, user, reference, ... │ │
|
|
||||||
│ └──────────────────────────────────────────────────┘ │
|
|
||||||
│ ┌──────────────────────────────────────────────────┐ │
|
|
||||||
│ │ HTTP Layer (httpx) │ │
|
|
||||||
│ │ - HTTP/2 support │ │
|
|
||||||
│ │ - Timeout handling │ │
|
|
||||||
│ │ - Error handling │ │
|
|
||||||
│ └──────────────────────────────────────────────────┘ │
|
|
||||||
└─────────────────────────────────────────────────────────┘
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
┌─────────────────────────────────────────────────────────┐
|
|
||||||
│ Kwork.ru API (HTTPS) │
|
|
||||||
└─────────────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📁 Структура проекта
|
|
||||||
|
|
||||||
```
|
|
||||||
kwork-api/
|
|
||||||
├── src/kwork_api/
|
|
||||||
│ ├── __init__.py # Public API
|
|
||||||
│ ├── client.py # KworkClient + API groups
|
|
||||||
│ ├── models.py # Pydantic models
|
|
||||||
│ └── errors.py # Exception classes
|
|
||||||
│
|
|
||||||
├── tests/
|
|
||||||
│ ├── test_client.py # Client tests
|
|
||||||
│ ├── test_models.py # Model tests
|
|
||||||
│ └── test_all_endpoints.py # Endpoint tests
|
|
||||||
│
|
|
||||||
├── docs/
|
|
||||||
│ ├── index.md # Quick start
|
|
||||||
│ ├── api-reference.md # API docs
|
|
||||||
│ ├── RELEASE.md # Release guide
|
|
||||||
│ └── ARCHITECTURE.md # This file
|
|
||||||
│
|
|
||||||
├── .github/workflows/
|
|
||||||
│ └── ci.yml # CI/CD pipeline
|
|
||||||
│
|
|
||||||
├── pyproject.toml # Project config
|
|
||||||
├── uv.lock # Dependencies lock
|
|
||||||
└── README.md # Main documentation
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔑 Компоненты
|
|
||||||
|
|
||||||
### 1. KworkClient
|
|
||||||
|
|
||||||
**Ответственность:** Основное взаимодействие с API
|
|
||||||
|
|
||||||
**Функции:**
|
|
||||||
- Аутентификация (login / token)
|
|
||||||
- Управление сессией
|
|
||||||
- Делегирование API группам
|
|
||||||
|
|
||||||
**API Groups:**
|
|
||||||
```python
|
|
||||||
client.catalog # CatalogAPI
|
|
||||||
client.projects # ProjectsAPI
|
|
||||||
client.user # UserAPI
|
|
||||||
client.reference # ReferenceAPI
|
|
||||||
client.notifications # NotificationsAPI
|
|
||||||
client.other # OtherAPI
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 2. Models (Pydantic)
|
|
||||||
|
|
||||||
**Ответственность:** Валидация и типизация ответов API
|
|
||||||
|
|
||||||
**Категории:**
|
|
||||||
- **User models:** KworkUser, AuthResponse
|
|
||||||
- **Kwork models:** Kwork, KworkDetails, KworkCategory
|
|
||||||
- **Project models:** Project, ProjectsResponse
|
|
||||||
- **Review models:** Review, ReviewsResponse
|
|
||||||
- **Notification models:** Notification, Dialog
|
|
||||||
- **Reference models:** City, Country, TimeZone, Feature, Badge
|
|
||||||
- **Error models:** ErrorDetail, APIErrorResponse
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3. Errors
|
|
||||||
|
|
||||||
**Ответственность:** Обработка ошибок API
|
|
||||||
|
|
||||||
**Иерархия:**
|
|
||||||
```
|
|
||||||
KworkError (base)
|
|
||||||
├── KworkAuthError # 401, 403
|
|
||||||
├── KworkApiError # 4xx, 5xx
|
|
||||||
│ ├── KworkNotFoundError # 404
|
|
||||||
│ ├── KworkRateLimitError # 429
|
|
||||||
│ └── KworkValidationError # 400
|
|
||||||
└── KworkNetworkError # Network issues
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 4. HTTP Layer (httpx)
|
|
||||||
|
|
||||||
**Ответственность:** HTTP запросы
|
|
||||||
|
|
||||||
**Функции:**
|
|
||||||
- HTTP/2 поддержка
|
|
||||||
- Таймауты
|
|
||||||
- Cookies management
|
|
||||||
- Token authentication
|
|
||||||
- Error handling
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔄 Flow: Аутентификация
|
|
||||||
|
|
||||||
```
|
|
||||||
User → KworkClient.login(username, password)
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
POST /signIn (cookies)
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
POST /getWebAuthToken (token)
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
Store token + cookies
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
Return authenticated client
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔄 Flow: API Request
|
|
||||||
|
|
||||||
```
|
|
||||||
User → client.catalog.get_list(page=1)
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
CatalogAPI.get_list()
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
KworkClient._request()
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
httpx.AsyncClient.post()
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
KworkClient._handle_response()
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
CatalogResponse.model_validate()
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
Return typed response
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 CI/CD Pipeline
|
|
||||||
|
|
||||||
```
|
|
||||||
Push/Tag → GitHub Actions
|
|
||||||
│
|
|
||||||
├── Test Job
|
|
||||||
│ ├── Install UV + Python
|
|
||||||
│ ├── Run linters (ruff)
|
|
||||||
│ ├── Run tests (pytest)
|
|
||||||
│ └── Upload coverage
|
|
||||||
│
|
|
||||||
├── Build Job
|
|
||||||
│ ├── Build wheel + sdist
|
|
||||||
│ └── Upload artifacts
|
|
||||||
│
|
|
||||||
├── Publish Job (on tag)
|
|
||||||
│ ├── Download artifacts
|
|
||||||
│ └── Publish to Gitea Registry
|
|
||||||
│
|
|
||||||
└── Docs Job
|
|
||||||
├── Build MkDocs
|
|
||||||
└── Upload site
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 Зависимости
|
|
||||||
|
|
||||||
### Runtime
|
|
||||||
- `httpx[http2]>=0.26.0` — HTTP client
|
|
||||||
- `pydantic>=2.0.0` — Data validation
|
|
||||||
- `structlog>=24.0.0` — Logging
|
|
||||||
|
|
||||||
### Development
|
|
||||||
- `pytest>=8.0.0` — Testing
|
|
||||||
- `pytest-cov>=4.0.0` — Coverage
|
|
||||||
- `pytest-asyncio>=0.23.0` — Async tests
|
|
||||||
- `respx>=0.20.0` — HTTP mocking
|
|
||||||
- `ruff>=0.3.0` — Linting
|
|
||||||
- `mkdocs + mkdocstrings` — Documentation
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔒 Безопасность
|
|
||||||
|
|
||||||
- **Токены:** Не сохраняются в логах
|
|
||||||
- **Пароли:** Передаются только при login()
|
|
||||||
- **Сессии:** Token + cookies хранятся в клиенте
|
|
||||||
- **HTTPS:** Все запросы через HTTPS
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📈 Производительность
|
|
||||||
|
|
||||||
- **Async/Await:** Неблокирующие запросы
|
|
||||||
- **HTTP/2:** Multiplexing запросов
|
|
||||||
- **Connection pooling:** Переиспользование соединений
|
|
||||||
- **Timeouts:** Защита от зависаний
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 Тестирование
|
|
||||||
|
|
||||||
- **Unit тесты:** 92% coverage
|
|
||||||
- **Mock HTTP:** respx для изоляции
|
|
||||||
- **Async tests:** pytest-asyncio
|
|
||||||
- **CI:** Автоматический прогон при каждом коммите
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📝 Лицензия
|
|
||||||
|
|
||||||
MIT License — свободное использование с указанием авторства.
|
|
||||||
@ -1,211 +0,0 @@
|
|||||||
# Gitea Pages — Хостинг документации
|
|
||||||
|
|
||||||
## 📋 Обзор
|
|
||||||
|
|
||||||
**Gitea Pages** — аналог GitHub Pages для хостинга статических сайтов напрямую из Gitea.
|
|
||||||
|
|
||||||
**URL документации:** `https://git.much-data.ru/claw/kwork-api/`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 НАСТРОЙКА
|
|
||||||
|
|
||||||
### **Шаг 1: Включить Pages в репозитории**
|
|
||||||
|
|
||||||
1. Зайди в https://git.much-data.ru/claw/kwork-api
|
|
||||||
2. **Settings** → **Pages**
|
|
||||||
3. Включить **Enable Pages**
|
|
||||||
4. Выбрать источник:
|
|
||||||
- **Source:** `gh-pages` branch
|
|
||||||
- **Folder:** `/ (root)`
|
|
||||||
5. **Save**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Шаг 2: Настроить Gitea Token**
|
|
||||||
|
|
||||||
1. https://git.much-data.ru → Settings → Applications
|
|
||||||
2. Создать токен с правами:
|
|
||||||
- `write:repository`
|
|
||||||
- `write:package`
|
|
||||||
3. Скопировать токен
|
|
||||||
4. В репозитории: **Settings** → **Secrets**
|
|
||||||
5. Добавить секрет: `GITEA_TOKEN` = твой токен
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Шаг 3: Первый деплой**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /root/kwork-api
|
|
||||||
|
|
||||||
# Собрать документацию
|
|
||||||
uv run mkdocs build
|
|
||||||
|
|
||||||
# Проверить что site/ создан
|
|
||||||
ls -la site/
|
|
||||||
|
|
||||||
# Закоммитить и запушить
|
|
||||||
git add .
|
|
||||||
git commit -m "docs: initial documentation"
|
|
||||||
git push origin main
|
|
||||||
|
|
||||||
# CI/CD автоматически задеплоит на gh-pages
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Шаг 4: Проверить**
|
|
||||||
|
|
||||||
После успешного CI/CD:
|
|
||||||
|
|
||||||
**Документация доступна:**
|
|
||||||
```
|
|
||||||
https://git.much-data.ru/claw/kwork-api/
|
|
||||||
```
|
|
||||||
|
|
||||||
Или если включён custom domain:
|
|
||||||
```
|
|
||||||
https://kwork-api.much-data.ru/
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔄 АВТОМАТИЧЕСКИЙ ДЕПЛОЙ
|
|
||||||
|
|
||||||
**Workflow срабатывает при:**
|
|
||||||
- ✅ Push в `main` ветку
|
|
||||||
- ✅ Создании тега релиза
|
|
||||||
|
|
||||||
**Что делает:**
|
|
||||||
1. Собирает MkDocs документацию
|
|
||||||
2. Пушит в `gh-pages` ветку
|
|
||||||
3. Gitea Pages автоматически обновляет сайт
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🌐 CUSTOM DOMAIN (опционально)
|
|
||||||
|
|
||||||
### **DNS настройка:**
|
|
||||||
|
|
||||||
```
|
|
||||||
# В панели управления доменом much-data.ru
|
|
||||||
|
|
||||||
# CNAME запись:
|
|
||||||
kwork-api CNAME git.much-data.ru
|
|
||||||
|
|
||||||
# Или A запись:
|
|
||||||
kwork-api A 5.188.26.192
|
|
||||||
```
|
|
||||||
|
|
||||||
### **В Gitea Pages:**
|
|
||||||
|
|
||||||
1. **Settings** → **Pages**
|
|
||||||
2. **Custom Domain:** `kwork-api.much-data.ru`
|
|
||||||
3. **Save**
|
|
||||||
|
|
||||||
### **Создать CNAME файл:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# В корне проекта (не в site/)
|
|
||||||
echo "kwork-api.much-data.ru" > static/CNAME
|
|
||||||
git add static/CNAME
|
|
||||||
git commit -m "docs: add custom domain"
|
|
||||||
git push
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 СТРУКТУРА ВЕТКИ
|
|
||||||
|
|
||||||
```
|
|
||||||
main (исходный код)
|
|
||||||
├── src/
|
|
||||||
├── docs/
|
|
||||||
├── mkdocs.yml
|
|
||||||
└── .github/workflows/ci.yml
|
|
||||||
|
|
||||||
gh-pages (автоматически, только сайт)
|
|
||||||
├── index.html
|
|
||||||
├── api-reference/
|
|
||||||
├── search/
|
|
||||||
└── ...
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔍 TROUBLESHOOTING
|
|
||||||
|
|
||||||
### **Pages не включаются:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверить что Gitea версия >= 1.19
|
|
||||||
# Админ должен включить Pages в настройках сервера
|
|
||||||
```
|
|
||||||
|
|
||||||
### **CI/CD ошибка деплоя:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверить токен
|
|
||||||
# Проверить права токена (write:repository)
|
|
||||||
# Проверить что gh-pages ветка существует
|
|
||||||
```
|
|
||||||
|
|
||||||
### **404 на странице:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Подождать 1-2 минуты (Gitea обрабатывает)
|
|
||||||
# Проверить что site/ не пустой
|
|
||||||
# Проверить workflow логи
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📋 ЧЕКЛИСТ
|
|
||||||
|
|
||||||
- [ ] Включить Pages в настройках репозитория
|
|
||||||
- [ ] Создать Gitea Token
|
|
||||||
- [ ] Добавить токен в Secrets (`GITEA_TOKEN`)
|
|
||||||
- [ ] Запушить изменения в main
|
|
||||||
- [ ] Дождаться CI/CD
|
|
||||||
- [ ] Проверить https://git.much-data.ru/claw/kwork-api/
|
|
||||||
- [ ] (Опционально) Настроить custom domain
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 АЛЬТЕРНАТИВЫ
|
|
||||||
|
|
||||||
Если Gitea Pages не работает:
|
|
||||||
|
|
||||||
### **1. Netlify (бесплатно)**
|
|
||||||
```bash
|
|
||||||
# Подключить репозиторий
|
|
||||||
# Build command: uv run mkdocs build
|
|
||||||
# Publish directory: site/
|
|
||||||
```
|
|
||||||
|
|
||||||
### **2. Vercel (бесплатно)**
|
|
||||||
```bash
|
|
||||||
# Аналогично Netlify
|
|
||||||
# Автоматический деплой из Git
|
|
||||||
```
|
|
||||||
|
|
||||||
### **3. Cloudflare Pages (бесплатно)**
|
|
||||||
```bash
|
|
||||||
# Быстрый CDN
|
|
||||||
# Автоматический HTTPS
|
|
||||||
```
|
|
||||||
|
|
||||||
### **4. Своё сервер (nginx)**
|
|
||||||
```bash
|
|
||||||
# Скопировать site/ на сервер
|
|
||||||
# Настроить nginx на /var/www/kwork-api-docs/
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📞 ССЫЛКИ
|
|
||||||
|
|
||||||
- [Gitea Pages Documentation](https://docs.gitea.com/usage/pages)
|
|
||||||
- [MkDocs Documentation](https://www.mkdocs.org/)
|
|
||||||
- [Gitea Actions](https://docs.gitea.com/usage/actions)
|
|
||||||
131
docs/RELEASE.md
131
docs/RELEASE.md
@ -1,131 +0,0 @@
|
|||||||
# Release Guide — kwork-api
|
|
||||||
|
|
||||||
## 📋 Стратегия версионирования
|
|
||||||
|
|
||||||
Используем **SemVer** (Semantic Versioning): `MAJOR.MINOR.PATCH`
|
|
||||||
|
|
||||||
- **MAJOR** — ломающие изменения API
|
|
||||||
- **MINOR** — новая функциональность (обратно совместимая)
|
|
||||||
- **PATCH** — багфиксы (обратно совместимые)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 Процесс релиза
|
|
||||||
|
|
||||||
### 1. Подготовка
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Убедись что все тесты проходят
|
|
||||||
uv run pytest
|
|
||||||
|
|
||||||
# Проверь линтеры
|
|
||||||
uv run ruff check src/ tests/
|
|
||||||
|
|
||||||
# Проверь сборку
|
|
||||||
uv build
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Обновление версии
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Обновить версию в pyproject.toml
|
|
||||||
# Например: 0.1.0 → 0.1.1
|
|
||||||
|
|
||||||
# Создать тег
|
|
||||||
git tag -a v0.1.1 -m "Release v0.1.1"
|
|
||||||
|
|
||||||
# Отпушить тег
|
|
||||||
git push origin v0.1.1
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Автоматическая публикация
|
|
||||||
|
|
||||||
После пуша тега:
|
|
||||||
1. ✅ Запускается CI/CD pipeline
|
|
||||||
2. ✅ Прогоняются тесты
|
|
||||||
3. ✅ Собирается пакет
|
|
||||||
4. ✅ Публикуется в Gitea Registry
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 Gitea Package Registry
|
|
||||||
|
|
||||||
**URL:** `https://git.much-data.ru/api/packages/claw/pypi`
|
|
||||||
|
|
||||||
**Установка:**
|
|
||||||
```bash
|
|
||||||
# Создать .pypirc в домашней директории
|
|
||||||
cat > ~/.pypirc << EOF
|
|
||||||
[pypi]
|
|
||||||
username = claw
|
|
||||||
password = YOUR_GITEA_TOKEN
|
|
||||||
|
|
||||||
[git.much-data.ru]
|
|
||||||
repository = https://git.much-data.ru/api/packages/claw/pypi
|
|
||||||
username = claw
|
|
||||||
password = YOUR_GITEA_TOKEN
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Установить из Gitea
|
|
||||||
uv pip install kwork-api --index-url https://git.much-data.ru/api/packages/claw/pypi
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔑 Получение Gitea Token
|
|
||||||
|
|
||||||
1. Зайди в https://git.much-data.ru
|
|
||||||
2. Профиль → Settings → Applications
|
|
||||||
3. Создать токен с правами `write:package`
|
|
||||||
4. Сохрани токен в секреты репозитория: `GITEA_TOKEN`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 Changelog
|
|
||||||
|
|
||||||
Ведётся в `CHANGELOG.md` по формату [Keep a Changelog](https://keepachangelog.com/).
|
|
||||||
|
|
||||||
### Пример:
|
|
||||||
```markdown
|
|
||||||
## [0.1.1] - 2026-03-23
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- Исправлена ошибка аутентификации при истечении токена
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Обновлены зависимости
|
|
||||||
|
|
||||||
## [0.1.0] - 2026-03-23
|
|
||||||
|
|
||||||
### Added
|
|
||||||
- Первый релиз
|
|
||||||
- Базовая функциональность клиента
|
|
||||||
- Документация 100%
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ Чеклист перед релизом
|
|
||||||
|
|
||||||
- [ ] Все тесты проходят
|
|
||||||
- [ ] Линтеры без ошибок
|
|
||||||
- [ ] Документация обновлена
|
|
||||||
- [ ] CHANGELOG.md обновлён
|
|
||||||
- [ ] Версия в pyproject.toml обновлена
|
|
||||||
- [ ] Тег создан и отправлен
|
|
||||||
- [ ] CI/CD pipeline успешен
|
|
||||||
- [ ] Пакет опубликован
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 Ручная публикация (если нужно)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Собрать
|
|
||||||
uv build
|
|
||||||
|
|
||||||
# Опубликовать
|
|
||||||
uv publish \
|
|
||||||
--publish-url https://git.much-data.ru/api/packages/claw/pypi \
|
|
||||||
--token YOUR_GITEA_TOKEN
|
|
||||||
```
|
|
||||||
@ -1,281 +0,0 @@
|
|||||||
# Semantic Release — Автоматическое версионирование
|
|
||||||
|
|
||||||
## 📋 Обзор
|
|
||||||
|
|
||||||
**python-semantic-release** автоматически определяет версию на основе Conventional Commits.
|
|
||||||
|
|
||||||
**Как работает:**
|
|
||||||
```
|
|
||||||
Commit → Анализ сообщения → Определение типа → Bump версии → Тег → Релиз
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 CONVENTIONAL COMMITS
|
|
||||||
|
|
||||||
### **Формат коммита:**
|
|
||||||
|
|
||||||
```
|
|
||||||
<type>(<scope>): <description>
|
|
||||||
|
|
||||||
[optional body]
|
|
||||||
|
|
||||||
[optional footer]
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Типы коммитов и влияние на версию:**
|
|
||||||
|
|
||||||
| Тип | Влияние | Пример | Версия |
|
|
||||||
|-----|---------|--------|--------|
|
|
||||||
| `feat` | **MINOR** | `feat: add new API endpoint` | 0.1.0 → 0.2.0 |
|
|
||||||
| `fix` | **PATCH** | `fix: handle timeout errors` | 0.1.0 → 0.1.1 |
|
|
||||||
| `perf` | **PATCH** | `perf: optimize HTTP requests` | 0.1.0 → 0.1.1 |
|
|
||||||
| `feat` + BREAKING | **MAJOR** | `feat: change auth method` | 0.1.0 → 1.0.0 |
|
|
||||||
| `docs`, `style`, `refactor`, `test`, `chore`, `ci`, `build` | Нет | `docs: update README` | Без изменений |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📝 ПРИМЕРЫ КОММИТОВ
|
|
||||||
|
|
||||||
### **PATCH (багфиксы):**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git commit -m "fix: handle 404 error in catalog API"
|
|
||||||
git commit -m "fix(auth): restore session from token correctly"
|
|
||||||
git commit -m "perf: reduce HTTP connection overhead"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **MINOR (новая функциональность):**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git commit -m "feat: add batch kwork details endpoint"
|
|
||||||
git commit -m "feat(projects): add get_payer_orders method"
|
|
||||||
git commit -m "feat: support HTTP/2 for faster requests"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **MAJOR (ломающие изменения):**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git commit -m "feat: redesign authentication flow
|
|
||||||
|
|
||||||
BREAKING CHANGE: login() now returns KworkClient instead of tuple
|
|
||||||
|
|
||||||
Migration:
|
|
||||||
Before: token, cookies = await login(user, pass)
|
|
||||||
After: client = await KworkClient.login(user, pass)
|
|
||||||
"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Без влияния на версию:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git commit -m "docs: add usage examples to README"
|
|
||||||
git commit -m "test: increase coverage to 95%"
|
|
||||||
git commit -m "style: fix formatting with ruff"
|
|
||||||
git commit -m "refactor: simplify error handling"
|
|
||||||
git commit -m "chore: update dependencies"
|
|
||||||
git commit -m "ci: add Gitea Actions workflow"
|
|
||||||
git commit -m "build: configure UV build system"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔄 WORKFLOW
|
|
||||||
|
|
||||||
### **Разработка:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Делай коммиты по Conventional Commits
|
|
||||||
git commit -m "feat: add new endpoint"
|
|
||||||
git commit -m "fix: handle edge case"
|
|
||||||
git commit -m "docs: update documentation"
|
|
||||||
|
|
||||||
# Пуш в main
|
|
||||||
git push origin main
|
|
||||||
```
|
|
||||||
|
|
||||||
### **CI/CD (автоматически):**
|
|
||||||
|
|
||||||
```
|
|
||||||
1. Тесты запускаются
|
|
||||||
2. Сборка пакета
|
|
||||||
3. Semantic Release анализирует коммиты
|
|
||||||
4. Определяет тип версии (MAJOR/MINOR/PATCH)
|
|
||||||
5. Обновляет версию в pyproject.toml и __init__.py
|
|
||||||
6. Создаёт Git тег
|
|
||||||
7. Генерирует CHANGELOG
|
|
||||||
8. Создаёт релиз в Gitea
|
|
||||||
9. Публикует пакет в Gitea Registry
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Результат:**
|
|
||||||
|
|
||||||
```
|
|
||||||
✅ v0.1.1 создан
|
|
||||||
✅ CHANGELOG.md обновлён
|
|
||||||
✅ Пакет опубликован
|
|
||||||
✅ Релиз в Gitea создан
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 РУЧНОЕ УПРАВЛЕНИЕ
|
|
||||||
|
|
||||||
### **Проверить следующую версию:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /root/kwork-api
|
|
||||||
uv run semantic-release version --print
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Сгенерировать CHANGELOG:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
uv run semantic-release changelog
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Создать релиз вручную:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Bump версии
|
|
||||||
uv run semantic-release version --no-push
|
|
||||||
|
|
||||||
# Проверить что изменилось
|
|
||||||
git diff
|
|
||||||
|
|
||||||
# Запушить
|
|
||||||
git push origin main --tags
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 ПРИМЕР ИСТОРИИ ВЕРСИЙ
|
|
||||||
|
|
||||||
```
|
|
||||||
v0.1.0 (2026-03-23)
|
|
||||||
- Initial release
|
|
||||||
- Complete API client
|
|
||||||
- 100% documentation
|
|
||||||
|
|
||||||
v0.1.1 (2026-03-24)
|
|
||||||
- fix: handle timeout errors
|
|
||||||
- fix: restore session correctly
|
|
||||||
|
|
||||||
v0.2.0 (2026-03-25)
|
|
||||||
- feat: add batch endpoint
|
|
||||||
- feat: support HTTP/2
|
|
||||||
|
|
||||||
v0.2.1 (2026-03-26)
|
|
||||||
- perf: optimize requests
|
|
||||||
|
|
||||||
v1.0.0 (2026-03-27)
|
|
||||||
- feat: new authentication
|
|
||||||
- BREAKING CHANGE: API changed
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚙️ КОНФИГУРАЦИЯ
|
|
||||||
|
|
||||||
**Файл:** `pyproject.toml`
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[tool.semantic_release]
|
|
||||||
version_toml = ["pyproject.toml:project.version"]
|
|
||||||
version_variables = ["src/kwork_api/__init__.py:__version__"]
|
|
||||||
branch = "main"
|
|
||||||
build_command = "uv build"
|
|
||||||
commit_parser = "angular"
|
|
||||||
tag_format = "v{version}"
|
|
||||||
|
|
||||||
[tool.semantic_release.commit_parser_options]
|
|
||||||
minor_tags = ["feat"]
|
|
||||||
patch_tags = ["fix", "perf"]
|
|
||||||
breaking_change_tags = ["feat"]
|
|
||||||
|
|
||||||
[tool.semantic_release.remote]
|
|
||||||
type = "gitea"
|
|
||||||
domain = "https://git.much-data.ru"
|
|
||||||
owner = "claw"
|
|
||||||
repo_name = "kwork-api"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚨 TROUBLESHOOTING
|
|
||||||
|
|
||||||
### **Ошибка: "No commits to release"**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Значит не было коммитов с типами feat/fix/perf
|
|
||||||
# Сделай коммит с правильным форматом
|
|
||||||
git commit -m "feat: add something new"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Ошибка: "Gitea token invalid"**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверь токен
|
|
||||||
# Settings → Applications → Create new token
|
|
||||||
# Права: write:repository, write:package
|
|
||||||
# Обнови секрет в Gitea Actions
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Версия не обновляется**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверь конфигурацию
|
|
||||||
uv run semantic-release --version
|
|
||||||
|
|
||||||
# Проверь что __version__ есть в __init__.py
|
|
||||||
grep "__version__" src/kwork_api/__init__.py
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📋 ЧЕКЛИСТ ПЕРЕД ПУШЕМ
|
|
||||||
|
|
||||||
- [ ] Коммиты по Conventional Commits
|
|
||||||
- [ ] Тесты проходят
|
|
||||||
- [ ] CHANGELOG обновлён (автоматически)
|
|
||||||
- [ ] Версия в __init__.py совпадает
|
|
||||||
- [ ] GITEA_TOKEN настроен в секретах
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 BEST PRACTICES
|
|
||||||
|
|
||||||
### **✅ Делай:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Атомарные коммиты
|
|
||||||
git commit -m "feat: add user endpoint"
|
|
||||||
git commit -m "fix: handle 404 error"
|
|
||||||
|
|
||||||
# Понятные описания
|
|
||||||
git commit -m "fix: restore session from saved token"
|
|
||||||
|
|
||||||
# Scope для больших изменений
|
|
||||||
git commit -m "feat(auth): add OAuth2 support"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **❌ Не делай:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Слишком общие
|
|
||||||
git commit -m "fix stuff"
|
|
||||||
|
|
||||||
# Несколько изменений в одном
|
|
||||||
git commit -m "feat: add user endpoint and fix auth and update docs"
|
|
||||||
|
|
||||||
# Не по формату
|
|
||||||
git commit -m "added new feature"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📞 ССЫЛКИ
|
|
||||||
|
|
||||||
- [python-semantic-release](https://python-semantic-release.readthedocs.io/)
|
|
||||||
- [Conventional Commits](https://www.conventionalcommits.org/)
|
|
||||||
- [Angular Commit Guidelines](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit)
|
|
||||||
@ -1,9 +1,9 @@
|
|||||||
# API Reference
|
# API Reference
|
||||||
|
|
||||||
Complete API documentation for Kwork API client.
|
Auto-generated API documentation is available below.
|
||||||
|
|
||||||
## Modules
|
::: kwork_api.client.KworkClient
|
||||||
|
handler: python
|
||||||
- [Client](api/client.md) — Main client class and API groups
|
options:
|
||||||
- [Models](api/models.md) — Pydantic models for API responses
|
show_root_heading: true
|
||||||
- [Errors](api/errors.md) — Exception classes
|
show_source: true
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
# Client API
|
|
||||||
|
|
||||||
::: kwork_api.client.KworkClient
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
# Errors
|
|
||||||
|
|
||||||
Exception classes for API errors.
|
|
||||||
|
|
||||||
::: kwork_api.errors
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
# Models
|
|
||||||
|
|
||||||
Pydantic models for API responses.
|
|
||||||
|
|
||||||
::: kwork_api.models
|
|
||||||
114
docs/index.md
114
docs/index.md
@ -1,109 +1,47 @@
|
|||||||
# Kwork API — Python Client
|
# Kwork API
|
||||||
|
|
||||||
Unofficial Python client for Kwork.ru API.
|
Unofficial Python client for Kwork.ru API.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Complete async API client (45+ endpoints)
|
||||||
|
- Pydantic models for all responses
|
||||||
|
- Two-step authentication (cookies + web_auth_token)
|
||||||
|
- Comprehensive error handling
|
||||||
|
- HTTP/2 support
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install kwork-api
|
|
||||||
```
|
|
||||||
|
|
||||||
Or with UV:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv add kwork-api
|
uv add kwork-api
|
||||||
|
# or
|
||||||
|
pip install kwork-api
|
||||||
```
|
```
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
### Login with credentials
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from kwork_api import KworkClient
|
from kwork_api import KworkClient
|
||||||
|
|
||||||
# Authenticate
|
# Login with credentials
|
||||||
client = await KworkClient.login("username", "password")
|
|
||||||
|
|
||||||
# Get catalog
|
|
||||||
catalog = await client.catalog.get_list(page=1)
|
|
||||||
|
|
||||||
# Get projects
|
|
||||||
projects = await client.projects.get_list(page=1)
|
|
||||||
|
|
||||||
# Close when done
|
|
||||||
await client.close()
|
|
||||||
```
|
|
||||||
|
|
||||||
### Using context manager
|
|
||||||
|
|
||||||
```python
|
|
||||||
async with await KworkClient.login("username", "password") as client:
|
async with await KworkClient.login("username", "password") as client:
|
||||||
|
# Get catalog
|
||||||
catalog = await client.catalog.get_list(page=1)
|
catalog = await client.catalog.get_list(page=1)
|
||||||
# Client automatically closes
|
|
||||||
|
# Get projects
|
||||||
|
projects = await client.projects.get_list()
|
||||||
|
|
||||||
|
# Get user info
|
||||||
|
user = await client.user.get_info()
|
||||||
```
|
```
|
||||||
|
|
||||||
### Save and restore session
|
## Documentation
|
||||||
|
|
||||||
```python
|
- [Usage Guide](usage.md) — Examples and best practices
|
||||||
# Save credentials after login
|
- [API Reference](api-reference.md) — Complete API documentation
|
||||||
client = await KworkClient.login("username", "password")
|
|
||||||
|
|
||||||
# Option 1: Save token only
|
## Links
|
||||||
token = client.token
|
|
||||||
|
|
||||||
# Option 2: Save full credentials (token + cookies)
|
- [Source Code](https://git.much-data.ru/much-data/kwork-api)
|
||||||
creds = client.credentials
|
- [Issues](https://git.much-data.ru/much-data/kwork-api/issues)
|
||||||
import json
|
- [Gitea Packages](https://git.much-data.ru/much-data/kwork-api/packages)
|
||||||
with open("session.json", "w") as f:
|
|
||||||
json.dump(creds, f)
|
|
||||||
|
|
||||||
# Later, restore session
|
|
||||||
client = KworkClient(token=token)
|
|
||||||
# or
|
|
||||||
client = KworkClient(**creds)
|
|
||||||
|
|
||||||
user_info = await client.user.get_info()
|
|
||||||
```
|
|
||||||
|
|
||||||
## API Overview
|
|
||||||
|
|
||||||
### Catalog API
|
|
||||||
|
|
||||||
- `client.catalog.get_list()` — Get kworks catalog
|
|
||||||
- `client.catalog.get_details(kwork_id)` — Get kwork details
|
|
||||||
|
|
||||||
### Projects API
|
|
||||||
|
|
||||||
- `client.projects.get_list()` — Get freelance projects
|
|
||||||
- `client.projects.get_payer_orders()` — Your orders as customer
|
|
||||||
- `client.projects.get_worker_orders()` — Your orders as performer
|
|
||||||
|
|
||||||
### User API
|
|
||||||
|
|
||||||
- `client.user.get_info()` — Get user profile
|
|
||||||
- `client.user.get_reviews()` — Get user reviews
|
|
||||||
- `client.user.get_favorite_kworks()` — Get favorite kworks
|
|
||||||
|
|
||||||
### Settings & Preferences
|
|
||||||
|
|
||||||
- `client.get_wants()` — User preferences
|
|
||||||
- `client.get_kworks_status()` — Kworks status
|
|
||||||
- `client.update_settings()` — Update settings
|
|
||||||
- `client.go_offline()` — Set offline status
|
|
||||||
|
|
||||||
See [API Reference](api-reference.md) for full documentation.
|
|
||||||
|
|
||||||
## Error Handling
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kwork_api import KworkError, KworkAuthError, KworkApiError
|
|
||||||
|
|
||||||
try:
|
|
||||||
await client.catalog.get_list()
|
|
||||||
except KworkAuthError:
|
|
||||||
print("Invalid credentials")
|
|
||||||
except KworkApiError as e:
|
|
||||||
print(f"API error: {e.status_code}")
|
|
||||||
except KworkError as e:
|
|
||||||
print(f"General error: {e.message}")
|
|
||||||
```
|
|
||||||
|
|||||||
132
docs/usage.md
Normal file
132
docs/usage.md
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
# Usage Guide
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
### Login with credentials
|
||||||
|
|
||||||
|
```python
|
||||||
|
from kwork_api import KworkClient
|
||||||
|
|
||||||
|
async with await KworkClient.login("username", "password") as client:
|
||||||
|
# Your code here
|
||||||
|
pass
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restore session from token
|
||||||
|
|
||||||
|
```python
|
||||||
|
from kwork_api import KworkClient
|
||||||
|
|
||||||
|
# Save token after first login
|
||||||
|
client = await KworkClient.login("username", "password")
|
||||||
|
token = client.token # Save this
|
||||||
|
|
||||||
|
# Later, restore session
|
||||||
|
client = KworkClient(token="saved_token")
|
||||||
|
user = await client.user.get_info()
|
||||||
|
```
|
||||||
|
|
||||||
|
## API Groups
|
||||||
|
|
||||||
|
### Catalog API
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Get catalog list
|
||||||
|
catalog = await client.catalog.get_list(page=1, category_id=1)
|
||||||
|
|
||||||
|
# Get kwork details
|
||||||
|
kwork = await client.catalog.get_details(kwork_id=123)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Projects API (Freelance)
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Get projects list
|
||||||
|
projects = await client.projects.get_list(page=1)
|
||||||
|
|
||||||
|
# Get your orders
|
||||||
|
my_orders = await client.projects.get_payer_orders()
|
||||||
|
```
|
||||||
|
|
||||||
|
### User API
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Get user info
|
||||||
|
user = await client.user.get_info()
|
||||||
|
|
||||||
|
# Get reviews
|
||||||
|
reviews = await client.user.get_reviews(user_id=123)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Reference API
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Get cities
|
||||||
|
cities = await client.reference.get_cities()
|
||||||
|
|
||||||
|
# Get countries
|
||||||
|
countries = await client.reference.get_countries()
|
||||||
|
|
||||||
|
# Get categories
|
||||||
|
categories = await client.reference.get_categories()
|
||||||
|
```
|
||||||
|
|
||||||
|
### Notifications API
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Get notifications
|
||||||
|
notifications = await client.notifications.get_list()
|
||||||
|
|
||||||
|
# Get dialogs
|
||||||
|
dialogs = await client.notifications.get_dialogs()
|
||||||
|
```
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
```python
|
||||||
|
from kwork_api import KworkApiError, KworkAuthError
|
||||||
|
|
||||||
|
try:
|
||||||
|
catalog = await client.catalog.get_list()
|
||||||
|
except KworkAuthError as e:
|
||||||
|
print(f"Authentication failed: {e}")
|
||||||
|
except KworkApiError as e:
|
||||||
|
print(f"API error: {e.status_code} - {e.message}")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
### Rate Limiting
|
||||||
|
|
||||||
|
Kwork doesn't have official rate limits, but be respectful:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
for page in range(1, 11):
|
||||||
|
catalog = await client.catalog.get_list(page=page)
|
||||||
|
await asyncio.sleep(0.5) # 500ms delay
|
||||||
|
```
|
||||||
|
|
||||||
|
### Session Management
|
||||||
|
|
||||||
|
Always use context manager for automatic cleanup:
|
||||||
|
|
||||||
|
```python
|
||||||
|
async with await KworkClient.login("user", "pass") as client:
|
||||||
|
# Client automatically closed
|
||||||
|
pass
|
||||||
|
```
|
||||||
|
|
||||||
|
### Save Token
|
||||||
|
|
||||||
|
Save token after first login to avoid repeated authentication:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# First login
|
||||||
|
client = await KworkClient.login("user", "pass")
|
||||||
|
save_token(client.token) # Save to secure storage
|
||||||
|
|
||||||
|
# Later
|
||||||
|
client = KworkClient(token=load_token())
|
||||||
|
```
|
||||||
16
mkdocs.yml
16
mkdocs.yml
@ -1,9 +1,9 @@
|
|||||||
site_name: Kwork API
|
site_name: Kwork API
|
||||||
site_description: Unofficial Python client for Kwork.ru API
|
site_description: Unofficial Python client for Kwork.ru API
|
||||||
site_url: https://github.com/claw/kwork-api
|
site_url: https://git.much-data.ru/much-data/kwork-api
|
||||||
|
|
||||||
repo_name: claw/kwork-api
|
repo_name: much-data/kwork-api
|
||||||
repo_url: https://github.com/claw/kwork-api
|
repo_url: https://git.much-data.ru/much-data/kwork-api
|
||||||
|
|
||||||
theme:
|
theme:
|
||||||
name: material
|
name: material
|
||||||
@ -58,7 +58,7 @@ markdown_extensions:
|
|||||||
- pymdownx.keys
|
- pymdownx.keys
|
||||||
- pymdownx.magiclink:
|
- pymdownx.magiclink:
|
||||||
repo_url_shorthand: true
|
repo_url_shorthand: true
|
||||||
user: claw
|
user: much-data
|
||||||
repo: kwork-api
|
repo: kwork-api
|
||||||
- pymdownx.mark
|
- pymdownx.mark
|
||||||
- pymdownx.smartsymbols
|
- pymdownx.smartsymbols
|
||||||
@ -71,9 +71,5 @@ markdown_extensions:
|
|||||||
|
|
||||||
nav:
|
nav:
|
||||||
- Home: index.md
|
- Home: index.md
|
||||||
- API Reference:
|
- API Reference: api-reference.md
|
||||||
- Overview: api-reference.md
|
- Usage: usage.md
|
||||||
- Client: api/client.md
|
|
||||||
- Models: api/models.md
|
|
||||||
- Errors: api/errors.md
|
|
||||||
- Examples: examples.md
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user