Typing in Python is not yet very mature. This small example displays several issues:
if request.user.is_authenticated: return JsonResponse( { "user": { "uid": request.user.uid, "username": request.user.username, "email": request.user.email, } } )The original type of request.user is Union[AbstractBaseUser, AnonymousUser] (which itself is already wrong; the user is actually a Django model that inherits from AbstractBaseUser, not AbstractBaseUser). MyPy doesn’t understand that is_authenticated narrows the options, you need to do it manually using casting.
Here’s the final, working code:
if request.user.is_authenticated: user = cast(User, request.user) return JsonResponse( { "user": { "uid": user.uid, "username": user.username, "email": user.email, } } )