42 lines
1.3 KiB
Bash
Executable File
42 lines
1.3 KiB
Bash
Executable File
set -euo pipefail
|
|
DIR="services/match/src/app/schemas"
|
|
[ -d "$DIR" ] || { echo "Not found: $DIR"; exit 1; }
|
|
|
|
python3 - "$DIR" <<'PY'
|
|
from pathlib import Path
|
|
import re, sys
|
|
d = Path(sys.argv[1])
|
|
for p in d.glob("*.py"):
|
|
s = p.read_text(); orig = s
|
|
if "class " not in s:
|
|
continue
|
|
|
|
if "from uuid import UUID" not in s:
|
|
s = "from uuid import UUID\n" + s
|
|
|
|
# самые частые поля
|
|
s = re.sub(r'(\bid\s*:\s*)str', r'\1UUID', s)
|
|
s = re.sub(r'(\buser_id_a\s*:\s*)str', r'\1UUID', s)
|
|
s = re.sub(r'(\buser_id_b\s*:\s*)str', r'\1UUID', s)
|
|
s = re.sub(r'(\buser_id\s*:\s*)str', r'\1UUID', s)
|
|
|
|
# включаем from_attributes / orm_mode для Out/Response моделей
|
|
def patch_block(m):
|
|
block = m.group(0)
|
|
if "model_config" in block or "orm_mode" in block:
|
|
return block
|
|
return (block +
|
|
"\n try:\n from pydantic import ConfigDict\n model_config = ConfigDict(from_attributes=True)\n"
|
|
" except Exception:\n class Config:\n orm_mode = True\n")
|
|
|
|
s = re.sub(r"class\s+\w+(Out|Response)\s*\([^\)]*\)\s*:(?:\n\s+.+)+", patch_block, s)
|
|
|
|
if s != orig:
|
|
p.write_text(s)
|
|
print("[match] Patched:", p)
|
|
PY
|
|
|
|
echo "[match] Rebuild & restart…"
|
|
docker compose build match
|
|
docker compose restart match
|