def assign_character(request, caller_context, container_user):
    ''' data only call, json response
    '''
    
    characterController = CharacterController()
    logging.info('request is: %s' % request)
    if container_user.character:
        json = '{ "success" : true, "message" : "character already assign to this user" }'
        return HttpResponse(json)
    if not 'character_name' in request.REQUEST:
        json = '{ "success" : false, "message" : "Missing required field \'character_name\'" }'
        return HttpResponse(json)
    character_name = request.REQUEST['character_name'].strip()
    character_name = characterController.unquote_u(character_name)
    character_name = re.sub(r'[\'\"<>`]', ' ', character_name)

    character = Character.get_by_key_name(character_name)
    if character:
        container_users = characterController.get_character_users(character)
        if len(container_users):
            # no other container_user has this character, was probably an error in assignment for this user, so assign it now
            container_user.character = character 
            json = '{ "success" : true, "message" : "Found existing character and assigned it to user" }'
            return HttpResponse(json)
        json = '{ "success" : false, "message" : "Character name is already in use" }'
        return HttpResponse(json)
    character = characterController.create_character(caller_context.config, character_name, container_user.profile_image_url, is_fake=False)
    container_user.character = character
    container_user.put()
    response = { "success" : True, 
                 "message" : "Successfully associated character to container user" }
    return json_response(caller_context, container_user, response, False)