From dd5f79c73da4d9516fd4c64307c2c2632ea809bb498626ec607aeaeff8a17830 Mon Sep 17 00:00:00 2001 From: vladislav Date: Tue, 1 Sep 2026 04:20:20 -0400 Subject: [PATCH] fix --- main.ipynb | 385 +++++++++++++++++++++++++++++++++++------------------ main.py | 16 +-- 2 files changed, 262 insertions(+), 139 deletions(-) diff --git a/main.ipynb b/main.ipynb index f6e5935..5a687df 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", @@ -107,7 +108,8 @@ "\n", "logging.basicConfig(level=logging.INFO)\n", "logger = logging.getLogger(__name__)" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -137,7 +139,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", @@ -168,7 +171,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", @@ -186,7 +190,8 @@ " doc[\"published_at\"] = published.isoformat()\n", " docs.append(doc)\n", " return docs\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -241,7 +246,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", @@ -271,7 +277,8 @@ " 'poster_file_id': new_id\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -301,7 +308,8 @@ " 'poster_file_id': new_id\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -341,7 +349,8 @@ " 'medias': new_ids\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -378,7 +387,8 @@ " 'medias': new_ids\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -415,7 +425,8 @@ " 'media': new_ids\n", " }}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -442,7 +453,8 @@ " return str(file_id)\n", " finally:\n", " await upload.close()\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -458,7 +470,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/posts.html\", context={ \"user\": user, 'cards': data}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -477,7 +490,8 @@ " {\"$set\": {\"status\": 2}},\n", " )\n", " return {}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -487,7 +501,8 @@ "outputs": [], "source": [ "# await notify_collection.delete_many({'title':'Доставка картины'})" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -497,7 +512,8 @@ "outputs": [], "source": [ "# await notify_collection.update_many({'title':'Доставка картины'},{'$set':{'type':'delivery'}})" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -523,7 +539,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", @@ -642,7 +659,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", @@ -656,7 +674,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", @@ -792,7 +811,8 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -875,7 +895,8 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -910,7 +931,8 @@ " max_age=int(refresh_exp_delta.total_seconds())\n", " )\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1016,7 +1038,8 @@ " next_url = '/'\n", "\n", " return RedirectResponse(next_url,headers=response.headers)\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1137,7 +1160,8 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1205,7 +1229,8 @@ " max_age=int(refresh_exp_delta.total_seconds())\n", " )\n", " return {'ok': True}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1302,7 +1327,8 @@ " \"token_type\": \"bearer\",\n", " \"refresh_token\": new_refresh\n", " }" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1339,7 +1365,8 @@ " )\n", "\n", " return {\"message\": \"Logged out from all sessions\"}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1352,7 +1379,8 @@ "async def get_me(response: Response, current_user: Dict = Security(get_current_user, scopes=[\"read:self\"])):\n", " user = display_user(current_user)\n", " return bson_clear(user)\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1376,7 +1404,8 @@ " raise HTTPException(status_code=500, detail=f\"Redis is unhealthy: {str(e)}\")\n", "\n", " return {}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1393,7 +1422,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"registration.html\", context={'next': next}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1435,7 +1465,8 @@ " results.append(doc)\n", " \n", " return results\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1477,7 +1508,8 @@ "\n", " cursor = competition_request_col.aggregate(pipeline)\n", " return await cursor.to_list(length=None)" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1531,7 +1563,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", @@ -1563,7 +1596,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", @@ -1586,7 +1620,8 @@ " )\n", " else:\n", " raise HTTPException(status_code=307, headers={\"Location\": '/competitions'}, detail=\"Конкурс не найден\")" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1610,7 +1645,8 @@ " )\n", " else:\n", " raise HTTPException(status_code=307, headers={\"Location\": '/competitions'}, detail=\"Конкурс не найден\")" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1640,7 +1676,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", @@ -1670,7 +1707,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", @@ -1699,7 +1737,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"exhibitions.html\", context={\"id\": 1, \"user\": user, \"exhibitions\": exhibitions}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1729,7 +1768,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"competitions.html\", context={\"id\": 1, \"user\": user, \"competitions\": competitions}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1870,7 +1910,8 @@ "\n", "\n", "app.include_router(router, tags=['Восстановление пароля'])" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1895,7 +1936,8 @@ " name=\"login.html\",\n", " context=context,\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1909,7 +1951,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", @@ -1928,7 +1971,8 @@ " {'$set': {'description': data.description}}\n", " )\n", " return {'ok': True}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -1950,7 +1994,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", @@ -1972,7 +2017,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", @@ -1991,7 +2037,8 @@ " {'$set': {'status': 2}},\n", " )\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2010,7 +2057,8 @@ " {'$set': {'status': 1}},\n", " )\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2056,7 +2104,8 @@ " return {'ok': True}\n", " else:\n", " return {'ok': False}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2137,7 +2186,8 @@ "\n", "\n", " return {'ok': True}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2158,7 +2208,8 @@ " coros = [_update_post_description(p) for p in posts]\n", " if coros:\n", " await asyncio.gather(*coros)" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2253,7 +2304,8 @@ " response[\"message\"] = f\"Исключено {excluded_count} уже использованных постов\"\n", "\n", " return response" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2271,7 +2323,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/news.html\", context={ \"user\": user, 'news': news}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2288,7 +2341,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/form.html\", context={ \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2304,7 +2358,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/partner/competitions.html\", context={ \"user\": user, 'cards': data}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2321,7 +2376,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", @@ -2367,7 +2423,8 @@ " for post in posts:\n", " post['competition'] = oid\n", " return posts\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2406,7 +2463,8 @@ " results.append(doc)\n", " \n", " return results\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2432,7 +2490,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", @@ -2463,7 +2522,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", @@ -2491,7 +2551,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/competition.html\", context={ \"user\": user, 'competitions': competitions}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2534,7 +2595,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", @@ -2599,7 +2661,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", @@ -2622,7 +2685,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"about.html\", context={\"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2637,7 +2701,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"news.html\", context={\"user\": user, \"news\": news}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2666,7 +2731,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"index.html\", context={\"user\": user, \"news\": news, 'pwa':True}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2684,7 +2750,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", @@ -2701,7 +2768,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"partner/index.html\", context={\"id\": 1, \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2719,7 +2787,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"users/index.html\", context={\"id\": 1, \"user\":user, \"users\": users}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2756,7 +2825,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", @@ -2793,7 +2863,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", @@ -2810,7 +2881,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/competition.html\", context={\"id\": 1, \"user\": user}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2830,7 +2902,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/competition_edit.html\", context={\"competition\": str(data), \"competition_id\": competition_id, \"user\": user}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2856,7 +2929,8 @@ " return templates.TemplateResponse(\n", " request=requset, name='news/index.html', context={\"user\":user, \"news\": news}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2888,7 +2962,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/post_edit.html\", context={\"post\": data, \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2916,7 +2991,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/news_edit.html\", context={\"news\": news, \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2933,7 +3009,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/exhibition.html\", context={\"id\": 1, \"user\": user}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -2953,7 +3030,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", @@ -2976,7 +3054,8 @@ " return {'ok': True}\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3011,7 +3090,8 @@ " raise\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3064,7 +3144,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", @@ -3080,7 +3161,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", @@ -3140,7 +3222,8 @@ " except Exception as e:\n", " print(e)\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3210,7 +3293,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", @@ -3311,7 +3395,8 @@ " return {\"post_medias\": post_medias}\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3353,7 +3438,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", @@ -3401,7 +3487,8 @@ " }\n", " doc_out = bson_clear(doc_out)\n", " return doc_out\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3420,7 +3507,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", @@ -3435,7 +3523,8 @@ "):\n", " await notify_collection.update_many({'user_id':user.get('_id')},{'$set':{'read':False}})\n", " return {}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3497,7 +3586,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", @@ -3557,7 +3647,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", @@ -3627,7 +3718,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", @@ -3649,7 +3741,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", @@ -3711,7 +3804,8 @@ " except Exception as e:\n", " logging.error(str(e))\n", " raise HTTPException(status_code=500, detail=str(e))" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3788,7 +3882,8 @@ " except Exception as e:\n", " logging.error(str(e))\n", " raise HTTPException(status_code=500, detail=str(e))" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3897,7 +3992,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", @@ -3960,7 +4056,8 @@ " \n", " \n", " \"\"\"\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -3980,7 +4077,8 @@ " 'users': users \n", " }\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4096,7 +4194,8 @@ " \"all_city\": len(await users_collection.distinct(\"living_place\", filter={ 'roles': \"user\" }))\n", " }\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4112,7 +4211,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", @@ -4130,7 +4230,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/social.html\", context={\"user\": user, 'socials': socials}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4173,7 +4274,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/invitation.html\", context={ \"user\": user, \"doc\": data, \"data\": posts}\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4192,7 +4294,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", @@ -4210,7 +4313,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", @@ -4236,7 +4340,8 @@ "\n", " data = [doc async for doc in cursor]\n", " return data[0] if data else False" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4276,7 +4381,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", @@ -4309,8 +4415,8 @@ " field = 'user.username'\n", " if field == 'name':\n", " field = 'title'\n", - " if op == \"like\":\n", - " return {field: {\"$regex\": value, \"$options\": \"i\"}}\n", + " # if op == \"like\":\n", + " # return {field: {\"$regex\": value, \"$options\": \"i\"}}\n", " return {field: value}\n", " mongo_query = mql_to_mongo(mql)\n", " for post in [doc async for doc in posts_collection.find(mongo_query).sort({\"_id\":-1}).limit(per_page * page + 8)][per_page * page - per_page:per_page * page]:\n", @@ -4367,7 +4473,8 @@ " 'last_page': post_count / per_page,\n", " 'per_page': per_page\n", " }" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4385,7 +4492,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", @@ -4412,7 +4520,8 @@ " user.pop('phone')\n", " user.pop('email')\n", " return {'data':bson_clear(user)}" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4437,7 +4546,8 @@ " post['name'] = post['title']\n", " post['media'] = photos\n", " return bson_clear(post)" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -4466,7 +4576,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", @@ -4486,7 +4597,8 @@ "\n", " await accept_invitations(invitations_id, posts_ids)\n", " return {'ok': True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4510,7 +4622,8 @@ " \"data\": data,\n", " }\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4551,7 +4664,8 @@ "# \"data\": data,\n", "# }\n", "# )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4591,7 +4705,8 @@ " \"data\": data,\n", " }\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4632,7 +4747,8 @@ " \"data\": data,\n", " }\n", " )" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4705,7 +4821,8 @@ " \"active_section\": \"delivery\"\n", " }\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4723,7 +4840,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", @@ -4758,7 +4876,8 @@ " ]\n", " )\n", " return {\"ok\": True}\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4832,7 +4951,8 @@ " 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", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4869,7 +4989,8 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/partner/exhibitions.html\", context={\"now\": datetime.now(), \"user\": user, \"data\": data}\n", " )\n" - ] + ], + "display_name": ".venv" }, { "cell_type": "markdown", @@ -4908,7 +5029,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", @@ -4922,7 +5044,8 @@ "outputs": [], "source": [ "!uvicorn main:app --host 0.0.0.0 --port 8005 --reload" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4933,7 +5056,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", @@ -4955,7 +5079,8 @@ "outputs": [], "source": [ "!pip freeze > req.txt" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4966,7 +5091,8 @@ "source": [ "import sys\n", "sys.executable" - ] + ], + "display_name": ".venv" }, { "cell_type": "code", @@ -4978,7 +5104,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 0c3d59f..025d6b8 100644 --- a/main.py +++ b/main.py @@ -1350,11 +1350,7 @@ async def restore_api( ]}) if not user: - # Безопасность: всегда возвращать одинаковое время ответа/структуру сообщения, если возможно - # Но для удобства использования мы можем сказать "не найден". - # Чтобы предотвратить перечисление, некоторые приложения всегда возвращают "OK", но отправляют письмо только если найдено. - # Здесь мы придерживаемся вашей оригинальной логики, но помните о риске перечисления. - raise HTTPException(status_code=404, detail="Пользователь с таким email не найден") + return {'ok': True} # 4. Генерация токена token = secrets.token_urlsafe(32) @@ -1378,13 +1374,13 @@ async def restore_api( # 7. Асинхронная отправка email try: email_task.notify.delay( - recipient=user['email'], - context={ + to_email=user['email'], + data={ 'link': reset_link, 'email': user['email'] }, subject='Восстановление пароля', - template_name='restore.html' + template='restore.html' ) except Exception as e: # Логирование ошибки @@ -3388,8 +3384,8 @@ async def get_posts( field = 'user.username' if field == 'name': field = 'title' - if op == "like": - return {field: {"$regex": value, "$options": "i"}} + # if op == "like": + # return {field: {"$regex": value, "$options": "i"}} return {field: value} mongo_query = mql_to_mongo(mql) for post in [doc async for doc in posts_collection.find(mongo_query).sort({"_id":-1}).limit(per_page * page + 8)][per_page * page - per_page:per_page * page]: