mirror of
https://github.com/Balshgit/gpt_chat_bot.git
synced 2025-09-10 17:20:41 +03:00
minor improvements (#82)
* update README.md * add test for existing models * db datetime to python datetime * replace(tzinfo=None) in tests
This commit is contained in:
parent
28d01f551b
commit
bba21b4925
@ -38,8 +38,8 @@ python main.py
|
|||||||
```
|
```
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
cd bot_microservice
|
cd bot_microservice &&
|
||||||
poetry run uvicorn main:create_app --factory --host 0.0.0.0 --port 8080 --forwarded-allow-ips='*' --proxy-headers --reload --workers 2 --log-level warning
|
poetry run uvicorn main:create_app --factory --host 0.0.0.0 --port 8080 --forwarded-allow-ips='*' --proxy-headers --reload --workers 2 --log-level warning
|
||||||
```
|
```
|
||||||
|
|
||||||
To start on polling mode set `START_WITH_WEBHOOK` to blank
|
To start on polling mode set `START_WITH_WEBHOOK` to blank
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from sqlalchemy import func, select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.dialects.sqlite import insert
|
from sqlalchemy.dialects.sqlite import insert
|
||||||
from sqlalchemy.orm import load_only
|
from sqlalchemy.orm import load_only
|
||||||
|
|
||||||
|
from constants import MOSCOW_TZ
|
||||||
from core.auth.dto import UserIsBannedDTO
|
from core.auth.dto import UserIsBannedDTO
|
||||||
from core.auth.models.users import AccessToken, User, UserQuestionCount
|
from core.auth.models.users import AccessToken, User, UserQuestionCount
|
||||||
from infra.database.db_adapter import Database
|
from infra.database.db_adapter import Database
|
||||||
@ -70,7 +72,9 @@ class UserRepository:
|
|||||||
UserQuestionCount.question_count.key
|
UserQuestionCount.question_count.key
|
||||||
): UserQuestionCount.question_count
|
): UserQuestionCount.question_count
|
||||||
+ 1,
|
+ 1,
|
||||||
UserQuestionCount.get_real_column_name(UserQuestionCount.last_question_at.key): func.now(),
|
UserQuestionCount.get_real_column_name(UserQuestionCount.last_question_at.key): datetime.now(
|
||||||
|
tz=MOSCOW_TZ
|
||||||
|
),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -11,7 +11,7 @@ from httpx import AsyncClient, Response
|
|||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
|
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
|
||||||
|
|
||||||
from constants import BotStagesEnum
|
from constants import MOSCOW_TZ, BotStagesEnum
|
||||||
from core.auth.models.users import User, UserQuestionCount
|
from core.auth.models.users import User, UserQuestionCount
|
||||||
from core.bot.app import BotApplication, BotQueue
|
from core.bot.app import BotApplication, BotQueue
|
||||||
from main import Application
|
from main import Application
|
||||||
@ -415,9 +415,9 @@ async def test_ask_question_action_bot_user_not_exists(
|
|||||||
|
|
||||||
created_user_question_count = dbsession.query(UserQuestionCount).filter_by(user_id=user["id"]).one()
|
created_user_question_count = dbsession.query(UserQuestionCount).filter_by(user_id=user["id"]).one()
|
||||||
assert created_user_question_count.question_count == 1
|
assert created_user_question_count.question_count == 1
|
||||||
assert created_user_question_count.last_question_at - datetime.datetime.now() < datetime.timedelta( # noqa: DTZ005
|
assert created_user_question_count.last_question_at.replace(tzinfo=None) - datetime.datetime.now(
|
||||||
seconds=2
|
tz=MOSCOW_TZ
|
||||||
)
|
).replace(tzinfo=None) < datetime.timedelta(seconds=2)
|
||||||
|
|
||||||
|
|
||||||
async def test_ask_question_action_bot_user_already_exists(
|
async def test_ask_question_action_bot_user_already_exists(
|
||||||
@ -470,9 +470,9 @@ async def test_ask_question_action_bot_user_already_exists(
|
|||||||
|
|
||||||
updated_user_question_count = dbsession.query(UserQuestionCount).filter_by(user_id=user["id"]).one()
|
updated_user_question_count = dbsession.query(UserQuestionCount).filter_by(user_id=user["id"]).one()
|
||||||
assert updated_user_question_count.question_count == existing_user_question_count + 1
|
assert updated_user_question_count.question_count == existing_user_question_count + 1
|
||||||
assert updated_user_question_count.last_question_at - datetime.datetime.now() < datetime.timedelta( # noqa: DTZ005
|
assert updated_user_question_count.last_question_at.replace(tzinfo=None) - datetime.datetime.now(
|
||||||
seconds=2
|
tz=MOSCOW_TZ
|
||||||
)
|
).replace(tzinfo=None) < datetime.timedelta(seconds=2)
|
||||||
|
|
||||||
|
|
||||||
async def test_ask_question_action_user_is_banned(
|
async def test_ask_question_action_user_is_banned(
|
||||||
|
@ -4,6 +4,7 @@ from sqlalchemy.orm import Session
|
|||||||
from constants import ChatGptModelsEnum
|
from constants import ChatGptModelsEnum
|
||||||
from core.bot.models.chatgpt import ChatGptModels
|
from core.bot.models.chatgpt import ChatGptModels
|
||||||
from core.bot.services import ChatGptService
|
from core.bot.services import ChatGptService
|
||||||
|
from tests.integration.factories.bot import ChatGptModelFactory
|
||||||
|
|
||||||
pytestmark = [
|
pytestmark = [
|
||||||
pytest.mark.asyncio,
|
pytest.mark.asyncio,
|
||||||
@ -11,7 +12,7 @@ pytestmark = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
async def test_models_update(dbsession: Session) -> None:
|
async def test_models_creation(dbsession: Session) -> None:
|
||||||
models = dbsession.query(ChatGptModels).all()
|
models = dbsession.query(ChatGptModels).all()
|
||||||
|
|
||||||
assert len(models) == 0
|
assert len(models) == 0
|
||||||
@ -28,3 +29,19 @@ async def test_models_update(dbsession: Session) -> None:
|
|||||||
|
|
||||||
for model_priority in ChatGptModelsEnum.base_models_priority():
|
for model_priority in ChatGptModelsEnum.base_models_priority():
|
||||||
assert model_priorities[model_priority["model"]] == model_priority["priority"]
|
assert model_priorities[model_priority["model"]] == model_priority["priority"]
|
||||||
|
|
||||||
|
|
||||||
|
async def test_update_existing_models(dbsession: Session) -> None:
|
||||||
|
ChatGptModelFactory.create_batch(size=3)
|
||||||
|
|
||||||
|
chatgpt_service = ChatGptService.build()
|
||||||
|
|
||||||
|
await chatgpt_service.update_chatgpt_models()
|
||||||
|
|
||||||
|
models = dbsession.query(ChatGptModels).all()
|
||||||
|
|
||||||
|
model_priorities = {model.model: model.priority for model in models}
|
||||||
|
assert len(models) == len(ChatGptModelsEnum.base_models_priority())
|
||||||
|
|
||||||
|
for model_priority in ChatGptModelsEnum.base_models_priority():
|
||||||
|
assert model_priorities.get(model_priority["model"]) == model_priority["priority"]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user