From 0357ba5c93477557ed27048c47da183e6f3396da8652b052d306af381d7eb275 Mon Sep 17 00:00:00 2001 From: vladislav Date: Mon, 17 Aug 2026 02:46:07 -0400 Subject: [PATCH] hore --- build.ipynb | 172 ++++++----------- email_task.ipynb | 2 +- main.ipynb | 489 ++++++++++++++++++++++------------------------- migrate.ipynb | 13 +- tasks.ipynb | 58 ++---- tg.ipynb | 53 ++--- vk.ipynb | 161 ++++++---------- 7 files changed, 381 insertions(+), 567 deletions(-) diff --git a/build.ipynb b/build.ipynb index 3a22959..c65e17b 100644 --- a/build.ipynb +++ b/build.ipynb @@ -12,8 +12,7 @@ "outputs": [], "source": [ "!pip install -r requirements.txt" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -65,8 +64,7 @@ "EOF\n", "\n", "chmod +x .git/hooks/pre-commit\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -114,8 +112,7 @@ " load_env('env')\n", "except:\n", " load_env('env_example')" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -141,8 +138,7 @@ "kubectl -n container-registry create secret generic registry-basic-auth \\\n", " --from-file=auth=/tmp/registry.htpasswd \\\n", " --dry-run=client -o yaml | kubectl apply -f -\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -156,8 +152,7 @@ "outputs": [], "source": [ "!kubectl create secret docker-registry regcred --docker-server=$REGISTRY_HOST --docker-username='user' --docker-password=$REGISTRY_PASS --docker-email=\"$(git config --global --get user.email)\"" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -172,8 +167,7 @@ "source": [ "!kubectl create namespace kultmost\n", "!kubectl create secret docker-registry regcred -n kultmost --docker-server=$REGISTRY_HOST --docker-username='user' --docker-password=$REGISTRY_PASS --docker-email=\"$(git config --global --get user.email)\"" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -187,8 +181,7 @@ "outputs": [], "source": [ "!docker login $REGISTRY_HOST -u 'user' -p $REGISTRY_PASS" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -210,8 +203,7 @@ "outputs": [], "source": [ "!docker pull $REGISTRY_HOST/python:3.13-alpine" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -225,8 +217,7 @@ "outputs": [], "source": [ "!docker pull $REGISTRY_HOST/python:3.13-slim" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -266,8 +257,7 @@ " f.write('\\n\\n'.join(app))\n", "\n", "build()" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -285,8 +275,7 @@ "outputs": [], "source": [ "!docker tag mongo:latest registry.spiritofweb.ru/mongo:latest" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -300,8 +289,7 @@ "outputs": [], "source": [ "!docker build -t $REGISTRY_HOST/api-tg:latest tg/." - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -315,8 +303,7 @@ "outputs": [], "source": [ "!docker push $REGISTRY_HOST/api-tg:latest" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -338,8 +325,7 @@ "outputs": [], "source": [ "!docker build -t $REGISTRY_HOST/avtopost-api:latest ." - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -353,8 +339,7 @@ "outputs": [], "source": [ "!docker image push $REGISTRY_HOST/avtopost-api:latest" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -368,8 +353,7 @@ "outputs": [], "source": [ "!kubectl rollout restart deployments/kultmost-api -n kultmost" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -391,8 +375,7 @@ "outputs": [], "source": [ "!kubectl rollout restart deployments/vk-celery -n kultmost" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -406,8 +389,7 @@ "outputs": [], "source": [ "!kubectl rollout restart deployments/email-celery -n kultmost" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -432,8 +414,7 @@ "docker pull gitea/gitea:1.22\n", "docker tag gitea/gitea:1.22 $REGISTRY_HOST/gitea/gitea:1.22\n", "docker push $REGISTRY_HOST/gitea/gitea:1.22" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -457,8 +438,7 @@ "docker tag busybox:1.36 $REGISTRY_HOST/busybox:1.36\n", "docker tag rabbitmq:3.11-management $REGISTRY_HOST/rabbitmq:3.11-management\n", "docker tag alpine:3.14 $REGISTRY_HOST/alpine:3.14" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -477,8 +457,7 @@ "docker push $REGISTRY_HOST/busybox:1.36\n", "docker push $REGISTRY_HOST/rabbitmq:3.11-management\n", "docker push $REGISTRY_HOST/alpine:3.14" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -500,8 +479,7 @@ "outputs": [], "source": [ "!docker build -t $REGISTRY_HOST/ssh-tunnel:2 tunnel/" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -515,8 +493,7 @@ "outputs": [], "source": [ "!docker push $REGISTRY_HOST/ssh-tunnel:2" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -530,8 +507,7 @@ "outputs": [], "source": [ "!kubectl create secret generic ssh-id-rsa --from-file=id_rsa=/home/user/.ssh/id_rsa -n kultmost" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -545,8 +521,7 @@ "outputs": [], "source": [ "!kubectl apply -n kultmost -f k8s/stunnel.yaml" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -568,8 +543,7 @@ "outputs": [], "source": [ "!envsubst < k8s/prod.yaml | kubectl apply -n kultmost -f -" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -583,8 +557,7 @@ "outputs": [], "source": [ "!envsubst < k8s/kultmost.yaml | kubectl apply -n kultmost -f -" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -598,8 +571,7 @@ "outputs": [], "source": [ "!envsubst < k8s/mq.yaml | kubectl apply -n kultmost -f -" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -613,8 +585,7 @@ "outputs": [], "source": [ "!envsubst < k8s/gitea.yaml | kubectl apply -n gitea -f -" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -628,8 +599,7 @@ "outputs": [], "source": [ "!kubectl get pod -n kultmost" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -654,8 +624,7 @@ "echo \"$INIT_SSH'bash -s' <<'SCRIPT'\"\n", "echo \"kubectl create secret docker-registry regcred --docker-server=$REGISTRY_HOST --docker-username='user' --docker-password=$REGISTRY_PASS --docker-email=\\\"$(git config --global --get user.email)\\\" && clear && history -c && history -w\"\n", "echo \"SCRIPT\"" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -678,8 +647,7 @@ "echo \"clear\"\n", "echo \"history -c\"\n", "echo \"history -w\"" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -701,8 +669,7 @@ "outputs": [], "source": [ "!rsync -avz -ogp --chown=www-data:www-data ./static/ kultmost:/var/www/static/" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -716,8 +683,7 @@ "outputs": [], "source": [ "!echo $(git branch --show-current)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -731,8 +697,7 @@ "outputs": [], "source": [ "!rsync -avh --exclude-from=.rsyncignore --exclude=.venv/ . kultmost:/app/$(git branch --show-current)/" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -770,8 +735,7 @@ "EOF\n", "\n", "ssh kultmost 'systemctl daemon-reload && systemctl enable --now production.service && systemctl status --no-pager -l production.service'\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -801,8 +765,7 @@ "EOF\n", "\n", "ssh kultmost 'systemctl daemon-reload && systemctl enable --now fastapi.service && systemctl status --no-pager -l fastapi.service'\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -840,8 +803,7 @@ "EOF\n", "\n", "ssh kultmost 'systemctl daemon-reload && systemctl enable --now staging.service && systemctl status --no-pager -l staging.service'\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -877,8 +839,7 @@ "[Install]\n", "WantedBy=default.target\n", "EOF" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -908,8 +869,7 @@ "EOF\n", "\n", "ssh kultmost 'systemctl daemon-reload && systemctl enable --now staging.service && systemctl status --no-pager -l staging.service'\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -931,8 +891,7 @@ "outputs": [], "source": [ "!ssh kultmost 'systemctl restart production.service'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -946,8 +905,7 @@ "outputs": [], "source": [ "!ssh kultmost 'systemctl status production.service'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -961,8 +919,7 @@ "outputs": [], "source": [ "!ssh kultmost 'systemctl restart fastapi.service'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -976,8 +933,7 @@ "outputs": [], "source": [ "!ssh kultmost 'systemctl status fastapi.service'" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -1015,8 +971,7 @@ "EOF\n", "\n", "ssh kultmost 'systemctl daemon-reload && systemctl enable --now vk-celery.service && systemctl status --no-pager -l vk-celery.service'\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1030,8 +985,7 @@ "outputs": [], "source": [ "!ssh kultmost 'systemctl restart vk-celery.service'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1045,8 +999,7 @@ "outputs": [], "source": [ "!ssh kultmost 'systemctl status vk-celery.service'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1076,8 +1029,7 @@ "EOF\n", "\n", "ssh kultmost 'systemctl daemon-reload && systemctl enable --now email-celery.service && systemctl status --no-pager -l email-celery.service'\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1091,8 +1043,7 @@ "outputs": [], "source": [ "!ssh kultmost 'systemctl restart email-celery.service'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1106,8 +1057,7 @@ "outputs": [], "source": [ "!ssh kultmost 'systemctl status email-celery.service'" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -1129,8 +1079,7 @@ "outputs": [], "source": [ "# !scp kultmost:/etc/nginx/sites-enabled/default nginx_conf " - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1146,8 +1095,7 @@ "!scp nginx_conf kultmost:/tmp/default\n", "!ssh kultmost 'sudo mv /tmp/default /etc/nginx/sites-enabled/default'\n", "!ssh kultmost 'nginx -t'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1161,8 +1109,7 @@ "outputs": [], "source": [ "!ssh kultmost 'nginx -s reload'" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -1187,8 +1134,7 @@ "sudo usermod -a -G microk8s $USER\n", "newgrp microk8s\n", "microk8s status" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1204,8 +1150,7 @@ "curl -LO https://cert-manager.io/public-keys/cert-manager-keyring-2021-09-20-1020CF3C033D4F35BAE1C19E1226061C665DF13E.gpg\n", "helm install cert-manager oci://quay.io/jetstack/charts/cert-manager --version v1.20.2 --namespace cert-manager --create-namespace --verify --keyring ./cert-manager-keyring-2021-09-20-1020CF3C033D4F35BAE1C19E1226061C665DF13E.gpg --set crds.enabled=true\n", "microk8s helm install cert-manager oci://quay.io/jetstack/charts/cert-manager --version v1.20.2 --namespace cert-manager --create-namespace --verify --keyring ./cert-manager-keyring-2021-09-20-1020CF3C033D4F35BAE1C19E1226061C665DF13E.gpg --set crds.enabled=true" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -1426,13 +1371,12 @@ "\n", "sss = await element_create(pc, tablet, mob)\n", "sss.innerHTML" - ], - "display_name": ".venv" + ] } ], "metadata": { "kernelspec": { - "display_name": ".venv (3.14.6.final.0)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -1446,7 +1390,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.6" + "version": "3.13.5" } }, "nbformat": 4, diff --git a/email_task.ipynb b/email_task.ipynb index 457b2bc..d10e5d1 100644 --- a/email_task.ipynb +++ b/email_task.ipynb @@ -257,7 +257,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.6" + "version": "3.13.5" } }, "nbformat": 4, diff --git a/main.ipynb b/main.ipynb index 485c0f6..1d4b68e 100644 --- a/main.ipynb +++ b/main.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "44794e2f", "metadata": {}, "outputs": [], @@ -46,8 +46,7 @@ " load_env('env')\n", "except:\n", " load_env('env_example')" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -59,10 +58,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "49f00c66", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "OSError", + "evalue": "Missing required environment variables for MongoDB/Redis", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mOSError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 24\u001b[39m\n\u001b[32m 20\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m io \u001b[38;5;28;01mimport\u001b[39;00m BytesIO\n\u001b[32m 21\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m dateutil.parser \u001b[38;5;28;01mimport\u001b[39;00m isoparse\n\u001b[32m 22\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m httpx\n\u001b[32m 23\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m string\n\u001b[32m---> \u001b[39m\u001b[32m24\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m db \u001b[38;5;28;01mimport\u001b[39;00m *\n\u001b[32m 25\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m vk \u001b[38;5;28;01mas\u001b[39;00m vk\n\u001b[32m 26\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m tg \u001b[38;5;28;01mas\u001b[39;00m tg\n\u001b[32m 27\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m delivery_router \u001b[38;5;28;01mimport\u001b[39;00m router \u001b[38;5;28;01mas\u001b[39;00m delivery_router\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/avtopsot.kultmost.ru/db.py:13\u001b[39m\n\u001b[32m 11\u001b[39m \u001b[38;5;66;03m# ========================= RETRIEVE CONFIG =========================\u001b[39;00m\n\u001b[32m 12\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mall\u001b[39m([MONGO_PASSWORD, MONGODB_HOST, REDIS_HOST]):\n\u001b[32m---> \u001b[39m\u001b[32m13\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mEnvironmentError\u001b[39;00m(\u001b[33m\"\u001b[39m\u001b[33mMissing required environment variables for MongoDB/Redis\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m 15\u001b[39m \u001b[38;5;66;03m# ========================= DATABASE URI =========================\u001b[39;00m\n\u001b[32m 16\u001b[39m mongo_uri = \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mmongodb://admin:\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mMONGO_PASSWORD\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m@\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mMONGODB_HOST\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m:\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mMONGO_PORT\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m/\u001b[39m\u001b[33m\"\u001b[39m\n", + "\u001b[31mOSError\u001b[39m: Missing required environment variables for MongoDB/Redis" + ] + } + ], "source": [ "from fastapi import FastAPI, APIRouter, UploadFile, File, Depends, HTTPException, Body, Security, Form, Request, Response, BackgroundTasks, Query\n", "from motor.motor_asyncio import AsyncIOMotorCollection\n", @@ -107,8 +119,91 @@ "\n", "logging.basicConfig(level=logging.INFO)\n", "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "287f37ca", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: annotated-doc==0.0.4 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 1)) (0.0.4)\n", + "Requirement already satisfied: annotated-types==0.7.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 2)) (0.7.0)\n", + "Requirement already satisfied: anyio==4.12.1 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 3)) (4.12.1)\n", + "Requirement already satisfied: argon2-cffi==25.1.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 4)) (25.1.0)\n", + "Requirement already satisfied: argon2-cffi-bindings==25.1.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 5)) (25.1.0)\n", + "Requirement already satisfied: asttokens==3.0.1 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 6)) (3.0.1)\n", + "Requirement already satisfied: certifi==2026.2.25 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 7)) (2026.2.25)\n", + "Requirement already satisfied: cryptography==46.0.5 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 8)) (46.0.5)\n", + "Requirement already satisfied: dnspython==2.8.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 9)) (2.8.0)\n", + "Requirement already satisfied: email-validator==2.3.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 10)) (2.3.0)\n", + "Requirement already satisfied: fastapi==0.133.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 11)) (0.133.0)\n", + "Requirement already satisfied: fastar==0.8.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 12)) (0.8.0)\n", + "Requirement already satisfied: h11==0.16.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 13)) (0.16.0)\n", + "Requirement already satisfied: httpcore==1.0.9 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 14)) (1.0.9)\n", + "Requirement already satisfied: httptools==0.7.1 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 15)) (0.7.1)\n", + "Requirement already satisfied: httpx==0.28.1 in ./.venv/lib/python3.13/site-packages (from httpx[http2,socks]==0.28.1->-r requirements.txt (line 16)) (0.28.1)\n", + "Requirement already satisfied: itsdangerous==2.2.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 17)) (2.2.0)\n", + "Requirement already satisfied: Jinja2==3.1.6 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 18)) (3.1.6)\n", + "Requirement already satisfied: motor==3.7.1 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 19)) (3.7.1)\n", + "Requirement already satisfied: passlib==1.7.4 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 20)) (1.7.4)\n", + "Requirement already satisfied: pydantic==2.12.5 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 21)) (2.12.5)\n", + "Requirement already satisfied: pydantic-extra-types==2.11.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 22)) (2.11.0)\n", + "Requirement already satisfied: pydantic-settings==2.13.1 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 23)) (2.13.1)\n", + "Requirement already satisfied: pydantic_core==2.41.5 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 24)) (2.41.5)\n", + "Requirement already satisfied: PyJWT==2.11.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 25)) (2.11.0)\n", + "Requirement already satisfied: pymongo==4.16.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 26)) (4.16.0)\n", + "Requirement already satisfied: python-dateutil==2.9.0.post0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 27)) (2.9.0.post0)\n", + "Requirement already satisfied: python-dotenv==1.2.1 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 28)) (1.2.1)\n", + "Requirement already satisfied: python-jose==3.5.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 29)) (3.5.0)\n", + "Requirement already satisfied: python-multipart==0.0.22 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 30)) (0.0.22)\n", + "Requirement already satisfied: pyzmq==27.1.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 31)) (27.1.0)\n", + "Requirement already satisfied: rsa==4.9.1 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 32)) (4.9.1)\n", + "Requirement already satisfied: socksio==1.0.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 33)) (1.0.0)\n", + "Requirement already satisfied: urllib3==2.6.3 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 34)) (2.6.3)\n", + "Requirement already satisfied: uvicorn==0.41.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 35)) (0.41.0)\n", + "Requirement already satisfied: bcrypt==5.0.0 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 36)) (5.0.0)\n", + "Requirement already satisfied: celery==5.6.3 in ./.venv/lib/python3.13/site-packages (from celery[redis]==5.6.3->-r requirements.txt (line 37)) (5.6.3)\n", + "Requirement already satisfied: pika==1.3.2 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 38)) (1.3.2)\n", + "Requirement already satisfied: pillow==12.1.1 in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 39)) (12.1.1)\n", + "Requirement already satisfied: pytz in ./.venv/lib/python3.13/site-packages (from -r requirements.txt (line 40)) (2026.3.post1)\n", + "Requirement already satisfied: idna>=2.8 in ./.venv/lib/python3.13/site-packages (from anyio==4.12.1->-r requirements.txt (line 3)) (3.18)\n", + "Requirement already satisfied: cffi>=1.0.1 in ./.venv/lib/python3.13/site-packages (from argon2-cffi-bindings==25.1.0->-r requirements.txt (line 5)) (2.1.1)\n", + "Requirement already satisfied: starlette>=0.40.0 in ./.venv/lib/python3.13/site-packages (from fastapi==0.133.0->-r requirements.txt (line 11)) (1.6.0)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in ./.venv/lib/python3.13/site-packages (from fastapi==0.133.0->-r requirements.txt (line 11)) (4.16.0)\n", + "Requirement already satisfied: typing-inspection>=0.4.2 in ./.venv/lib/python3.13/site-packages (from fastapi==0.133.0->-r requirements.txt (line 11)) (0.4.4)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in ./.venv/lib/python3.13/site-packages (from Jinja2==3.1.6->-r requirements.txt (line 18)) (3.0.3)\n", + "Requirement already satisfied: six>=1.5 in ./.venv/lib/python3.13/site-packages (from python-dateutil==2.9.0.post0->-r requirements.txt (line 27)) (1.17.0)\n", + "Requirement already satisfied: ecdsa!=0.15 in ./.venv/lib/python3.13/site-packages (from python-jose==3.5.0->-r requirements.txt (line 29)) (0.19.2)\n", + "Requirement already satisfied: pyasn1>=0.5.0 in ./.venv/lib/python3.13/site-packages (from python-jose==3.5.0->-r requirements.txt (line 29)) (0.6.4)\n", + "Requirement already satisfied: click>=7.0 in ./.venv/lib/python3.13/site-packages (from uvicorn==0.41.0->-r requirements.txt (line 35)) (8.4.2)\n", + "Requirement already satisfied: billiard<5.0,>=4.2.1 in ./.venv/lib/python3.13/site-packages (from celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (4.2.4)\n", + "Requirement already satisfied: kombu>=5.6.0 in ./.venv/lib/python3.13/site-packages (from celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (5.6.2)\n", + "Requirement already satisfied: vine<6.0,>=5.1.0 in ./.venv/lib/python3.13/site-packages (from celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (5.1.0)\n", + "Requirement already satisfied: click-didyoumean>=0.3.0 in ./.venv/lib/python3.13/site-packages (from celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (0.3.1)\n", + "Requirement already satisfied: click-repl>=0.2.0 in ./.venv/lib/python3.13/site-packages (from celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (0.3.0)\n", + "Requirement already satisfied: click-plugins>=1.1.1 in ./.venv/lib/python3.13/site-packages (from celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (1.1.1.2)\n", + "Requirement already satisfied: tzlocal in ./.venv/lib/python3.13/site-packages (from celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (5.4.4)\n", + "Requirement already satisfied: h2<5,>=3 in ./.venv/lib/python3.13/site-packages (from httpx[http2,socks]==0.28.1->-r requirements.txt (line 16)) (4.4.1)\n", + "Requirement already satisfied: hyperframe<7,>=6.1 in ./.venv/lib/python3.13/site-packages (from h2<5,>=3->httpx[http2,socks]==0.28.1->-r requirements.txt (line 16)) (6.1.0)\n", + "Requirement already satisfied: hpack<5,>=4.2 in ./.venv/lib/python3.13/site-packages (from h2<5,>=3->httpx[http2,socks]==0.28.1->-r requirements.txt (line 16)) (4.2.0)\n", + "Requirement already satisfied: pycparser in ./.venv/lib/python3.13/site-packages (from cffi>=1.0.1->argon2-cffi-bindings==25.1.0->-r requirements.txt (line 5)) (3.0)\n", + "Requirement already satisfied: prompt-toolkit>=3.0.36 in ./.venv/lib/python3.13/site-packages (from click-repl>=0.2.0->celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (3.0.53)\n", + "Requirement already satisfied: amqp<6.0.0,>=5.1.1 in ./.venv/lib/python3.13/site-packages (from kombu>=5.6.0->celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (5.3.1)\n", + "Requirement already satisfied: tzdata>=2025.2 in ./.venv/lib/python3.13/site-packages (from kombu>=5.6.0->celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (2026.3)\n", + "Requirement already satisfied: packaging in ./.venv/lib/python3.13/site-packages (from kombu>=5.6.0->celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (26.3)\n", + "Requirement already satisfied: wcwidth>=0.1.4 in ./.venv/lib/python3.13/site-packages (from prompt-toolkit>=3.0.36->click-repl>=0.2.0->celery==5.6.3->celery[redis]==5.6.3->-r requirements.txt (line 37)) (0.8.2)\n", + "Requirement already satisfied: redis!=4.5.5,!=5.0.2,<6.5,>=4.5.2 in ./.venv/lib/python3.13/site-packages (from kombu[redis]; extra == \"redis\"->celery[redis]==5.6.3->-r requirements.txt (line 37)) (6.4.0)\n" + ] + } ], - "display_name": ".venv" + "source": [ + "!pip install -r requirements.txt" + ] }, { "cell_type": "markdown", @@ -138,8 +233,7 @@ ")\n", "app.include_router(delivery_router)\n", "app.include_router(vk.router, prefix='/api/v1/social', tags=[\"Auth\"])" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -170,8 +264,7 @@ "\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", @@ -189,8 +282,7 @@ " doc[\"published_at\"] = published.isoformat()\n", " docs.append(doc)\n", " return docs\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -245,8 +337,7 @@ " {'_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", @@ -276,8 +367,7 @@ " 'poster_file_id': new_id\n", " }}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -307,8 +397,7 @@ " 'poster_file_id': new_id\n", " }}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -348,8 +437,7 @@ " 'medias': new_ids\n", " }}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -386,8 +474,7 @@ " 'medias': new_ids\n", " }}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -424,8 +511,7 @@ " 'media': new_ids\n", " }}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -452,8 +538,7 @@ " return str(file_id)\n", " finally:\n", " await upload.close()\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -469,8 +554,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/posts.html\", context={ \"user\": user, 'cards': data}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -489,8 +573,7 @@ " {\"$set\": {\"status\": 2}},\n", " )\n", " return {}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -500,8 +583,7 @@ "outputs": [], "source": [ "# await notify_collection.delete_many({'title':'Доставка картины'})" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -511,8 +593,7 @@ "outputs": [], "source": [ "# await notify_collection.update_many({'title':'Доставка картины'},{'$set':{'type':'delivery'}})" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -538,8 +619,7 @@ "# ))\n", "# print(notify)\n", "# await delivery_collection.update_one({'_id': existing.get('_id')},{'$set':{'notify': notify.upserted_id}})" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -658,8 +738,7 @@ " 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", @@ -673,8 +752,7 @@ "# {\"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", @@ -810,8 +888,7 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -894,8 +971,7 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -930,8 +1006,7 @@ " max_age=int(refresh_exp_delta.total_seconds())\n", " )\n", " return {'ok': True}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1037,8 +1112,7 @@ " next_url = '/'\n", "\n", " return RedirectResponse(next_url,headers=response.headers)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1159,8 +1233,7 @@ " \"user_id\": user_id_str,\n", " \"token_type\": \"bearer\"\n", " }\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1228,8 +1301,7 @@ " max_age=int(refresh_exp_delta.total_seconds())\n", " )\n", " return {'ok': True}" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1326,8 +1398,7 @@ " \"token_type\": \"bearer\",\n", " \"refresh_token\": new_refresh\n", " }" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1364,8 +1435,7 @@ " )\n", "\n", " return {\"message\": \"Logged out from all sessions\"}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1377,20 +1447,8 @@ "@app.get(\"/api/me\", response_model=dict)\n", "async def get_me(response: Response, current_user: Dict = Security(get_current_user, scopes=[\"read:self\"])):\n", " user = display_user(current_user)\n", - " refresh_exp = timedelta(days=REFRESH_TOKEN_EXPIRE_DAYS)\n", - " if current_user['email'] == 'kultmost@yandex.ru':\n", - " response.set_cookie(\n", - " domain='.kultmost.ru',\n", - " key=\"token\",\n", - " value='2124|bhcbiP7XEgSe6ooTAoPf6mklBWNExG6a5CmmwTvTfafc5d5b',\n", - " httponly=True,\n", - " secure=PROD,\n", - " samesite=\"strict\",\n", - " max_age=int(refresh_exp.total_seconds())\n", - " )\n", " return bson_clear(user)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1414,8 +1472,7 @@ " raise HTTPException(status_code=500, detail=f\"Redis is unhealthy: {str(e)}\")\n", "\n", " return {}" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1432,8 +1489,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"registration.html\", context={'next': next}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1475,8 +1531,7 @@ " results.append(doc)\n", " \n", " return results\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1518,8 +1573,7 @@ "\n", " cursor = competition_request_col.aggregate(pipeline)\n", " return await cursor.to_list(length=None)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1573,8 +1627,7 @@ "# cursor = posts_collection.find({\"_id\": {\"$in\": posts_ids}})\n", "# return await cursor.to_list(length=None)\n", "\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1606,8 +1659,7 @@ " 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", @@ -1630,8 +1682,7 @@ " )\n", " else:\n", " raise HTTPException(status_code=307, headers={\"Location\": '/competitions'}, detail=\"Конкурс не найден\")" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1655,8 +1706,7 @@ " )\n", " else:\n", " raise HTTPException(status_code=307, headers={\"Location\": '/competitions'}, detail=\"Конкурс не найден\")" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1686,8 +1736,7 @@ " 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", @@ -1717,8 +1766,7 @@ " },{'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", @@ -1747,8 +1795,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"exhibitions.html\", context={\"id\": 1, \"user\": user, \"exhibitions\": exhibitions}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1778,8 +1825,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"competitions.html\", context={\"id\": 1, \"user\": user, \"competitions\": competitions}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1924,8 +1970,7 @@ "\n", "\n", "app.include_router(router, tags=['Восстановление пароля'])" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1950,8 +1995,7 @@ " name=\"login.html\",\n", " context=context,\n", " )\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1965,8 +2009,7 @@ " 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", @@ -1985,8 +2028,7 @@ " {'$set': {'description': data.description}}\n", " )\n", " return {'ok': True}" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2008,8 +2050,7 @@ " 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", @@ -2031,8 +2072,7 @@ " 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", @@ -2051,8 +2091,7 @@ " {'$set': {'status': 2}},\n", " )\n", " return {'ok': True}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2071,8 +2110,7 @@ " {'$set': {'status': 1}},\n", " )\n", " return {'ok': True}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2110,8 +2148,7 @@ " return {'ok': True}\n", " else:\n", " return {'ok': False}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2192,8 +2229,7 @@ "\n", "\n", " return {'ok': True}" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2214,8 +2250,7 @@ " coros = [_update_post_description(p) for p in posts]\n", " if coros:\n", " await asyncio.gather(*coros)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2310,8 +2345,7 @@ " response[\"message\"] = f\"Исключено {excluded_count} уже использованных постов\"\n", "\n", " return response" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2329,8 +2363,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/news.html\", context={ \"user\": user, 'news': news}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2347,8 +2380,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/form.html\", context={ \"user\": user}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2364,8 +2396,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/partner/competitions.html\", context={ \"user\": user, 'cards': data}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2382,8 +2413,7 @@ " 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", @@ -2429,8 +2459,7 @@ " for post in posts:\n", " post['competition'] = oid\n", " return posts\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2469,8 +2498,7 @@ " results.append(doc)\n", " \n", " return results\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2496,8 +2524,7 @@ " 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", @@ -2528,8 +2555,7 @@ " 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", @@ -2557,8 +2583,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/competition.html\", context={ \"user\": user, 'competitions': competitions}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2601,8 +2626,7 @@ " # 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", @@ -2667,8 +2691,7 @@ " 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", @@ -2691,8 +2714,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"about.html\", context={\"user\": user}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2707,8 +2729,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"news.html\", context={\"user\": user, \"news\": news}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2737,8 +2758,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"index.html\", context={\"user\": user, \"news\": news, 'pwa':True}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2756,8 +2776,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"partner/galerist.html\", context={\"id\": 1, \"user\": user, \"partner\": partner}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2774,8 +2793,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"partner/index.html\", context={\"id\": 1, \"user\": user}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2793,8 +2811,7 @@ " 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", @@ -2831,8 +2848,7 @@ " 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", @@ -2869,8 +2885,7 @@ " 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", @@ -2887,8 +2902,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/competition.html\", context={\"id\": 1, \"user\": user}\n", " )\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2908,8 +2922,7 @@ " 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", @@ -2935,8 +2948,7 @@ " return templates.TemplateResponse(\n", " request=requset, name='news/index.html', context={\"user\":user, \"news\": news}\n", " )\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2968,8 +2980,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/post_edit.html\", context={\"post\": data, \"user\": user}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -2997,8 +3008,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/news_edit.html\", context={\"news\": news, \"user\": user}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3015,8 +3025,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"form/exhibition.html\", context={\"id\": 1, \"user\": user}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3038,8 +3047,7 @@ " 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", @@ -3062,8 +3070,7 @@ " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n", "\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3098,8 +3105,7 @@ " raise\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3152,8 +3158,7 @@ " 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", @@ -3169,8 +3174,7 @@ "):\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", @@ -3230,8 +3234,7 @@ " except Exception as e:\n", " print(e)\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3301,8 +3304,7 @@ " 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", @@ -3321,8 +3323,7 @@ " 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", @@ -3364,8 +3365,7 @@ " return doc_out\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3413,8 +3413,7 @@ " }\n", " doc_out = bson_clear(doc_out)\n", " return doc_out\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3433,8 +3432,7 @@ " return {'media': media}\n", " except Exception as e:\n", " raise HTTPException(status_code=500, detail=str(e))\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3449,8 +3447,7 @@ "):\n", " await notify_collection.update_many({'user_id':user.get('_id')},{'$set':{'read':False}})\n", " return {}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3512,8 +3509,7 @@ " 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", @@ -3573,8 +3569,7 @@ " 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", @@ -3644,8 +3639,7 @@ " 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", @@ -3667,8 +3661,7 @@ " },{'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", @@ -3730,8 +3723,7 @@ " except Exception as e:\n", " logging.error(str(e))\n", " raise HTTPException(status_code=500, detail=str(e))" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3808,8 +3800,7 @@ " except Exception as e:\n", " logging.error(str(e))\n", " raise HTTPException(status_code=500, detail=str(e))" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -3918,8 +3909,7 @@ " 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", @@ -3982,8 +3972,7 @@ " \n", " \n", " \"\"\"\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4003,8 +3992,7 @@ " 'users': users \n", " }\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4120,8 +4108,7 @@ " \"all_city\": len(await users_collection.distinct(\"living_place\", filter={ 'roles': \"user\" }))\n", " }\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4137,8 +4124,7 @@ " 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", @@ -4156,8 +4142,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/social.html\", context={\"user\": user, 'socials': socials}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4177,8 +4162,7 @@ " return templates.TemplateResponse(\n", " request=request, name=\"profile/invitation.html\", context={ \"user\": user, \"doc\": data}\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4197,8 +4181,7 @@ " 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", @@ -4216,8 +4199,7 @@ "):\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", @@ -4243,8 +4225,7 @@ "\n", " data = [doc async for doc in cursor]\n", " return data[0] if data else False" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4284,8 +4265,7 @@ " 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", @@ -4376,8 +4356,7 @@ " 'last_page': post_count / per_page,\n", " 'per_page': per_page\n", " }" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4395,8 +4374,7 @@ " 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", @@ -4423,8 +4401,7 @@ " user.pop('phone')\n", " user.pop('email')\n", " return {'data':bson_clear(user)}" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4449,8 +4426,7 @@ " post['name'] = post['title']\n", " post['media'] = photos\n", " return bson_clear(post)" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -4479,8 +4455,7 @@ " 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", @@ -4500,8 +4475,7 @@ "\n", " await accept_invitations(invitations_id, posts_ids)\n", " return {'ok': True}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4525,8 +4499,7 @@ " \"data\": data,\n", " }\n", " )\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4597,8 +4570,7 @@ " \"active_section\": \"delivery\"\n", " }\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4616,8 +4588,7 @@ " 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", @@ -4652,8 +4623,7 @@ " ]\n", " )\n", " return {\"ok\": True}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4662,7 +4632,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "@app.get(\"/profile/partner/exhibition/{exhibition_id}/catalog\", response_class=HTMLResponse)\n", "async def profile_partner_exhibitions_catalog(\n", " request: Request,\n", @@ -4728,8 +4697,7 @@ " 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", @@ -4766,8 +4734,7 @@ " 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", @@ -4806,8 +4773,7 @@ "\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", @@ -4821,8 +4787,7 @@ "outputs": [], "source": [ "!uvicorn main:app --host 0.0.0.0 --port 8005 --reload" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4833,8 +4798,7 @@ "source": [ "import uvicorn\n", "uvicorn.run('main:app', host='0.0.0.0', port=8005, reload=True)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -4856,8 +4820,7 @@ "outputs": [], "source": [ "!pip freeze > req.txt" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4868,8 +4831,7 @@ "source": [ "import sys\n", "sys.executable" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -4881,13 +4843,12 @@ "import sys\n", "sys.executable\n", "!{sys.executable} -m pip install -r requirements-api.txt" - ], - "display_name": ".venv" + ] } ], "metadata": { "kernelspec": { - "display_name": ".venv (3.14.6.final.0)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -4901,7 +4862,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.6" + "version": "3.13.5" } }, "nbformat": 4, diff --git a/migrate.ipynb b/migrate.ipynb index 6cf8d3f..c5ae839 100644 --- a/migrate.ipynb +++ b/migrate.ipynb @@ -38,8 +38,7 @@ " load_env('env')\n", "except:\n", " load_env('env_example')" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -49,8 +48,7 @@ "outputs": [], "source": [ "from db import *" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -60,13 +58,12 @@ "outputs": [], "source": [ "await posts_collection.update_many({'status':'publish'},{'$set':{'status':'В каталоге'}})" - ], - "display_name": ".venv" + ] } ], "metadata": { "kernelspec": { - "display_name": ".venv (3.14.6.final.0)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -80,7 +77,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.6" + "version": "3.13.5" } }, "nbformat": 4, diff --git a/tasks.ipynb b/tasks.ipynb index af4ec8d..5add40d 100644 --- a/tasks.ipynb +++ b/tasks.ipynb @@ -38,8 +38,7 @@ " load_env('env')\n", "except:\n", " load_env('env_example')" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -58,8 +57,7 @@ "from models import NotifyItem\n", "from auth import token_create\n", "import asyncio\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -90,8 +88,7 @@ " },\n", " upsert=True,\n", " )\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -120,8 +117,7 @@ " 'login_link': login_link,\n", " },\n", " 'Новая картина', 'main.html')\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -132,8 +128,7 @@ "source": [ "async def update_social_post(post):\n", " pass" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -172,8 +167,7 @@ " attachments = [a for a in get_attachments(social) if a is not None]\n", " \n", " client.notify.delay(post_ref, text, attachments, bson_clear(social), sign_avatar)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -189,8 +183,7 @@ " pass\n", " else:\n", " print(competition)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -418,8 +411,7 @@ "\n", "# async def service_social_news(news: Dict, **kwargs):\n", "# return await service_social_publish(\"news\", news, **kwargs)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -467,8 +459,7 @@ " if already_sent:\n", " print(social)\n", " client.notify.delay(post_ref, text, attachments, bson_clear(social), False)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -521,8 +512,7 @@ " if already_sent:\n", " print(social)\n", " client.notify.delay(post_ref, text, attachments, bson_clear(social), False)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -548,8 +538,7 @@ " 'login_link': login_link\n", " },\n", " 'Новый пользователь', 'main.html')" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -595,8 +584,7 @@ " if PROD:\n", " email_task.notify.delay(user['email'], {'competition': bson_clear(doc), 'login_link': f'{FULL_DOMAIN}/login/{await token_create(str(user['_id']), url=f'/competition/{doc.get(\"id\") or doc.get(\"_id\")}')}'}, 'Конкурс', 'competition.html')\n", " await asyncio.gather(*new_notify)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -618,8 +606,7 @@ " },\n", " 'Приглашение', 'main.html')\n", " await notify_in_profile(NotifyItem(user_id=user_id, type_item='invation', title='Приглашение', link='/profile/invitation', text=f'Вы прошли отбор на конкурсе {competition['title']}'))\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -640,8 +627,7 @@ " delivery = await delivery_cursor.limit(1).to_list(length=1)\n", " delivery = delivery[0] if delivery else {}\n", " return delivery.get('receiver')" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -686,8 +672,7 @@ " link=f'/profile/delivery',\n", " text=f'Художник принял условия'\n", " ))" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -789,8 +774,7 @@ " 'main.html'\n", " )\n", " \n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -896,8 +880,7 @@ " 'Обновление статуса заявки на конкурс',\n", " 'main.html'\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -931,13 +914,12 @@ " 'login_link': login_link\n", " },\n", " 'Новая заявка на конкурс', 'main.html')" - ], - "display_name": ".venv" + ] } ], "metadata": { "kernelspec": { - "display_name": ".venv (3.14.6.final.0)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -951,7 +933,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.6" + "version": "3.13.5" } }, "nbformat": 4, diff --git a/tg.ipynb b/tg.ipynb index 2309c3a..013a627 100644 --- a/tg.ipynb +++ b/tg.ipynb @@ -48,8 +48,7 @@ " load_env('env')\n", "except:\n", " load_env('env_example')\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -82,8 +81,7 @@ "import asyncio\n", "import json\n", "from datetime import datetime, time, timedelta, timezone\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -95,8 +93,7 @@ "Image.MAX_IMAGE_PIXELS = 50_000_000\n", "TMP_DIR = Path(\"/tmp\")\n", "TMP_DIR.mkdir(parents=True, exist_ok=True)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -106,8 +103,7 @@ "outputs": [], "source": [ "celery_app_tg = Celery('tg', broker=f'amqps://admin:{RABBITMQ_PASS}@{RABBITMQ_HOST}:{RABBITMQ_PORT}/tg', task_track_started=True )\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -124,8 +120,7 @@ " if chunk:\n", " chunks.append(chunk)\n", " return b\"\".join(chunks)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -146,8 +141,7 @@ " img = await fetch_bytes(client, f\"https://api.telegram.org/file/bot{BOT_TOKEN}/{file_path}\")\n", " new_tg = (channel_name, BytesIO(img))\n", " print(channel_name)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -217,8 +211,7 @@ " images.append(img)\n", "\n", " return images" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -243,8 +236,7 @@ " \"media\": f\"attach://file{i}\",\n", " })\n", " return media" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -322,8 +314,7 @@ " await asyncio.sleep(0.8 * attempt)\n", "\n", " raise last_exc\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -344,8 +335,7 @@ " # The API returns JSON like {\"ok\":true,\"result\":true}\n", " data = response.json()\n", " return data.get(\"ok\") and data.get(\"result\") is True" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -374,8 +364,7 @@ " # httpx.post(f'{FULL_PATH_DOMAIN}/tg', json={'item': item, 'result': result}, headers={\"Authorization\": f\"bearer {ATOKEN}\"})\n", " except Exception as exc:\n", " raise self.retry(exc=exc, countdown=30)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -404,8 +393,7 @@ " httpx.post(f'{FULL_PATH_DOMAIN}/tg', json={'item': item, 'result': result}, headers={\"Authorization\": f\"bearer {ATOKEN}\"})\n", " except Exception as exc:\n", " raise self.retry(exc=exc, countdown=30)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -426,8 +414,7 @@ " asyncio.run(new_channel_reg(chat_id))\n", " except Exception as exc:\n", " raise self.retry(exc=exc, countdown=30)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -466,8 +453,7 @@ "\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", @@ -477,8 +463,7 @@ "outputs": [], "source": [ "!celery -A tg.celery_app_tg worker --loglevel=info" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -528,8 +513,7 @@ " else:\n", " print(\"Failed to delete message.\")\n", "\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -537,8 +521,7 @@ "id": "416f454c", "metadata": {}, "outputs": [], - "source": [], - "display_name": ".venv" + "source": [] } ], "metadata": { @@ -557,7 +540,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.6" + "version": "3.13.5" } }, "nbformat": 4, diff --git a/vk.ipynb b/vk.ipynb index 5c1ed41..303bf74 100644 --- a/vk.ipynb +++ b/vk.ipynb @@ -53,8 +53,7 @@ " load_env('env_example')\n", " except Exception:\n", " pass" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -86,8 +85,7 @@ "from fastapi import APIRouter, Depends, Request, Response\n", "from fastapi.responses import RedirectResponse\n", "from images import insert_logo\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -105,8 +103,7 @@ "outputs": [], "source": [ "celery_app_vk = Celery('vk', broker=f'{redis_uri}1', backend=f'{redis_uri}1', task_track_started=True )\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -116,8 +113,7 @@ "outputs": [], "source": [ "token_manager = TokenManager()\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -158,8 +154,7 @@ "\n", " # Привязка соцсети к уже залогиненному пользователю\n", " return RedirectResponse(url='/profile/social', status_code=status.HTTP_303_SEE_OTHER)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -189,8 +184,7 @@ " images[_id] = (\"photo\", (name, background, \"image/jpeg\"))\n", " \n", " return images\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -263,8 +257,7 @@ " await mongo_client[db_name][item.get('col')].update_one({'_id': ObjectId(item.get('_id'))}, update_spec)\n", " return {\"ok\": True}\n", "\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -340,8 +333,7 @@ " await mongo_client[db_name][item.get('col')].update_one({'_id': ObjectId(item.get('_id'))}, update_spec)\n", " return {\"ok\": True}\n", "\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -394,8 +386,7 @@ " )\n", "\n", " return {\"ok\": True}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -430,8 +421,7 @@ " \n", " except Exception as exc:\n", " raise self.retry(exc=exc)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -466,8 +456,7 @@ " \n", " except Exception as exc:\n", " raise self.retry(exc=exc)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -502,8 +491,7 @@ " \n", " except Exception as exc:\n", " raise self.retry(exc=exc)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -534,8 +522,7 @@ "# timeout=100\n", "# ).json()\n", "# await asyncio.sleep(1)\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -566,8 +553,7 @@ "\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", @@ -581,8 +567,7 @@ "outputs": [], "source": [ "!celery -A vk.celery_app_vk worker --loglevel=info" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -596,8 +581,7 @@ "outputs": [], "source": [ "!docker build -t registry.spiritofweb.ru/avtopost-api:latest ." - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -611,8 +595,7 @@ "outputs": [], "source": [ "!sudo docker image push registry.spiritofweb.ru/avtopost-api:latest" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -626,8 +609,7 @@ "outputs": [], "source": [ "!kubectl rollout restart deployments/vk-celery -n kultmost" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -641,8 +623,7 @@ "outputs": [], "source": [ "!echo $REGISTRY_HOST" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -660,8 +641,7 @@ "outputs": [], "source": [ "stop" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -671,8 +651,7 @@ "outputs": [], "source": [ "user_id = '681684390000000000000000'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -683,8 +662,7 @@ "source": [ "await redis_client.delete(f\"access_token:{user_id}\")\n", "await redis_client.delete(f\"tokens:{user_id}\")" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -708,8 +686,7 @@ " },\n", " upsert=True,\n", ")\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -719,8 +696,7 @@ "outputs": [], "source": [ "import token_manager as tm" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -731,8 +707,7 @@ "source": [ "from token_manager import TokenManager\n", "token_manager = TokenManager()" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -744,8 +719,7 @@ "token_manager = TokenManager()\n", "access_token = await token_manager.get_access_token('644fa8bb0000000000000000')\n", "access_token" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -756,8 +730,7 @@ "source": [ "item ={'_id': '6a21559cca3ad8a73b652bcb', 'db': 'competitions', 'col': 'competitions'} \n", "file_ids = ['681684390000000000000000', '6a21559cca3ad8a73b652bc6']" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -768,8 +741,7 @@ "source": [ "docs =[ doc async for doc in mongo_client['social']['social'].find({'user_id':'681684390000000000000000'})]\n", "doc = docs[1]" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -779,8 +751,7 @@ "outputs": [], "source": [ "competition = await competitions_col.find_one({'_id':ObjectId('6a21559cca3ad8a73b652bcb')})" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -790,8 +761,7 @@ "outputs": [], "source": [ "images = await get_images(db_name, file_ids, sign_avatar)" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -833,8 +803,7 @@ " })\n", " res = resp.json()\n", " res.update({'doc': doc})" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -844,8 +813,7 @@ "outputs": [], "source": [ "res" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -912,8 +880,7 @@ " update_spec = {\"$push\": {\"vk\": res}}\n", " await mongo_client[db_name][item.get('col')].update_one({'_id': ObjectId(item.get('_id'))}, update_spec)\n", " return {\"ok\": True}\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -952,8 +919,7 @@ " })\n", " print(resp_wall.json())\n", " \n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -963,8 +929,7 @@ "outputs": [], "source": [ "await competitions_col.find_one({'_id': competition['_id']})" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -979,8 +944,7 @@ " \"$push\": {\"vk\": resp_wall.json()}\n", " },\n", " )" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -995,8 +959,7 @@ " \"v\": \"5.199\",\n", " })\n", "resp.json()['response'][0]" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1006,8 +969,7 @@ "outputs": [], "source": [ "[doc async for doc in mongo_client['social']['social'].find({'user_id':competition['user']['id']})]" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1025,8 +987,7 @@ "})\n", "\n", "z.json()['response']" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1036,8 +997,7 @@ "outputs": [], "source": [ "#!pip freeze > requirements.txt" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1057,8 +1017,7 @@ " \"body\": \"group_id=191599084&user_id=392892935&role=moderator&is_contact=0&contact_position=&contact_phone=&contact_email=&permissions=&access_token=vk1.a.-kG07OUZgX5FrxtsQrU5QJh8HaP_suYXkqcg\",\n", " \"method\": \"POST\",\n", "});" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1076,8 +1035,7 @@ "VK_CLIENT_ID = 51852444\n", "SCOPES = 'offline,wall,photos,groups'\n", "redirect_uri = 'https://oauth.vk.ru/blank.html'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1108,8 +1066,7 @@ "url = f'{AUTHORIZE_URL}?responsetype_item=code&client_id={VK_CLIENT_ID}&scope={SCOPES}&redirect_uri={redirect_uri}&state={state}&code_challenge={code_challenge}&code_challenge_method=S256'\n", "\n", "print(f\"\\n\\n{url}\\n\\n\")" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1121,8 +1078,7 @@ "\n", "code='vk2.a.---'\n", "device_id=''" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1133,8 +1089,7 @@ "source": [ "refresh_token = \"vk2.a.-----\"\n", "device_id = \"-\"\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1153,8 +1108,7 @@ " 'state': os.urandom(32).hex(),\n", "})\n", "z.json()" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1165,8 +1119,7 @@ "source": [ "CLIENT_ID = 51852444\n", "OAUTH_URL = 'https://id.vk.com/oauth2/auth'" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1187,8 +1140,7 @@ " 'redirect_uri': 'https://oauth.vk.com/blank.html'\n", "})\n", "r.json()\n" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1209,8 +1161,7 @@ "\n", "z=T()\n", "z.json()" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1221,8 +1172,7 @@ "source": [ "refresh_token=r.json()['refresh_token']\n", "refresh_token" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1241,8 +1191,7 @@ " 'state': os.urandom(32).hex(),\n", "})\n", "z.json()" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1252,8 +1201,7 @@ "outputs": [], "source": [ "print(f'\\n\\n{z.json()['refresh_token']}\\n\\n')" - ], - "display_name": ".venv" + ] }, { "cell_type": "code", @@ -1263,8 +1211,7 @@ "outputs": [], "source": [ "users.search" - ], - "display_name": ".venv" + ] }, { "cell_type": "markdown", @@ -1650,7 +1597,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.6" + "version": "3.13.5" } }, "nbformat": 4,