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)
def cover_square(request, caller_context, container_user, chamber_character_name, grid_pos_x, grid_pos_y):
    ''' data only call, json response
    '''
    chamberController = ChamberController()
    chamber_character = Character.get_by_key_name(chamber_character_name)
    if not chamber_character:
        raise Exception('chamber owner character not found')
    
    uncover_square_result, info = chamberController.cover_dig_square(caller_context.config, container_user, chamber_character, int(grid_pos_x), int(grid_pos_y))
    
    if uncover_square_result:
        square = info # if success, info contains the item to return
        response_square = {
                             'gridPosX' : square.position_x,
                             'gridPosY' : square.position_y
                          }
        response =  { 'success' : True,
                      'square' : response_square
                    }
    else:
        response = { 'success' : False,
                     'reason' : info
                   }

    include_experience_data = False
    return json_response(caller_context, container_user, response, include_experience_data)
def chamber(request, caller_context, container_user, chamber_character_name=None):
    chamberController = ChamberController()
    if chamber_character_name:
        chamber_character = Character.get_by_key_name(chamber_character_name)
    else:
        chamber_character = container_user.character

    viewer_owns_chamber = False
    if chamber_character.key() == container_user.character.key():
        viewer_owns_chamber = True

    chamber_display = chamberController.get_chamber_display(caller_context.config, container_user.character, chamber_character)
    return render_to_response('chamber.html', locals())
def uncover_square(request, caller_context, container_user, chamber_character_name, grid_pos_x, grid_pos_y):
    ''' data only call, json response
    '''
    chamberController = ChamberController()
    chamber_character = Character.get_by_key_name(chamber_character_name)
    if not chamber_character:
        raise Exception('chamber owner character not found')
    
    uncover_square_result, info, air_level = chamberController.uncover_dig_square(caller_context.config, container_user, chamber_character, int(grid_pos_x), int(grid_pos_y))
    
    if uncover_square_result:
        square = info # if success, info contains the item to return
        response_square = {
                             'gridPosX' : square.position_x,
                             'gridPosY' : square.position_y,
                          }
        if square.item:
            response_square['item'] = { 
                                 'itemName' : square.item.item_name,
                                 'description' : square.item.description,
                                 'smallImageUrl' : caller_context.static_root + square.item.get_small_image_path(),
                                 'largeImageUrl' : caller_context.static_root + square.item.get_large_image_path()
                                 }
        else:
            response_square['item'] = None
        response =  { 'success' : True,
                      'airLevel' : air_level,
                      'square' : response_square
                    }
    else:
        response = { 'success' : False,
                     'reason' : info
                   }

    include_experience_data = False
    if uncover_square_result and square.item:
        characterController = CharacterController()
        characterController.add_character_reward(container_user.character, "found grid treasure", 'experience', 75)
        include_experience_data = True
        
    return json_response(caller_context, container_user, response, include_experience_data)
 def get_fake_characters(self, max_characters): 
     # grab some fake players to fill most of the pyramid
     query = Character.all()
     query.filter('is_fake', True)
     fake_characters = query.fetch(max_characters)
     return fake_characters