add fix
This commit is contained in:
parent
f481f36574
commit
5b52f55a1a
75
telegram-application/poetry.lock
generated
75
telegram-application/poetry.lock
generated
@ -270,6 +270,21 @@ files = [
|
||||
{file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "click"
|
||||
version = "8.1.8"
|
||||
description = "Composable command line interface toolkit"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
|
||||
{file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
@ -326,6 +341,27 @@ files = [
|
||||
anyio = ">=3.0.0,<5.0.0"
|
||||
pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<3.0.0"
|
||||
|
||||
[[package]]
|
||||
name = "fastapi"
|
||||
version = "0.115.12"
|
||||
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"},
|
||||
{file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0"
|
||||
starlette = ">=0.40.0,<0.47.0"
|
||||
typing-extensions = ">=4.8.0"
|
||||
|
||||
[package.extras]
|
||||
all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
||||
standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "faststream"
|
||||
version = "0.5.34"
|
||||
@ -1476,6 +1512,24 @@ postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"]
|
||||
pymysql = ["pymysql"]
|
||||
sqlcipher = ["sqlcipher3_binary"]
|
||||
|
||||
[[package]]
|
||||
name = "starlette"
|
||||
version = "0.46.2"
|
||||
description = "The little ASGI library that shines."
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35"},
|
||||
{file = "starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
anyio = ">=3.6.2,<5"
|
||||
|
||||
[package.extras]
|
||||
full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"]
|
||||
|
||||
[[package]]
|
||||
name = "tgcrypto"
|
||||
version = "1.2.5"
|
||||
@ -1606,6 +1660,25 @@ h2 = ["h2 (>=4,<5)"]
|
||||
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
|
||||
zstd = ["zstandard (>=0.18.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "uvicorn"
|
||||
version = "0.34.2"
|
||||
description = "The lightning-fast ASGI server."
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "uvicorn-0.34.2-py3-none-any.whl", hash = "sha256:deb49af569084536d269fe0a6d67e3754f104cf03aba7c11c40f01aadf33c403"},
|
||||
{file = "uvicorn-0.34.2.tar.gz", hash = "sha256:0e929828f6186353a80b58ea719861d2629d766293b6d19baf086ba31d4f3328"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
click = ">=7.0"
|
||||
h11 = ">=0.8"
|
||||
|
||||
[package.extras]
|
||||
standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
|
||||
|
||||
[[package]]
|
||||
name = "yarl"
|
||||
version = "1.18.3"
|
||||
@ -1706,4 +1779,4 @@ propcache = ">=0.2.0"
|
||||
[metadata]
|
||||
lock-version = "2.1"
|
||||
python-versions = ">=3.11, <4.0"
|
||||
content-hash = "65b93102052fc6bdc2add0c17d35a9b9d32f43265ea51509de7ef1dc24bd1123"
|
||||
content-hash = "5bab4bdc2e631ffb0f11392a8a17d57db510005d49e23d7b3366138c79f1838d"
|
||||
|
@ -19,7 +19,9 @@ dependencies = [
|
||||
"faststream[rabbitmq] (>=0.5.34,<0.6.0)",
|
||||
"asyncpg (>=0.30.0,<0.31.0)",
|
||||
"aio-pika (>=9.5.4,<10.0.0)",
|
||||
"pyrogram (>=2.0.106,<3.0.0)"
|
||||
"pyrogram (>=2.0.106,<3.0.0)",
|
||||
"fastapi (>=0.115.12,<0.116.0)",
|
||||
"uvicorn (>=0.34.2,<0.35.0)"
|
||||
]
|
||||
|
||||
|
||||
|
@ -1,11 +1,15 @@
|
||||
from asyncio import FastChildWatcher
|
||||
from fastapi import FastAPI
|
||||
|
||||
from faststream.rabbit import RabbitBroker, RabbitExchange, ExchangeType, QueueType, RabbitQueue
|
||||
|
||||
from faststream.rabbit.fastapi import RabbitRouter, Logger
|
||||
from src.core.settings.base import settings
|
||||
|
||||
rabbitmq_router = RabbitRouter(
|
||||
url=settings.RABBIT.URL,
|
||||
)
|
||||
|
||||
broker = RabbitBroker(
|
||||
url=settings.RABBIT.URL
|
||||
url=settings.RABBIT.URL,
|
||||
)
|
||||
|
||||
|
||||
@ -34,8 +38,8 @@ success_gemini_subscriber = broker.subscriber(
|
||||
)
|
||||
|
||||
|
||||
|
||||
async def init_queue_and_publisher():
|
||||
@rabbitmq_router.after_startup
|
||||
async def init_queue_and_publisher(app: FastAPI):
|
||||
await broker.declare_exchange(base_exchange)
|
||||
await broker.declare_queue(base_queue)
|
||||
await broker.declare_queue(success_queue)
|
||||
|
@ -1,27 +1,51 @@
|
||||
from contextlib import asynccontextmanager
|
||||
from fastapi import FastAPI
|
||||
from pyrogram import Client, filters, idle
|
||||
from pyrogram.handlers import MessageHandler
|
||||
|
||||
from src.core.settings.base import settings
|
||||
from src.core.tg_service.messages_handler import message_listener
|
||||
from src.core.rabbitmq.connect import broker, init_queue_and_publisher
|
||||
from src.core.rabbitmq.connect import broker, init_queue_and_publisher, rabbitmq_router
|
||||
import uvicorn
|
||||
import asyncio
|
||||
|
||||
|
||||
app = Client(
|
||||
# Инициализация Pyrogram клиента
|
||||
tg_client = Client(
|
||||
name=settings.ACCOUNT.NAME,
|
||||
api_id=settings.ACCOUNT.API_ID,
|
||||
api_hash=settings.ACCOUNT.API_HASH,
|
||||
)
|
||||
|
||||
app.add_handler(MessageHandler(
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
await tg_client.start()
|
||||
await broker.start()
|
||||
await init_queue_and_publisher(app)
|
||||
await idle()
|
||||
|
||||
yield
|
||||
|
||||
await tg_client.stop()
|
||||
await broker.close()
|
||||
|
||||
|
||||
# Создание FastAPI приложения с кастомным lifespan
|
||||
fastapi_app = FastAPI(lifespan=lifespan)
|
||||
fastapi_app.include_router(rabbitmq_router)
|
||||
|
||||
# Добавление обработчика для Telegram
|
||||
tg_client.add_handler(MessageHandler(
|
||||
callback=message_listener,
|
||||
filters=filters.all
|
||||
))
|
||||
|
||||
async def main():
|
||||
await app.start()
|
||||
await broker.start()
|
||||
await init_queue_and_publisher()
|
||||
await idle()
|
||||
await app.stop()
|
||||
|
||||
app.run(main())
|
||||
if __name__ == "__main__":
|
||||
# Запуск FastAPI и Pyrogram в одном event loop
|
||||
config = uvicorn.Config(
|
||||
fastapi_app,
|
||||
host="0.0.0.0",
|
||||
port=8000,
|
||||
loop="asyncio"
|
||||
)
|
||||
server = uvicorn.Server(config)
|
||||
asyncio.run(server.serve())
|
Loading…
x
Reference in New Issue
Block a user