Обновлен Python до версии 3.11.9 и изменены зависимости в Dockerfile и pyproject.toml. Удалены устаревшие файлы RATE_LIMITING_SOLUTION.md и тесты для rate limiting.
Обновлены пути к библиотекам в Dockerfile для соответствия новой версии Python. Исправлены все тесты, теперь все проходят
This commit is contained in:
172
.cursor/rules/dependencies-and-utils.md
Normal file
172
.cursor/rules/dependencies-and-utils.md
Normal file
@@ -0,0 +1,172 @@
|
||||
---
|
||||
description: "Работа с зависимостями, утилитами, метриками и внешними сервисами"
|
||||
globs: ["helper_bot/utils/**/*.py", "helper_bot/config/**/*.py"]
|
||||
---
|
||||
|
||||
# Зависимости и утилиты
|
||||
|
||||
## BaseDependencyFactory
|
||||
|
||||
Центральный класс для управления зависимостями проекта.
|
||||
|
||||
### Использование
|
||||
|
||||
```python
|
||||
from helper_bot.utils.base_dependency_factory import get_global_instance
|
||||
|
||||
# Получение глобального экземпляра
|
||||
bdf = get_global_instance()
|
||||
|
||||
# Доступ к зависимостям
|
||||
db = bdf.get_db() # AsyncBotDB
|
||||
settings = bdf.get_settings() # dict с настройками
|
||||
s3_storage = bdf.get_s3_storage() # S3StorageService или None
|
||||
```
|
||||
|
||||
### Структура settings
|
||||
|
||||
Настройки загружаются из `.env` и структурированы:
|
||||
|
||||
```python
|
||||
settings = {
|
||||
'Telegram': {
|
||||
'bot_token': str,
|
||||
'listen_bot_token': str,
|
||||
'preview_link': bool,
|
||||
'main_public': str,
|
||||
'group_for_posts': int,
|
||||
'important_logs': int,
|
||||
...
|
||||
},
|
||||
'Settings': {
|
||||
'logs': bool,
|
||||
'test': bool
|
||||
},
|
||||
'Metrics': {
|
||||
'host': str,
|
||||
'port': int
|
||||
},
|
||||
'S3': {
|
||||
'enabled': bool,
|
||||
'endpoint_url': str,
|
||||
'access_key': str,
|
||||
'secret_key': str,
|
||||
'bucket_name': str,
|
||||
'region': str
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Метрики
|
||||
|
||||
### Декораторы метрик
|
||||
|
||||
Используйте декораторы из `helper_bot.utils.metrics`:
|
||||
|
||||
```python
|
||||
from helper_bot.utils.metrics import track_time, track_errors, db_query_time
|
||||
|
||||
@track_time("method_name", "module_name")
|
||||
@track_errors("module_name", "method_name")
|
||||
async def some_method():
|
||||
"""Метод с отслеживанием времени и ошибок."""
|
||||
...
|
||||
|
||||
@db_query_time("method_name", "table_name", "operation")
|
||||
async def db_method():
|
||||
"""Метод БД с отслеживанием времени запросов."""
|
||||
...
|
||||
```
|
||||
|
||||
### Доступ к метрикам
|
||||
|
||||
```python
|
||||
from helper_bot.utils.metrics import metrics
|
||||
|
||||
# Метрики доступны через Prometheus на порту из settings['Metrics']['port']
|
||||
```
|
||||
|
||||
## Rate Limiting
|
||||
|
||||
### RateLimiter
|
||||
|
||||
Используется для ограничения частоты запросов:
|
||||
|
||||
```python
|
||||
from helper_bot.utils.rate_limiter import RateLimiter
|
||||
|
||||
limiter = RateLimiter(...)
|
||||
if await limiter.is_allowed(user_id):
|
||||
# Разрешить действие
|
||||
...
|
||||
else:
|
||||
# Отклонить действие
|
||||
...
|
||||
```
|
||||
|
||||
### RateLimitMiddleware
|
||||
|
||||
Автоматически применяет rate limiting ко всем запросам через middleware.
|
||||
|
||||
## S3 Storage
|
||||
|
||||
### S3StorageService
|
||||
|
||||
Используется для хранения медиафайлов:
|
||||
|
||||
```python
|
||||
from helper_bot.utils.s3_storage import S3StorageService
|
||||
|
||||
# Получение через BaseDependencyFactory
|
||||
s3_storage = bdf.get_s3_storage()
|
||||
|
||||
if s3_storage:
|
||||
# Загрузка файла
|
||||
url = await s3_storage.upload_file(file_path, object_key)
|
||||
|
||||
# Удаление файла
|
||||
await s3_storage.delete_file(object_key)
|
||||
```
|
||||
|
||||
### Проверка доступности
|
||||
|
||||
Всегда проверяйте, что S3 включен:
|
||||
|
||||
```python
|
||||
s3_storage = bdf.get_s3_storage()
|
||||
if s3_storage:
|
||||
# Работа с S3
|
||||
...
|
||||
else:
|
||||
# Fallback логика
|
||||
...
|
||||
```
|
||||
|
||||
## Утилиты
|
||||
|
||||
### helper_func.py
|
||||
|
||||
Содержит вспомогательные функции для работы с:
|
||||
- Датами и временем
|
||||
- Форматированием данных
|
||||
- Валидацией
|
||||
- Преобразованием данных
|
||||
|
||||
Используйте эти функции вместо дублирования логики.
|
||||
|
||||
## Конфигурация
|
||||
|
||||
### rate_limit_config.py
|
||||
|
||||
Конфигурация rate limiting находится в `helper_bot/config/rate_limit_config.py`.
|
||||
|
||||
Используйте конфигурацию вместо хардкода значений.
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Всегда получайте зависимости через BaseDependencyFactory** - не создавайте экземпляры напрямую
|
||||
2. **Используйте декораторы метрик** для всех важных методов
|
||||
3. **Проверяйте доступность внешних сервисов** (S3) перед использованием
|
||||
4. **Используйте утилиты** из `helper_func.py` вместо дублирования кода
|
||||
5. **Читайте настройки из settings** вместо хардкода значений
|
||||
6. **Логируйте важные операции** с внешними сервисами
|
||||
Reference in New Issue
Block a user