(
request: Request,
fragment: str | None = Query(None),
current_user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_db),
settings: Settings = Depends(get_settings),
queue: ArqRedis = Depends(get_queue),
redis=Depends(get_redis_client),
)
| 40 | |
| 41 | @router.api_route("/settings", methods=["GET", "POST"], name="user_settings") |
| 42 | async def user_settings( |
| 43 | request: Request, |
| 44 | fragment: str | None = Query(None), |
| 45 | current_user: User = Depends(get_current_user), |
| 46 | db: AsyncSession = Depends(get_db), |
| 47 | settings: Settings = Depends(get_settings), |
| 48 | queue: ArqRedis = Depends(get_queue), |
| 49 | redis=Depends(get_redis_client), |
| 50 | ): |
| 51 | # Delete |
| 52 | delete_form: Any = await UserDeleteForm.from_formdata(request, user=current_user) |
| 53 | if request.method == "POST" and fragment == "danger": |
| 54 | if await delete_form.validate_on_submit(): |
| 55 | try: |
| 56 | # User is marked as deleted, actual cleanup is delegated to a job |
| 57 | current_user.status = "deleted" |
| 58 | await db.commit() |
| 59 | |
| 60 | await queue.enqueue_job("delete_user", current_user.id) |
| 61 | |
| 62 | flash( |
| 63 | request, |
| 64 | _( |
| 65 | 'User "%(name)s" has been marked for deletion.', |
| 66 | name=current_user.name, |
| 67 | ), |
| 68 | "success", |
| 69 | ) |
| 70 | |
| 71 | return RedirectResponse("/auth/logout", status_code=303) |
| 72 | except Exception as e: |
| 73 | await db.rollback() |
| 74 | logger.error( |
| 75 | f'Error marking user "{current_user.username}" as deleted: {str(e)}' |
| 76 | ) |
| 77 | flash( |
| 78 | request, |
| 79 | _("An error occurred while marking the user for deletion."), |
| 80 | "error", |
| 81 | ) |
| 82 | |
| 83 | return RedirectResponse( |
| 84 | url=str(request.url_for("user_settings")) + "#danger", |
| 85 | status_code=303, |
| 86 | ) |
| 87 | |
| 88 | # General |
| 89 | general_form: Any = await UserGeneralForm.from_formdata( |
| 90 | request, |
| 91 | data={"name": current_user.name, "username": current_user.username}, |
| 92 | db=db, |
| 93 | user=current_user, |
| 94 | ) |
| 95 | |
| 96 | if fragment == "general": |
| 97 | if request.method == "POST" and await general_form.validate_on_submit(): |
| 98 | # Name |
| 99 | current_user.name = general_form.name.data or "" |
nothing calls this directly
no test coverage detected