From f72102e7b111e0d028cc567aeabe88d7fe63d242e58a1d3202a6ebfaeeb11eed Mon Sep 17 00:00:00 2001 From: Vladislav Date: Sun, 19 Jul 2026 22:01:29 -0400 Subject: [PATCH] fix --- config.py | 6 +++- db.py | 11 +++--- email_task.ipynb | 9 +++-- email_task.py | 8 ++--- main.ipynb | 5 +-- main.py | 5 +-- templates/competition/edit.html | 2 +- templates/posts/edit.html | 63 +++++++++++++++------------------ vk.ipynb | 14 ++++---- vk.py | 8 +++-- 10 files changed, 69 insertions(+), 62 deletions(-) diff --git a/config.py b/config.py index f6451f5..b33fc00 100644 --- a/config.py +++ b/config.py @@ -11,7 +11,9 @@ PROD = os.getenv("PROD", "True").lower() != "false" ATOKEN = os.getenv("ATOKEN") MONGO_PASSWORD = os.getenv("MONGO_INITDB_ROOT_PASSWORD") MONGODB_HOST = os.getenv("MONGODB_SERVICE_HOST") +MONGO_PORT = os.getenv("MONGODB_SERVICE_PORT", 27017) REDIS_HOST = os.getenv("REDIS_SERVICE_HOST") +REDIS_PORT = os.getenv("REDIS_SERVICE_PORT", 6379) FROM_NAME = "Avtopost Kultmost" BOT_TOKEN = os.getenv("BOT_TOKEN") FULL_DOMAIN = os.getenv("FULL_PATH_DOMAIN") @@ -28,7 +30,9 @@ REFRESH_TOKEN_EXPIRE_DAYS = 170 TOKEN_TTL_DAYS = 7 ACCESS_COOKIE = "access_token" REFRESH_COOKIE = "refresh_token" -RABBITMQ_HOST = "rabbit.spiritofweb.ru:31023" +RABBITMQ_USER = os.getenv("RABBITMQ_USER", 'admin') +RABBITMQ_HOST = os.getenv("RABBITMQ_HOST") +RABBITMQ_PORT = os.getenv("RABBITMQ_PORT", 5671) EMAIL_SUBJECT = 'Культмост' PROTECTED_FIELDS_USER = {"_id", "img", 'original_img', "hashed_password", "password", "roles"} VK_CLIENT_ID = os.getenv("VK_CLIENT_ID") diff --git a/db.py b/db.py index 000aecc..854d572 100644 --- a/db.py +++ b/db.py @@ -2,7 +2,7 @@ import os from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorGridFSBucket import redis.asyncio as redis import asyncio -from config import PROD, MONGO_PASSWORD, MONGODB_HOST, REDIS_HOST +from config import * # Create a new event loop for asyncio loop = asyncio.new_event_loop() @@ -13,7 +13,6 @@ if not all([MONGO_PASSWORD, MONGODB_HOST, REDIS_HOST]): raise EnvironmentError("Missing required environment variables for MongoDB/Redis") # ========================= DATABASE URI ========================= -MONGO_PORT = 27017 if PROD else 30002 mongo_uri = f"mongodb://admin:{MONGO_PASSWORD}@{MONGODB_HOST}:{MONGO_PORT}/" # ========================= MONGO CLIENT ========================= @@ -51,8 +50,6 @@ gridfs_map = { # ========================= REDIS CLIENT ========================= -REDIS_PORT = 6379 if PROD else 30003 - redis_client = redis.Redis( host=REDIS_HOST, port=REDIS_PORT, @@ -60,13 +57,17 @@ redis_client = redis.Redis( decode_responses=True ) +redis_uri = f'redis://{REDIS_HOST}:{REDIS_PORT}/' +rabbit_mq_uri = f'amqps://{RABBITMQ_USER}:{RABBITMQ_PASS}@{RABBITMQ_HOST}:{RABBITMQ_PORT}/' + # Exporting collections and clients __all__ = [ "competitions_col", "competition_request_col", "users_collection", "users_token_collection", "notify_collection", "social_collection", "posts_collection", "news_collection", - "gridfs_map", "redis_client", + "gridfs_map", "redis_client", "redis_uri" "mongo_client", "invitations_collection", "delivery_collection", "exhibition_collection", + "rabbit_mq_uri" ] diff --git a/email_task.ipynb b/email_task.ipynb index 2d124ce..457b2bc 100644 --- a/email_task.ipynb +++ b/email_task.ipynb @@ -52,6 +52,7 @@ "from email.mime.text import MIMEText\n", "from celery import Celery\n", "from config import *\n", + "from db import *\n", "from templates import templates\n", "import logging\n", "from typing import Optional\n", @@ -95,7 +96,7 @@ " \n", " msg.attach(MIMEText(html_content, 'html'))\n", " \n", - " return msg" + " return msg\n" ] }, { @@ -111,7 +112,6 @@ " return server\n", "\n", "\n", - "\n", "def send_email(\n", " to_email: str,\n", " html_content: str,\n", @@ -125,7 +125,6 @@ " user_id=user_id,\n", " ))\n", "\n", - "\n", " try:\n", " with connect(EMAIL_SMTP_SERVER, EMAIL_SMTP_PORT) as server:\n", " server.login(FROM_EMAIL, EMAIL_PASS)\n", @@ -150,7 +149,7 @@ "metadata": {}, "outputs": [], "source": [ - "celery_app_email = Celery('emails', broker=f'amqps://admin:{RABBITMQ_PASS}@{RABBITMQ_HOST}/email', backend=f'redis://{REDIS_HOST}:{6379 if PROD else 30003}/0', task_track_started=True )\n" + "celery_app_email = Celery('emails', broker=f'{redis_uri}2', backend=f'{redis_uri}2', task_track_started=True)\n" ] }, { @@ -189,7 +188,7 @@ " logging.warning(\n", " f\"Ошибка при отправке email на {to_email} (попытка {self.request.retries + 1}): {exc}\"\n", " )\n", - " raise self.retry(exc=exc)" + " raise self.retry(exc=exc)\n" ] }, { diff --git a/email_task.py b/email_task.py index 5cfe161..e4d3c92 100644 --- a/email_task.py +++ b/email_task.py @@ -35,6 +35,7 @@ from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from celery import Celery from config import * +from db import * from templates import templates import logging from typing import Optional @@ -73,13 +74,13 @@ async def create_email_message( return msg + def connect(email_server, email_port): server = smtplib.SMTP(email_server, email_port) server.starttls(context=ctx) return server - def send_email( to_email: str, html_content: str, @@ -93,7 +94,6 @@ def send_email( user_id=user_id, )) - try: with connect(EMAIL_SMTP_SERVER, EMAIL_SMTP_PORT) as server: server.login(FROM_EMAIL, EMAIL_PASS) @@ -111,7 +111,7 @@ def send_email( return False -celery_app_email = Celery('emails', broker=f'amqps://admin:{RABBITMQ_PASS}@{RABBITMQ_HOST}/email', backend=f'redis://{REDIS_HOST}:{6379 if PROD else 30003}/0', task_track_started=True ) +celery_app_email = Celery('emails', broker=f'{redis_uri}2', backend=f'{redis_uri}2', task_track_started=True) @celery_app_email.task( @@ -143,4 +143,4 @@ def notify(self, to_email: str, data: dict, subject: str = EMAIL_SUBJECT, templa logging.warning( f"Ошибка при отправке email на {to_email} (попытка {self.request.retries + 1}): {exc}" ) - raise self.retry(exc=exc) \ No newline at end of file + raise self.retry(exc=exc) diff --git a/main.ipynb b/main.ipynb index 8a42df2..962826f 100644 --- a/main.ipynb +++ b/main.ipynb @@ -2759,8 +2759,9 @@ " user: Dict = Security(get_current_user)\n", "):\n", " post = await posts_collection.find_one({'_id':ObjectId(post_id)})\n", + " data = json.dumps(post, cls=MongoJSONEncoder, ensure_ascii=False)\n", " return templates.TemplateResponse(\n", - " request=request, name=\"form/post_edit.html\", context={\"post\": post, \"user\": user}\n", + " request=request, name=\"form/post_edit.html\", context={\"post\": data, \"user\": user}\n", " )" ] }, @@ -3076,7 +3077,7 @@ " \n", "\n", " background_tasks.add_task(update_social_post, doc_out)\n", - " background_tasks.add_task(replace_new_medias, bson_clear(res), links_media)\n", + " background_tasks.add_task(replace_new_medias, bson_clear(doc_out), links_media)\n", " return doc_out\n", "\n", "\n", diff --git a/main.py b/main.py index 0cde495..4c2f986 100644 --- a/main.py +++ b/main.py @@ -2072,8 +2072,9 @@ async def form_post_edit( user: Dict = Security(get_current_user) ): post = await posts_collection.find_one({'_id':ObjectId(post_id)}) + data = json.dumps(post, cls=MongoJSONEncoder, ensure_ascii=False) return templates.TemplateResponse( - request=request, name="form/post_edit.html", context={"post": post, "user": user} + request=request, name="form/post_edit.html", context={"post": data, "user": user} ) @app.get("/form/news", response_class=HTMLResponse) @@ -2335,7 +2336,7 @@ async def put_painting( background_tasks.add_task(update_social_post, doc_out) - background_tasks.add_task(replace_new_medias, bson_clear(res), links_media) + background_tasks.add_task(replace_new_medias, bson_clear(doc_out), links_media) return doc_out diff --git a/templates/competition/edit.html b/templates/competition/edit.html index 631c40e..4f9c8db 100644 --- a/templates/competition/edit.html +++ b/templates/competition/edit.html @@ -343,7 +343,7 @@ function bindLinkValidation({ -
- - - -