def profile(request, status=200):
    """
    Get the user's profile. If the user has no assigned profile, the HTTP 404
    is returned. Make a POST request to modify the user's profile.

    GET parameters:
        html
            turn on the HTML version of the API
        username:
            username of user (only for users with public profile)
        stats:
            attache addition user statistics

    POST parameters (JSON):
        send_emails:
            switcher turning on sending e-mails to user
        public:
            swicher making the user's profile publicly available
        user:
            password:
                user's password
            password_check:
                user's password again to check it
            first_name (optional):
                user's first name
            last_name (optional):
                user's last name
    """
    if request.method == 'GET':
        if request.GET.get("username", False):
            try:
                user_profile = User.objects.get(username=request.GET.get("username"),
                                                userprofile__public=True).userprofile
            except ObjectDoesNotExist:
                raise Http404("user not found or have not public profile")
        else:
            user_id = get_user_id(request)
            if get_config('proso_user', 'google.openid.migration', default=True) and not is_user_id_overridden(request):
                migrated_user = migrate_google_openid_user(request.user)
                if migrated_user is not None:
                    auth.logout(request)
                    migrated_user.backend = 'social.backends.google.GoogleOAuth2'
                    auth.login(request, migrated_user)
            user_profile = get_object_or_404(UserProfile, user_id=user_id)
        return render_json(
            request, user_profile, status=status,
            template='user_profile.html', help_text=profile.__doc__)
    elif request.method == 'POST':
        with transaction.atomic():
            to_save = json_body(request.body.decode("utf-8"))
            user_id = get_user_id(request)
            user_profile = get_object_or_404(UserProfile, user_id=user_id)
            user = to_save.get('user', None)
            if 'send_emails' in to_save:
                user_profile.send_emails = bool(to_save['send_emails'])
            if 'public' in to_save:
                user_profile.public = bool(to_save['public'])
            if user:
                error = _save_user(request, user, new=False)
                if error:
                    return render_json(request, error, template='user_json.html', status=400)
            if 'properties' in to_save:
                user_profile.save_properties(to_save['properties'])
            user_profile.save()
        request.method = "GET"
        return profile(request, status=202)
    else:
        return HttpResponseBadRequest("method %s is not allowed".format(request.method))
def profile ( request , status = 200 ) : if request . method == 'GET' : if request . GET . get ( "username" , False ) : try : user_profile = User . objects . get ( username = request . GET . get ( "username" ) , userprofile__public = True ) . userprofile except ObjectDoesNotExist : raise Http404 ( "user not found or have not public profile" ) else : user_id = get_user_id ( request ) if get_config ( 'proso_user' , 'google.openid.migration' , default = True ) and not is_user_id_overridden ( request ) : migrated_user = migrate_google_openid_user ( request . user ) if migrated_user is not None : auth . logout ( request ) migrated_user . backend = 'social.backends.google.GoogleOAuth2' auth . login ( request , migrated_user ) user_profile = get_object_or_404 ( UserProfile , user_id = user_id ) return render_json ( request , user_profile , status = status , template = 'user_profile.html' , help_text = profile . __doc__ ) elif request . method == 'POST' : with transaction . atomic ( ) : to_save = json_body ( request . body . decode ( "utf-8" ) ) user_id = get_user_id ( request ) user_profile = get_object_or_404 ( UserProfile , user_id = user_id ) user = to_save . get ( 'user' , None ) if 'send_emails' in to_save : user_profile . send_emails = bool ( to_save [ 'send_emails' ] ) if 'public' in to_save : user_profile . public = bool ( to_save [ 'public' ] ) if user : error = _save_user ( request , user , new = False ) if error : return render_json ( request , error , template = 'user_json.html' , status = 400 ) if 'properties' in to_save : user_profile . save_properties ( to_save [ 'properties' ] ) user_profile . save ( ) request . method = "GET" return profile ( request , status = 202 ) else : return HttpResponseBadRequest ( "method %s is not allowed" . format ( request . method ) )
Get the user's profile. If the user has no assigned profile, the HTTP 404
    is returned. Make a POST request to modify the user's profile.

    GET parameters:
        html
            turn on the HTML version of the API
        username:
            username of user (only for users with public profile)
        stats:
            attache addition user statistics

    POST parameters (JSON):
        send_emails:
            switcher turning on sending e-mails to user
        public:
            swicher making the user's profile publicly available
        user:
            password:
                user's password
            password_check:
                user's password again to check it
            first_name (optional):
                user's first name
            last_name (optional):
                user's last name