From 6fec980ac4351a431fa9faa36f6a950f914878b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20=C3=96zdemir?= Date: Tue, 13 Feb 2024 15:11:59 -0500 Subject: [PATCH] pydantic fixes and tweaks --- requirements.in | 4 +++- src/__init__.py | 3 +-- src/events.py | 2 +- src/message_validations.py | 32 ++++++++++++++++---------------- src/packages.py | 7 +++++-- tests/all_tests.py | 34 ++++++++++++++++++++++++++++++++-- 6 files changed, 58 insertions(+), 24 deletions(-) diff --git a/requirements.in b/requirements.in index 4b27e48..40cea55 100644 --- a/requirements.in +++ b/requirements.in @@ -1,5 +1,6 @@ black pytest +pytest-asyncio asyncio sqlmodel sqlalchemy @@ -9,4 +10,5 @@ uvicorn pydantic typing httpx -datetime \ No newline at end of file +datetime +yfinance \ No newline at end of file diff --git a/src/__init__.py b/src/__init__.py index 0141c73..b8dc0ae 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -55,8 +55,7 @@ "src.listener:app", host="0.0.0.0", port=PORT, - reload=True, - log_level="info", + reload=False, ) else: print("Fail, closing the app.") diff --git a/src/events.py b/src/events.py index 25329dd..74725e7 100644 --- a/src/events.py +++ b/src/events.py @@ -154,7 +154,7 @@ async def create_response_message( if len(words) == 2: if words[0] == "package:": fn_id = int(words[1]) - text = await (Packages.functions[fn_id]()) + text = await Packages.functions[fn_id]() elif words[0] == "message_id:": message_id = int(words[1]) diff --git a/src/message_validations.py b/src/message_validations.py index 8ff43ed..672015b 100644 --- a/src/message_validations.py +++ b/src/message_validations.py @@ -15,9 +15,9 @@ class From(BaseModel): last_name: Optional[str] id: Optional[int] first_name: Optional[str] - user_name: Optional[str] + user_name: Optional[str] = None language_code: Optional[str] - is_bot: Optional[str] + is_bot: Optional[bool] = None class ReplyMessage(BaseModel): @@ -38,18 +38,18 @@ class NewChatMember(BaseModel): class Message(BaseModel): date: Optional[int] chat: Optional[Chat] - message_id: Optional[str] + message_id: Optional[int] from_field: Optional[From] = Field(alias="from") - forward_date: Optional[int] + forward_date: Optional[int] = None text: Optional[str] - photo: Optional[List[File]] - document: Optional[File] - video: Optional[File] - video_note: Optional[File] - voice: Optional[File] - new_chat_member: Optional[NewChatMember] - left_chat_member: Optional[NewChatMember] - group_chat_created: Optional[bool] + photo: Optional[List[File]] = None + document: Optional[File] = None + video: Optional[File] = None + video_note: Optional[File] = None + voice: Optional[File] = None + new_chat_member: Optional[NewChatMember] = None + left_chat_member: Optional[NewChatMember] = None + group_chat_created: Optional[bool] = None class ChatGroup(BaseModel): @@ -79,8 +79,8 @@ class MyChatMember(BaseModel): class MessageBodyModel(BaseModel): update_id: Optional[int] message: Optional[Message] - my_chat_member: Optional[MyChatMember] - reply_to_message: Optional[ReplyMessage] + my_chat_member: Optional[MyChatMember] = None + reply_to_message: Optional[ReplyMessage] = None class ResponseToMessage(BaseModel): @@ -89,7 +89,7 @@ class ResponseToMessage(BaseModel): from_chat_id: Optional[int] message_id: Optional[int] text: Optional[str] - photo: Optional[str] - document: Optional[str] + photo: Optional[str] = None + document: Optional[str] = None parse_mode: Optional[str] = "Markdown" disable_notification: Optional[bool] diff --git a/src/packages.py b/src/packages.py index 5e7f6b3..1284b2d 100644 --- a/src/packages.py +++ b/src/packages.py @@ -1,4 +1,5 @@ from httpx import AsyncClient +import yfinance as yf class Packages: @@ -17,7 +18,10 @@ async def get_tr_stocks() -> str: USDTRY = round(USDTRY, 2) USD_DEGISIM = float(js["USD"]["degisim"]) USD_DEGISIM = round(USD_DEGISIM, 2) - XU100 = (float(js["XU100"]["satis"]) + float(js["XU100"]["alis"])) / 2 + XU100 = ( + float(js["XU100"]["satis"].replace(".", "").replace(",", ".")) + + float(js["XU100"]["alis"].replace(".", "").replace(",", ".")) + ) / 2 XU100 = round(XU100, 2) XU100_DEGISIM = float(js["XU100"]["degisim"]) XU100_DEGISIM = round(XU100_DEGISIM, 2) @@ -55,7 +59,6 @@ async def get_tr_stocks() -> str: @staticmethod async def get_yahoo_tr_stocks() -> str: - import yfinance as yf key_list = { "USDTRY": "TRY=X", diff --git a/tests/all_tests.py b/tests/all_tests.py index f4626de..1a57e24 100644 --- a/tests/all_tests.py +++ b/tests/all_tests.py @@ -1,12 +1,12 @@ import pytest from fastapi.testclient import TestClient -from sqlmodel import Session, SQLModel, create_engine, select from sqlmodel.pool import StaticPool -from src.listener import app, User, UserCreate, get_session +from src.listener import app from src.events import Events from src.db import * +from src.message_validations import MessageBodyModel pytest_plugins = ("pytest_asyncio",) @@ -183,3 +183,33 @@ def test_print_help_message(): print() print(Constants.Help.help_message(name, language_code)) + + +def test_validate(client): + req = { + "update_id": 677224863, + "message": { + "message_id": 28583, + "from": { + "id": 861126057, + "is_bot": False, + "first_name": "Ömer Faruk", + "last_name": "Özdemir", + "username": "omerXfaruq", + "language_code": "en", + }, + "chat": { + "id": 861126057, + "first_name": "Ömer Faruk", + "last_name": "Özdemir", + "username": "omerXfaruq", + "type": "private", + }, + "date": 1707848171, + "text": "/help", + "entities": [{"offset": 0, "length": 7, "type": "bot_command"}], + }, + } + message = MessageBodyModel(**req) + resp = client.post(f"/webhook/{Events.TOKEN}", json=req) + print(resp)