def process_delete_attr_form(global_config, form):
    global_config['logger'].debug( 'Process Attribute Delete Form' )

    season = form[attr_delete_season_label].value
    comp = form[attr_delete_comp_label].value
    team = form[attr_delete_team_number_label].value
    attr_name = form[attr_delete_attribute_name_label].value
    old_value = form[attr_delete_old_value_label].value
    
    # Initialize the database session connection
    db_name  = global_config['db_name'] + global_config['this_season']
    session  = DbSession.open_db_session(db_name)
    
    attrdef_filename = WebCommonUtils.get_attrdef_filename(short_comp=comp)
    if attrdef_filename is not None:
        attr_definitions = AttributeDefinitions.AttrDefinitions(global_config)
        attr_definitions.parse(attrdef_filename)
        attr_def = attr_definitions.get_definition(attr_name)

        try:
            DataModel.deleteAttributeValue(session, team, comp+season, attr_name, old_value, attr_def)
            result = 'Scouting Data Attribute Value %s Successfully Removed From %s' % (old_value,attr_name)
            session.commit()
        except ValueError as reason:   
            result = 'Error Removing Scouting Data Attribute Value %s From %s: %s' % (old_value,attr_name,reason)
                
    session.remove()
    return result
def remove_file_data(global_config, session, attr_definitions, data_filename, remove_from_processed_files=False):
    print 'removing data file: %s'%data_filename
    
    competition = global_config['this_competition'] + global_config['this_season']
    input_dir = './static/data/' + competition + '/ScoutingData/'
    filepath = input_dir+data_filename
    # Initialize the file_attributes dictionary in preparation for the
    # parsing of the data file
    file_attributes = {}
    
    # Parse the data file, removing all the information in the file_attributes
    # dictionary
    try:
        FileParser.FileParser(filepath).parse(file_attributes)
    except:
        raise ValueError('Error Opening File')

    # The team number can be retrieved from the Team attribute, one of the
    # mandatory attributes within the data file
    team = file_attributes['Team']
    
    # Also, extract the competition name, too, if it has been included in
    # the data file
    if file_attributes.has_key('Competition'):
        competition = file_attributes['Competition']
    else:
        competition = global_config['this_competition'] + global_config['this_season']

        if competition == None:
            raise Exception( 'Competition Not Specified!')
    
    # Loop through the attributes from the data file and post them to the
    # database
    for attribute, value in file_attributes.iteritems():
        if value is None:
            value = ''
        attr_definition = attr_definitions.get_definition(attribute)
        if attr_definition == None:
            raise ValueError( 'No Attribute Defined For Attribute: %s' % attribute )
        elif attr_definition['Database_Store']=='Yes':
            DataModel.deleteAttributeValue(session, team, competition, attribute, value, attr_definition, no_throw=True)
            
    if remove_from_processed_files:
        DataModel.deleteProcessedFile(session, filepath)

    score = DataModel.calculateTeamScore(session, team, competition, attr_definitions)
    DataModel.setTeamScore(session, team, competition, score)
def remove_json_file_data(global_config, request_path):

    # Initialize the database session connection
    db_name  = global_config['db_name'] + global_config['this_season']
    session  = DbSession.open_db_session(db_name)

    if request_path.startswith('static'):
        fullpath = './' + request_path

        if os.path.exists(fullpath) is False:
            return

        competition = request_path.split('/')[2]

        print 'Removing scouting data from JSON file: %s' % fullpath
        filename = fullpath.split('/')[-1]

        with open(fullpath) as fd:
            scouting_data = json.load(fd)
            if filename.startswith('Match'):
                team = scouting_data['Setup'].get('Team')
            elif filename.startswith('Pit'):
                team = scouting_data['Pit'].get('Team')

            if team is not None and len(team) > 0:
                attr_definitions = AttributeDefinitions.AttrDefinitions(global_config)
                for section_name, section_data in scouting_data.iteritems():
                    if isinstance(section_data,dict):
                        for attr_name, attr_value in section_data.iteritems():

                            # use the attribute definitions to control whether information gets
                            # stored to the database rather than the hard coded stuff here.
                            # also need to consider the section/category name as the attributes
                            # and definitions are processed

                            # don't store the team number in the database
                            if attr_name == 'Team':
                                continue

                            # augment the attribute name with the section name in order to make the attribute
                            # unique
                            attr_name = '%s:%s' % (section_name, attr_name)

                            attribute_def = {}
                            attribute_def['Name'] = attr_name
                            if attr_value.isdigit():
                                attribute_def['Type'] = 'Integer'
                                attribute_def['Weight'] = 1.0
                            else:
                                attribute_def['Type'] = 'String'
                                attribute_def['Weight'] = 0.0
                            attribute_def['Statistic_Type'] = 'Average'
                            attr_definitions.add_definition(attribute_def)

                            category = 'Match'
                            try:
                                DataModel.deleteAttributeValue(session, int(team), competition, 
                                                               attr_name, attr_value, attribute_def)
                            except Exception, exception:
                                traceback.print_exc(file=sys.stdout)
                                exc_type, exc_value, exc_traceback = sys.exc_info()
                                exception_info = traceback.format_exception(exc_type, exc_value,exc_traceback)
                                for line in exception_info:
                                    line = line.replace('\n','')
                                    global_config['logger'].debug(line)
                    else:
                        print 'Unexpected entry in scouting data file, name: %s, value: %s' % (section_name,section_data)

                score = DataModel.calculateTeamScore(session, int(team), competition, attr_definitions)
                DataModel.setTeamScore(session, int(team), competition, score)
                session.commit()