{"record":{"id":"e1bdc46cccd3a362","repo":"HKUDS/DeepTutor","slug":"role-must-be-admin-or-user-e1bdc4","errorCode":null,"errorMessage":"role must be 'admin' or 'user'","messagePattern":"role must be 'admin' or 'user'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"deeptutor/multi_user/identity.py","lineNumber":338,"sourceCode":"    target = directory / f\"{user_id}.{ext}\"\n    tmp = directory / f\"{user_id}.{ext}.tmp\"\n    tmp.write_bytes(data)\n    tmp.replace(target)\n    # A re-upload may change the extension; drop stale siblings.\n    for other in AVATAR_EXTENSIONS:\n        if other != ext:\n            (directory / f\"{user_id}.{other}\").unlink(missing_ok=True)\n    return target\n\n\ndef delete_avatar_file(user_id: str) -> None:\n    for ext in AVATAR_EXTENSIONS:\n        (_avatar_dir() / f\"{user_id}.{ext}\").unlink(missing_ok=True)\n\n\ndef set_role(username: str, role: Role) -> bool:\n    if role not in {\"admin\", \"user\"}:\n        raise ValueError(\"role must be 'admin' or 'user'\")\n    if not USERS_FILE.exists():\n        return False\n    users = load_users()\n    if username not in users:\n        return False\n    users[username][\"role\"] = role\n    _write_users(users)\n    return True\n\n\ndef load_or_create_auth_secret() -> str:\n    migrate_legacy_multi_user_tree()\n    _migrate_secret()\n    try:\n        if SECRET_FILE.exists():\n            existing = SECRET_FILE.read_text(encoding=\"utf-8\").strip()\n            if existing:\n                return existing","sourceCodeStart":320,"sourceCodeEnd":356,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/multi_user/identity.py#L320-L356","documentation":"Error \"role must be 'admin' or 'user'\" thrown in HKUDS/DeepTutor.","triggerScenarios":"Thrown at deeptutor/multi_user/identity.py:338 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}