From 7dd8c520bca4eea33934c5fd58d4b9b0c9b73c53a6f64d96cbcaee0d2cab23b3 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Mon, 27 Jul 2026 02:02:05 -0400 Subject: [PATCH] fix --- build.ipynb | 4 +- main.ipynb | 18 +++- main.py | 16 +++- migrate.ipynb | 85 ++++++++++++++++++ tasks.ipynb | 2 +- templates/competition/card.html | 4 +- templates/components/label.html | 20 +++++ templates/components/profile_nav.html | 4 +- templates/profile/delivery.html | 90 +++++++++++++------ templates/profile/delivery_history.html | 2 +- templates/profile/exhibition.html | 4 +- templates/profile/invitation.html | 2 +- templates/profile/partner/competition.html | 2 +- .../profile/partner/exhibition catalog.html | 6 +- templates/profile/partner/exhibition.html | 8 ++ 15 files changed, 224 insertions(+), 43 deletions(-) create mode 100644 migrate.ipynb create mode 100644 templates/components/label.html diff --git a/build.ipynb b/build.ipynb index 9feda92..a7c468e 100644 --- a/build.ipynb +++ b/build.ipynb @@ -189,7 +189,7 @@ "import json\n", "import os\n", "\n", - "IGNORE = ['build.ipynb', 'data.ipynb']\n", + "IGNORE = ['build.ipynb', 'data.ipynb', 'migrate.ipynb']\n", "def build():\n", " for _filename in [i for i in os.listdir() if 'ipynb' in i and i not in IGNORE]:\n", " filename_without_extension = os.path.splitext(os.path.basename(_filename))[0]\n", @@ -1127,7 +1127,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": ".venv (3.14.6.final.0)", "language": "python", "name": "python3" }, diff --git a/main.ipynb b/main.ipynb index c3a9173..b55f3d2 100644 --- a/main.ipynb +++ b/main.ipynb @@ -608,6 +608,10 @@ " {\"$set\": new_doc},\n", " upsert=True,\n", " ))\n", + " tasks.append(posts_collection.update_one(\n", + " {\"_id\": ObjectId(post_id)},\n", + " {\"$set\": {\"status\": \"На выставке\"}}\n", + " ))\n", "\n", " # NOTE: your original code used `post` from inside the loop (could be last item / even undefined).\n", " # This version notifies once using the first found post user.\n", @@ -3073,7 +3077,7 @@ " \"grade\": safe_strip(grade),\n", " \"city\": safe_strip(city) or current_user.get('living_place'),\n", " \"size\": safe_strip(size),\n", - " \"status\": \"publish\",\n", + " \"status\": \"Опубликована\",\n", " \"material\": safe_strip(material),\n", " \"genre\": safe_strip(genre),\n", " \"price\": safe_strip(price),\n", @@ -4424,12 +4428,14 @@ " ])\n", "\n", " data = [doc async for doc in cursor]\n", + " exhibitions = await exhibition_collection.find({'_id': {'$in': [ObjectId(i.get('exhibition_id')) for i in data if i.get('exhibition_id')]}}).to_list()\n", "\n", " return templates.TemplateResponse(\n", " request=request,\n", " name=\"profile/delivery.html\",\n", " context={\n", " \"user\": user,\n", + " \"exhibitions\": exhibitions,\n", " \"data\": data,\n", " \"page_title\": \"Доставка\",\n", " \"active_section\": \"delivery\"\n", @@ -4559,7 +4565,7 @@ " counts_by_username = {d[\"_id\"]: d[\"count\"] for d in post_counts}\n", "\n", " galerists = [{\"_id\": uname, \"count\": counts_by_username.get(uname, '')} for uname in usernames]\n", - " posts = [doc async for doc in posts_collection.find({}).sort('_id', -1).limit(32)]\n", + " posts = [doc async for doc in posts_collection.find({'status':'Опубликована'}).sort('_id', -1).limit(32)]\n", " return templates.TemplateResponse(\n", " request=request, name=\"profile/partner/exhibition catalog.html\", context={\"now\": datetime.now(), \"user\": user, \"galerists\": galerists, \"genres\": genres, \"living_places\": living_places, \"exhibition\": exhibition, \"posts\": posts}\n", " )" @@ -4581,6 +4587,12 @@ " exhibition = await exhibition_collection.find_one({'_id': ObjectId(exhibition_id)})\n", " obj_ids = [ObjectId(x) for x in exhibition.get('posts', [])]\n", " posts = await posts_collection.find({\"_id\": {\"$in\": obj_ids}}).to_list() if obj_ids else []\n", + " d_posts = await delivery_collection.find({'post_id':{'$in':[str(i.get('_id')) for i in posts]}}).to_list()\n", + " print(d_posts)\n", + " for doc in posts:\n", + " for post in d_posts:\n", + " if str(doc.get('_id')) == post.get('post_id'):\n", + " doc.update({'status':post.get('status')})\n", " return templates.TemplateResponse(\n", " request=request, name=\"profile/partner/exhibition.html\", context={\"now\": datetime.now(), \"user\": user, \"exhibition\": exhibition, \"posts\": posts}\n", " )\n", @@ -4709,7 +4721,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": ".venv (3.14.6.final.0)", "language": "python", "name": "python3" }, diff --git a/main.py b/main.py index 5a2b45c..6c0616b 100644 --- a/main.py +++ b/main.py @@ -412,6 +412,10 @@ async def cron_every_five_min(token: str = Security(get_token)): {"$set": new_doc}, upsert=True, )) + tasks.append(posts_collection.update_one( + {"_id": ObjectId(post_id)}, + {"$set": {"status": "На выставке"}} + )) # NOTE: your original code used `post` from inside the loop (could be last item / even undefined). # This version notifies once using the first found post user. @@ -2327,7 +2331,7 @@ async def post_painting( "grade": safe_strip(grade), "city": safe_strip(city) or current_user.get('living_place'), "size": safe_strip(size), - "status": "publish", + "status": "Опубликована", "material": safe_strip(material), "genre": safe_strip(genre), "price": safe_strip(price), @@ -3439,12 +3443,14 @@ async def profile_delivery( ]) data = [doc async for doc in cursor] + exhibitions = await exhibition_collection.find({'_id': {'$in': [ObjectId(i.get('exhibition_id')) for i in data if i.get('exhibition_id')]}}).to_list() return templates.TemplateResponse( request=request, name="profile/delivery.html", context={ "user": user, + "exhibitions": exhibitions, "data": data, "page_title": "Доставка", "active_section": "delivery" @@ -3552,7 +3558,7 @@ async def profile_partner_exhibitions_catalog( counts_by_username = {d["_id"]: d["count"] for d in post_counts} galerists = [{"_id": uname, "count": counts_by_username.get(uname, '')} for uname in usernames] - posts = [doc async for doc in posts_collection.find({}).sort('_id', -1).limit(32)] + posts = [doc async for doc in posts_collection.find({'status':'Опубликована'}).sort('_id', -1).limit(32)] return templates.TemplateResponse( request=request, name="profile/partner/exhibition catalog.html", context={"now": datetime.now(), "user": user, "galerists": galerists, "genres": genres, "living_places": living_places, "exhibition": exhibition, "posts": posts} ) @@ -3566,6 +3572,12 @@ async def profile_partner_exhibitions( exhibition = await exhibition_collection.find_one({'_id': ObjectId(exhibition_id)}) obj_ids = [ObjectId(x) for x in exhibition.get('posts', [])] posts = await posts_collection.find({"_id": {"$in": obj_ids}}).to_list() if obj_ids else [] + d_posts = await delivery_collection.find({'post_id':{'$in':[str(i.get('_id')) for i in posts]}}).to_list() + print(d_posts) + for doc in posts: + for post in d_posts: + if str(doc.get('_id')) == post.get('post_id'): + doc.update({'status':post.get('status')}) return templates.TemplateResponse( request=request, name="profile/partner/exhibition.html", context={"now": datetime.now(), "user": user, "exhibition": exhibition, "posts": posts} ) diff --git a/migrate.ipynb b/migrate.ipynb new file mode 100644 index 0000000..9984be8 --- /dev/null +++ b/migrate.ipynb @@ -0,0 +1,85 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "90b31bac", + "metadata": {}, + "outputs": [], + "source": [ + "# ignore\n", + "import os\n", + "\n", + "def load_env(file_path):\n", + " \"\"\"Загружает переменные окружения из файла .env с поддержкой булевых значений.\"\"\"\n", + " with open(file_path) as f:\n", + " for line in f:\n", + " line = line.strip()\n", + " if not line or line.startswith('#'):\n", + " continue\n", + " \n", + " try:\n", + " key, value = line.split('=', 1)\n", + " key = key.strip()\n", + " value = value.strip('\"\\' ')\n", + " # Преобразование строковых значений в булевые\n", + " if value.lower() in ['true', '1', 'yes']:\n", + " value = True\n", + " elif value.lower() in ['false', '0', 'no']:\n", + " value = False\n", + " \n", + " # Проверка, что ключ не пустой\n", + " if key:\n", + " os.environ[key] = str(value) # Храним как строку\n", + " except ValueError:\n", + " print(f\"Ошибка: неверный формат в строке '{line}'\")\n", + "\n", + "try:\n", + " load_env('env')\n", + "except:\n", + " load_env('env_example')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3f5835c", + "metadata": {}, + "outputs": [], + "source": [ + "from db import *" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d80807dd", + "metadata": {}, + "outputs": [], + "source": [ + "await posts_collection.update_many({'status':'publish'},{'$set':{'status':'Опубликована'}})" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv (3.14.6.final.0)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.14.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tasks.ipynb b/tasks.ipynb index 69b04ce..f8b048d 100644 --- a/tasks.ipynb +++ b/tasks.ipynb @@ -918,7 +918,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": ".venv (3.14.6.final.0)", "language": "python", "name": "python3" }, diff --git a/templates/competition/card.html b/templates/competition/card.html index 2b76de4..ea1a935 100644 --- a/templates/competition/card.html +++ b/templates/competition/card.html @@ -60,7 +60,7 @@ {% if profile %} -