From 4c2c5a3ceba3f17224e06060e565b904d46472cd06b48bd0254b94b5e883c313 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Tue, 28 Jul 2026 10:51:39 -0400 Subject: [PATCH] fix --- main.ipynb | 385 ++++++++++++++------- main.py | 13 +- migrate.ipynb | 11 +- templates/form/exhibition.html | 3 +- templates/profile/partner/competition.html | 2 +- templates/profile/partner/exhibition.html | 5 +- 6 files changed, 272 insertions(+), 147 deletions(-) diff --git a/main.ipynb b/main.ipynb index b55f3d2..7ded608 100644 --- a/main.ipynb +++ b/main.ipynb @@ -46,7 +46,8 @@ " load_env('env')\n", "except:\n", " load_env('env_example')" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -106,7 +107,8 @@ "\n", "logging.basicConfig(level=logging.INFO)\n", "logger = logging.getLogger(__name__)" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -136,7 +138,8 @@ ")\n", "app.include_router(delivery_router)\n", "app.include_router(vk.router, prefix='/api/v1/social', tags=[\"Auth\"])" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -167,7 +170,8 @@ "\n", "def transliterate(text: str) -> str:\n", " return ''.join(RUS_TO_LAT.get(ch, '' if ch not in string.ascii_letters else ch) for ch in text)\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -185,7 +189,8 @@ " doc[\"published_at\"] = published.isoformat()\n", " docs.append(doc)\n", " return docs\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -240,7 +245,8 @@ " {'_id': ObjectId(user.get('_id'))},\n", " {'$set': {'img': str(new_id), 'original_img': str(original_img_id)}}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -270,7 +276,8 @@ " 'poster_file_id': new_id\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -300,7 +307,8 @@ " 'poster_file_id': new_id\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -340,7 +348,8 @@ " 'medias': new_ids\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -377,7 +386,8 @@ " 'medias': new_ids\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -414,7 +424,8 @@ " 'media': new_ids\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -441,7 +452,8 @@ " return str(file_id)\n", " finally:\n", " await upload.close()\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -457,7 +469,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/posts.html\", context={ \"user\": user, 'cards': data}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -476,7 +489,8 @@ " {\"$set\": {\"status\": 2}},\n", " )\n", " return {}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -486,7 +500,8 @@ "outputs": [], "source": [ "# await notify_collection.delete_many({'title':'Доставка картины'})" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -496,7 +511,8 @@ "outputs": [], "source": [ "# await notify_collection.update_many({'title':'Доставка картины'},{'$set':{'type':'delivery'}})" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -522,7 +538,8 @@ "# ))\n", "# print(notify)\n", "# await delivery_collection.update_one({'_id': existing.get('_id')},{'$set':{'notify': notify.upserted_id}})" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -641,7 +658,8 @@ " if exhibition_to_start.get(\"vk\") == [] or exhibition_to_start.get(\"tg\") == []:\n", " await service_social_exhibition(bson_clear(exhibition_to_start))\n", " return {}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -655,7 +673,8 @@ "# {\"prod\": True, \"datetime_start\": {\"$lt\": datetime.now(timezone.utc) + timedelta(hours=3)}},\n", "# {\"$set\": {\"status\": 1}}, return_document=False)\n", "# await service_social_exhibition(exhibition)\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -791,7 +810,8 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -874,7 +894,8 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -909,7 +930,8 @@ " max_age=int(refresh_exp_delta.total_seconds())\n", " )\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1015,7 +1037,8 @@ " next_url = '/'\n", "\n", " return RedirectResponse(next_url,headers=response.headers)\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1130,7 +1153,8 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1198,7 +1222,8 @@ " max_age=int(refresh_exp_delta.total_seconds())\n", " )\n", " return {'ok': True}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1295,7 +1320,8 @@ " \"token_type\": \"bearer\",\n", " \"refresh_token\": new_refresh\n", " }" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1332,7 +1358,8 @@ " )\n", "\n", " return {\"message\": \"Logged out from all sessions\"}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1356,7 +1383,8 @@ " max_age=int(refresh_exp.total_seconds())\n", " )\n", " return bson_clear(user)\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1380,7 +1408,8 @@ " raise HTTPException(status_code=500, detail=f\"Redis is unhealthy: {str(e)}\")\n", "\n", " return {}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1397,7 +1426,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"registration.html\", context={'next': next}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1439,7 +1469,8 @@ " results.append(doc)\n", " \n", " return results\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1481,7 +1512,8 @@ "\n", " cursor = competition_request_col.aggregate(pipeline)\n", " return await cursor.to_list(length=None)" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1535,7 +1567,8 @@ "# cursor = posts_collection.find({\"_id\": {\"$in\": posts_ids}})\n", "# return await cursor.to_list(length=None)\n", "\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1567,7 +1600,8 @@ " cursor = competition_request_col.aggregate(pipeline)\n", " unique_posts = await cursor.to_list(length=None) # Fetch all unique posts\n", " return [unique_post[\"post\"] for unique_post in unique_posts] if unique_posts else []\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1590,7 +1624,8 @@ " )\n", " else:\n", " raise HTTPException(status_code=307, headers={\"Location\": '/competitions'}, detail=\"Конкурс не найден\")" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1614,7 +1649,8 @@ " )\n", " else:\n", " raise HTTPException(status_code=307, headers={\"Location\": '/competitions'}, detail=\"Конкурс не найден\")" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1644,7 +1680,8 @@ " raise HTTPException(status_code=307, headers={\"Location\": f'/competition/{competition._id}'}, detail=\"Участник не найден\")\n", " else:\n", " raise HTTPException(status_code=307, headers={\"Location\": '/competitions'}, detail=\"Конкурс не найден\")" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1674,7 +1711,8 @@ " },{'fb':0,'inst':0,'max':0,'tg':0,'vk':0}).sort('_id',-1).limit(32):\n", " competitions.append(bson_clear(doc))\n", " return competitions" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1703,7 +1741,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"exhibitions.html\", context={\"id\": 1, \"user\": user, \"exhibitions\": exhibitions}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1733,7 +1772,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"competitions.html\", context={\"id\": 1, \"user\": user, \"competitions\": competitions}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1841,7 +1881,8 @@ "\n", "\n", "app.include_router(router, tags=['Restore passwrod'])" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1866,7 +1907,8 @@ " name=\"login.html\",\n", " context=context,\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1880,7 +1922,8 @@ " response: Response,user: Dict = Security(get_current_user)):\n", " await users_collection.update_one({'_id':ObjectId(user.get('_id'))},{'$set':{'profile':'' if user.get('profile',False) else 'partner'}})\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1899,7 +1942,8 @@ " {'$set': {'description': data.description}}\n", " )\n", " return {'ok': True}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1921,7 +1965,8 @@ " for i in exhibition.get('vk',[]):\n", " vk.delete_wall.delay(i.get('response',{}).get('post_id'), i.get('doc'))\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1943,7 +1988,8 @@ " for i in competition.get('vk',[]):\n", " vk.delete_wall.delay(i.get('response',{}).get('post_id'), i.get('doc'))\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1962,7 +2008,8 @@ " {'$set': {'status': 2}},\n", " )\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1981,7 +2028,8 @@ " {'$set': {'status': 1}},\n", " )\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2019,7 +2067,8 @@ " return {'ok': True}\n", " else:\n", " return {'ok': False}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2100,7 +2149,8 @@ "\n", "\n", " return {'ok': True}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2121,7 +2171,8 @@ " coros = [_update_post_description(p) for p in posts]\n", " if coros:\n", " await asyncio.gather(*coros)" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2216,7 +2267,8 @@ " response[\"message\"] = f\"Исключено {excluded_count} уже использованных постов\"\n", "\n", " return response" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2234,7 +2286,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/news.html\", context={ \"user\": user, 'news': news}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2251,7 +2304,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/form.html\", context={ \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2267,7 +2321,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/partner/competitions.html\", context={ \"user\": user, 'cards': data}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2284,7 +2339,8 @@ " await users_collection.update_one({'_id':ObjectId(user.get('_id'))},{'$set':{'profile':'partner'}})\n", " user['profile'] = 'partner'\n", " return await competitions(user,request)" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2330,7 +2386,8 @@ " for post in posts:\n", " post['competition'] = oid\n", " return posts\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2369,7 +2426,8 @@ " results.append(doc)\n", " \n", " return results\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2395,7 +2453,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/partner/competition.html\", context={ \"user\": user, \"competition\": competition, 'posts': posts, \"members\": members}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2426,7 +2485,8 @@ " request=request, name=\"profile/partner/competition_member.html\", context={ \"user\": user, \"social_vk\":social_vk, \"competition\": competition, 'posts': posts, \"member\": member}\n", " )\n", " " - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2454,7 +2514,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/competition.html\", context={ \"user\": user, 'competitions': competitions}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2497,7 +2558,8 @@ " # return templates.TemplateResponse(\n", " # request=request, name=\"profile/form.html\", context={ \"user\": user, 'notify':{'text':'В начале заполните анкету под звездочками','status':'error','duration':8000}}\n", " # )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2562,7 +2624,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/exhibition.html\", context={\"user\": user, \"data\": data, \"now\": datetime.now()}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2585,7 +2648,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"about.html\", context={\"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2600,7 +2664,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"news.html\", context={\"user\": user, \"news\": news}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2629,7 +2694,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"index.html\", context={\"user\": user, \"news\": news, 'pwa':True}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2647,7 +2713,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"partner/galerist.html\", context={\"id\": 1, \"user\": user, \"partner\": partner}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2664,7 +2731,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"partner/index.html\", context={\"id\": 1, \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2682,7 +2750,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"users/index.html\", context={\"id\": 1, \"user\":user, \"users\": users}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2719,7 +2788,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"users/user.html\", context={\"id\": 1, \"user\":user, \"find\": find, \"cards\": cards,\"total_watch_count\": total_watch_count,\"today_watch_count\": today_watch_count,}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2756,7 +2826,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"users/user.html\", context={\"id\": 1, \"user\":user, \"find\": find, \"cards\": cards,\"total_watch_count\": total_watch_count,\"today_watch_count\": today_watch_count,}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2773,7 +2844,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/competition.html\", context={\"id\": 1, \"user\": user}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2793,7 +2865,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/competition_edit.html\", context={\"competition\": str(data), \"user\": user}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2819,7 +2892,8 @@ " return templates.TemplateResponse(\n", " request=requset, name='news/index.html', context={\"user\":user, \"news\": news}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2851,7 +2925,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/post_edit.html\", context={\"post\": data, \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2879,7 +2954,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/news_edit.html\", context={\"news\": news, \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2896,7 +2972,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/exhibition.html\", context={\"id\": 1, \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2918,7 +2995,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/exhibition_edit.html\", context={\"id\": 1, \"user\": user, \"exhibition\": str(data)}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2941,7 +3019,8 @@ " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n", "\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2976,7 +3055,8 @@ " raise\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3029,7 +3109,8 @@ " if not doc:\n", " raise HTTPException(status_code=404, detail=\"Картина не найдена\")\n", " return RedirectResponse(url=f\"/paintings/{doc.get('_id')}\", status_code=301)" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3045,7 +3126,8 @@ "):\n", " await posts_collection.delete_one({'_id': ObjectId(post_id), 'user._id': current_user.get('_id')})\n", " return {'ok': True} \n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3077,7 +3159,7 @@ " \"grade\": safe_strip(grade),\n", " \"city\": safe_strip(city) or current_user.get('living_place'),\n", " \"size\": safe_strip(size),\n", - " \"status\": \"Опубликована\",\n", + " \"status\": \"В каталоге\",\n", " \"material\": safe_strip(material),\n", " \"genre\": safe_strip(genre),\n", " \"price\": safe_strip(price),\n", @@ -3105,7 +3187,8 @@ " except Exception as e:\n", " print(e)\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3175,7 +3258,8 @@ " background_tasks.add_task(update_social_post, doc_out)\n", " background_tasks.add_task(replace_new_medias, bson_clear(doc_out), links_media)\n", " return doc_out\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3194,7 +3278,8 @@ " return {'post_medias': post_medias}\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3236,7 +3321,8 @@ " return doc_out\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3284,7 +3370,8 @@ " }\n", " doc_out = bson_clear(doc_out)\n", " return doc_out\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3303,7 +3390,8 @@ " return {'media': media}\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3318,7 +3406,8 @@ "):\n", " await notify_collection.update_many({'user_id':user.get('_id')},{'$set':{'read':False}})\n", " return {}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3380,7 +3469,8 @@ " except Exception as exc:\n", " logging.error(str(exc))\n", " raise HTTPException(status_code=500, detail=str(exc))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3440,7 +3530,8 @@ " except Exception as exc:\n", " logging.error(str(exc))\n", " raise HTTPException(status_code=500, detail=str(exc))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3510,7 +3601,8 @@ " except Exception as exc:\n", " logging.error(str(exc))\n", " raise HTTPException(status_code=500, detail=str(exc))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3532,7 +3624,8 @@ " },{'vk': 0,'max': 0,'tg': 0,'fb': 0,'inst': 0}).sort('_id',-1).limit(1000):\n", " exhibitions.append(bson_clear(doc))\n", " return exhibitions" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3584,17 +3677,18 @@ " }\n", " \n", " res = await exhibition_collection.insert_one(doc)\n", - " \n", + " exhibition_id = res.inserted_id\n", " background_tasks.add_task(\n", " poster_exhibition, \n", - " bson_clear({**doc, '_id': res.inserted_id})\n", + " bson_clear({**doc, '_id': exhibition_id})\n", " )\n", " \n", - " return {'ok': True}\n", + " return {'_id': str(exhibition_id)}\n", " except Exception as e:\n", " logging.error(str(e))\n", " raise HTTPException(status_code=500, detail=str(e))" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3667,11 +3761,12 @@ " {'$set': update_doc}\n", " )\n", "\n", - " return {'ok': True}\n", + " return {'_id': exhibition_id}\n", " except Exception as e:\n", " logging.error(str(e))\n", " raise HTTPException(status_code=500, detail=str(e))" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3780,7 +3875,8 @@ " if file_length is not None:\n", " headers[\"Content-Length\"] = str(file_length)\n", " return StreamingResponse(iterator(), media_type=content_type, headers=headers)\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3843,7 +3939,8 @@ " \n", " \n", " \"\"\"\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3863,7 +3960,8 @@ " 'users': users \n", " }\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3979,7 +4077,8 @@ " \"all_city\": len(await users_collection.distinct(\"living_place\", filter={ 'roles': \"user\" }))\n", " }\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3995,7 +4094,8 @@ " if item:\n", " update_spec = {\"$push\": {\"tg\": result}}\n", " await mongo_client[item.get('db')][item.get('col')].update_one({'_id': ObjectId(item.get('_id'))}, update_spec)" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4013,7 +4113,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/social.html\", context={\"user\": user, 'socials': socials}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4033,7 +4134,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/invitation.html\", context={ \"user\": user, \"doc\": data}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4052,7 +4154,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/invitations.html\", context={ \"user\": user, \"data\": data, \"now\": datetime.now()}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4070,7 +4173,8 @@ "):\n", " await social_collection.update_one({'_id': ObjectId(id), 'user_id': user.get('_id')},{'$set': {key:check}})\n", " return {'ok': True}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4096,7 +4200,8 @@ "\n", " data = [doc async for doc in cursor]\n", " return data[0] if data else False" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4136,7 +4241,8 @@ " today_watch_count = await redis_client.incr(daily_key)\n", " return {\"totalViews\":total_watch_count,\"todayViews\":today_watch_count}\n", " return {\"totalViews\":0,\"todayViews\":0}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4227,7 +4333,8 @@ " 'last_page': post_count / per_page,\n", " 'per_page': per_page\n", " }" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4245,7 +4352,8 @@ " return {\"statistics\":await users_collection.count_documents({ 'roles': \"user\" }),\"additional_stats\":len(await users_collection.distinct(\"living_place\", filter={ 'roles': \"user\" }))}\n", " else:\n", " return {\"statistics\":await posts_collection.count_documents({}),\"additional_stats\":await users_collection.count_documents({ 'roles': \"user\" })}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4272,7 +4380,8 @@ " user.pop('phone')\n", " user.pop('email')\n", " return {'data':bson_clear(user)}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4297,7 +4406,8 @@ " post['name'] = post['title']\n", " post['media'] = photos\n", " return bson_clear(post)" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -4326,7 +4436,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/invitation/competition.html\", context={ \"user\": user, \"competition\": competition, \"req\": req}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4346,7 +4457,8 @@ "\n", " await accept_invitations(invitations_id, posts_ids)\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4370,7 +4482,8 @@ " \"data\": data,\n", " }\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4441,7 +4554,8 @@ " \"active_section\": \"delivery\"\n", " }\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4459,7 +4573,8 @@ " background_tasks.add_task(exhibition_send_invitations, exhibition_id)\n", " logging.info(f\"send exh inv {exhibition_id}\")\n", " return {\"ok\": True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4494,7 +4609,8 @@ " ]\n", " )\n", " return {\"ok\": True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4565,11 +4681,12 @@ " 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({'status':'Опубликована'}).sort('_id', -1).limit(32)]\n", + " posts = [doc async for doc in posts_collection.find().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", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4588,7 +4705,6 @@ " 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", @@ -4607,7 +4723,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/partner/exhibitions.html\", context={\"now\": datetime.now(), \"user\": user, \"data\": data}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -4646,7 +4763,8 @@ "\n", " with open(f'{filename_without_extension}.py', 'w') as f:\n", " f.write('\\n\\n'.join(app))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4660,7 +4778,8 @@ "outputs": [], "source": [ "!uvicorn main:app --host 0.0.0.0 --port 8005 --reload" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4671,7 +4790,8 @@ "source": [ "import uvicorn\n", "uvicorn.run('main:app', host='0.0.0.0', port=8005, reload=True)\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -4693,7 +4813,8 @@ "outputs": [], "source": [ "!pip freeze > req.txt" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4704,7 +4825,8 @@ "source": [ "import sys\n", "sys.executable" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4716,7 +4838,8 @@ "import sys\n", "sys.executable\n", "!{sys.executable} -m pip install -r requirements-api.txt" - ] + ], + "display_name": ".venv" } ], "metadata": { diff --git a/main.py b/main.py index 6c0616b..258c342 100644 --- a/main.py +++ b/main.py @@ -2331,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": "Опубликована", + "status": "В каталоге", "material": safe_strip(material), "genre": safe_strip(genre), "price": safe_strip(price), @@ -2760,13 +2760,13 @@ async def post_exhibition( } res = await exhibition_collection.insert_one(doc) - + exhibition_id = res.inserted_id background_tasks.add_task( poster_exhibition, - bson_clear({**doc, '_id': res.inserted_id}) + bson_clear({**doc, '_id': exhibition_id}) ) - return {'ok': True} + return {'_id': str(exhibition_id)} except Exception as e: logging.error(str(e)) raise HTTPException(status_code=500, detail=str(e)) @@ -2835,7 +2835,7 @@ async def put_exhibition( {'$set': update_doc} ) - return {'ok': True} + return {'_id': exhibition_id} except Exception as e: logging.error(str(e)) raise HTTPException(status_code=500, detail=str(e)) @@ -3558,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({'status':'Опубликована'}).sort('_id', -1).limit(32)] + posts = [doc async for doc in posts_collection.find().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} ) @@ -3573,7 +3573,6 @@ async def profile_partner_exhibitions( 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'): diff --git a/migrate.ipynb b/migrate.ipynb index 9984be8..6cf8d3f 100644 --- a/migrate.ipynb +++ b/migrate.ipynb @@ -38,7 +38,8 @@ " load_env('env')\n", "except:\n", " load_env('env_example')" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -48,7 +49,8 @@ "outputs": [], "source": [ "from db import *" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -57,8 +59,9 @@ "metadata": {}, "outputs": [], "source": [ - "await posts_collection.update_many({'status':'publish'},{'$set':{'status':'Опубликована'}})" - ] + "await posts_collection.update_many({'status':'publish'},{'$set':{'status':'В каталоге'}})" + ], + "display_name": ".venv" } ], "metadata": { diff --git a/templates/form/exhibition.html b/templates/form/exhibition.html index e119584..6cb9ef1 100644 --- a/templates/form/exhibition.html +++ b/templates/form/exhibition.html @@ -513,7 +513,8 @@ function bindLinkValidation({ const res = await fetch('/api/exhibition', { method: 'POST', body: formData }); if (res.ok) { - window.location.href = '/profile/partner/exhibitions'; + const { _id } = await res.json(); + window.location.href = `/profile/partner/exhibition/${_id}/catalog#main`; } else { const allFields = document.querySelectorAll('.floating-group'); allFields.forEach(g => g.classList.add('error')); diff --git a/templates/profile/partner/competition.html b/templates/profile/partner/competition.html index a53f4e7..924d3a7 100644 --- a/templates/profile/partner/competition.html +++ b/templates/profile/partner/competition.html @@ -233,7 +233,7 @@ document.querySelectorAll('.b_k2cle button').forEach(button => { if (this.textContent.trim() == this.dataset.status){ parent.querySelectorAll('button').forEach(btn => { - btn.dataset.status = 'Опубликована'; + btn.dataset.status = 'В каталоге'; if (btn !== this) btn.classList.remove('hidden'); }); } else { diff --git a/templates/profile/partner/exhibition.html b/templates/profile/partner/exhibition.html index 96fa2db..83086f3 100644 --- a/templates/profile/partner/exhibition.html +++ b/templates/profile/partner/exhibition.html @@ -69,7 +69,7 @@

{{post.title}}

- {% if post.status=='Опубликована' %} + {% if post.status=='В каталоге' %}
{{post.status}}
{% else %}
{{post.status}}
@@ -97,7 +97,6 @@