40:def _set_session_cookie(response: Response, token: str) -> None:
53:@router.post("/register", status_code=201)
54:async def register(payload: RegisterIn, request: Request, response: Response,
70:@router.post("/login")
71:async def login(payload: LoginIn, request: Request, response: Response,
85:@router.post("/logout")
86:async def logout(response: Response):
92:@router.get("/me")
93:async def me(user=Depends(get_current_user)):
101:async def google_start_impl(user):
116:@router.get("/google/start")
117:async def google_start(request: Request, user=Depends(get_current_user)):
121:@router.get("/google/callback")
122:async def google_callback(request: Request, code: str = "", state: str = "", error: str = "",
=== send_tasks ===
46:def classify_error(msg: str) -> str:
57:def now():
62:    def on_failure(self, exc, task_id, args, kwargs, einfo):
66:@celery_app.task(bind=True, base=SendTask, name="app.tasks.send_tasks.send_one",
68:def send_one(self, campaign_id: int, campaign_recipient_id: int):
291:def _recipient_dict(r) -> dict:
297:def _plain_fallback(html: str) -> str:
304:def _unsubscribe_url(recipient, campaign) -> str:
311:def _sanitize_response(resp) -> str:
318:def _rate_window(key: str, interval: float):
340:def _reschedule(db, task, campaign_id, cr, job, delay: timedelta, reason: str):
351:def _handle_send_error(db, task, campaign, cr, job, account, attempt, error: str):
407:def _push_dlq(campaign_id, cr_id, error):
416:def _publish_control(campaign_id, action, reason=""):
425:def _publish_progress(campaign_id):
