cd /home/def/otb_billing/backend || exit 1 STAMP="$(date +%Y%m%d-%H%M%S)" cp app.py "app.py.retry-email.${STAMP}.bak" python3 <<'PY' from pathlib import Path p = Path("app.py") text = p.read_text() old = """ send_configured_email( to_email=invoice_email_row.get("client_email"), subject=subject, html_body=html, attachments=attachments ) return True except Exception: return False """ new = """ import time for attempt in range(3): try: send_configured_email( to_email=invoice_email_row.get("client_email"), subject=subject, html_body=html, attachments=attachments ) return True except Exception as e: print(f"[email retry] attempt {attempt+1} failed: {e}") time.sleep(2) print(f"[send_payment_received_email] FAILED after retries invoice_id={invoice_id}") return False """ if old not in text: raise SystemExit("FAILED: send email block not found") text = text.replace(old, new, 1) p.write_text(text) print("OK: retry logic added") PY python3 -m py_compile app.py && echo "PY_COMPILE_OK" || echo "PY_COMPILE_FAILED" sudo systemctl restart otb_billing