def create_output_file_program_crawler( output_dir_root: str, 
                                event_num: int, 
                                heat_num: int,
                                crawlwer_str: str ) -> int:
    """ Generate the filename and open the next file """

    output_dir = f"{output_dir_root}"

    logging.debug( f"CRW OUT: e: {event_num} h: {heat_num} {crawlwer_str}")
    output_file_name = f"{crawler_name_prefix}_event{event_num:0>2}_heat_{heat_num:0>2}.txt"

    sst_common.write_output_file( output_dir, output_file_name, crawlwer_str)

    return 1
Example #2
0
def create_output_file_results(output_dir: str, event_num: int,
                               output_list: list,
                               display_relay_swimmer_names: bool,
                               num_results_to_display: int) -> int:
    """ Generate the filename and open the next file """

    num_files_generated = 0
    num_results_generated = 0
    output_str = ""

    ## Ignore the case where we get event0 heat0
    if event_num == 0:
        return 0

    logging.info(f"RESULTS: e: {event_num} create_output_file_results")

    ## Loop through list in reverse order
    #for num in range( num_events-1, -1, -1):
    for output_tuple in output_list:
        row_type = output_tuple[0]
        row_text = output_tuple[1]

        logging.info(f"RESULTS: e: {event_num} id: {row_type} t: {row_text}")

        ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
        if row_type == 'H4':
            output_str += row_text + '\n'
            #output_str += '\n'
        elif row_type == 'H6':
            output_str += g_unofficial_results + '\n'
            output_str += row_text + '\n'
        elif row_type == 'PLACE':
            output_str += row_text + '\n'
            num_results_generated += 1
        elif row_type == 'NAME' and display_relay_swimmer_names:
            output_str += row_text + '\n'

        if num_results_generated >= num_results_to_display:
            break

    output_file_name = f"{g_file_name_prefix}{event_num:0>2}_{g_file_name_suffix}.txt"
    sst_common.write_output_file(output_dir, output_file_name, output_str)
    num_files_generated += 1

    return num_files_generated
Example #3
0
def create_output_result_scores_champ_by_gender(
        output_dir_root: str, output_list: list,
        num_results_to_display: int) -> int:
    num_files_generated = 0
    num_results_generated = 0
    output_dir = f"{output_dir_root}"

    for gender in ["Women", "Men"]:
        output_str = ""
        for output_tuple in output_list:
            row_type = output_tuple[0]
            row_text = output_tuple[1]

            logging.debug(f"RSCORES: g: {gender} {row_type} t: {row_text}")

            ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
            if row_type == 'H2':
                output_str += row_text + '\n'
            elif row_type == 'H3':
                output_str += '\n'
            elif row_type == 'H4' and row_text == f"Scores - {gender}":
                output_str += row_text + '\n'
                output_str += '\n'
            elif row_type == 'H4' and row_text == f"{gender}":
                output_str += row_text + '\n'
                output_str += '\n'
            elif row_type == 'H5':
                output_str += row_text + '\n'
            elif row_type == 'H6':
                output_str += row_text + '\n'
            elif row_type == f"SCORE_{gender}":
                output_str += row_text + '\n'

            # num_results_generated += 1
            # if num_results_generated >= num_results_to_display:
            #     break;

        gender_lowercase = gender.lower()
        logging.warning(f"SCORES: {output_str}")
        output_file_name = f"score_champsionship_{gender_lowercase}.txt"
        sst_common.write_output_file(output_dir, output_file_name, output_str)
        num_files_generated += 1

    return num_files_generated
def create_output_file_program_nameonly( output_dir_root: str, 
                                event_num: int, 
                                heat_num: int,
                                output_list: list, 
                                display_relay_swimmer_names: bool ) -> int:
    """ Generate the filename and open the next file """
   
    global event_num_relay
    num_files_created = 0
    split_num = 1
    output_str = ""
    
    ## Ignore the case where we get event0 heat0
    if event_num == 0:
        return 0

    output_dir = f"{output_dir_root}/"
    
    ## For non relay events
    output_file_name = f"{file_name_prefix}{event_num:0>2}_LANE_OVERLAY_heat_{heat_num:0>2}.txt"

    #header_list = ['H4', 'H5', 'H6']
    header_list = ['H4', 'H5']

    count =0 
    for output_tuple in output_list:
        row_type = output_tuple[0]
        row_text = output_tuple[1]

        logging.debug(f"NAMEONLY: e: {event_num} h: {event_num} id: {row_type} t: {row_text}")

        ## May want header info, if it fits on screen
        if row_type == 'H4':
            output_str += row_text + '\n'
        elif row_type == 'H5':
              output_str += row_text + '\n'+ '\n'
        elif row_type == 'NAMEONLY':
            output_str += row_text + '\n'

    sst_common.write_output_file(output_dir, output_file_name, output_str)
    num_files_created += 1

    return num_files_created
Example #5
0
def generate_empty_results(output_dir: str, awards: bool) -> int:

    output_str = ""

    num_empty_files_created = 0
    ## Allow for commenting out any type of event quickly during a meet
    empty_event_list = []
    empty_event_list += sst_common.event_num_individual
    empty_event_list += sst_common.event_num_relay
    empty_event_list += sst_common.event_num_diving

    suffix = g_file_name_awards if awards else g_file_name_suffix

    for event_num in empty_event_list:
        output_file_name = f"{g_file_name_prefix}{event_num:0>2}_{suffix}.txt"
        sst_common.write_output_file(output_dir, output_file_name, output_str)
        num_empty_files_created += 1

    return num_empty_files_created
def create_output_file_scores_dual_by_gender(
        output_dir_root: str, output_list: list,
        num_results_to_display: int) -> int:
    num_files_generated = 0
    num_results_generated = 0
    output_str = ""
    output_dir = f"{output_dir_root}"

    for report_type in ["Men", "Women"]:
        output_str = ""
        num_results_generated = 0
        for output_tuple in output_list:
            row_type = output_tuple[0]
            row_text = output_tuple[1]

            logging.debug(
                f"DUAL SCORES: g: {report_type} r: {row_type} t: {row_text}")

            ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
            if row_type == 'H2':
                output_str += row_text + '\n'
            elif row_type == 'H3':
                output_str += row_text + '\n'
                output_str += '\n'
            elif row_type == 'H4':
                output_str += row_text + '\n'
                output_str += '\n'
            elif row_type == 'H6' + report_type:
                output_str += row_text + '\n'
            elif row_type == report_type:
                output_str += row_text + '\n'

                num_results_generated += 1
                if num_results_generated >= num_results_to_display:
                    break

        gender_lowercase = report_type.lower()
        output_file_name = f"score_dual_{gender_lowercase}.txt"
        sst_common.write_output_file(output_dir, output_file_name, output_str)
        num_files_generated += 1

    return num_files_generated
def create_output_file_scores_dual_combined(
        output_dir_root: str, output_list: list,
        num_results_to_display: int) -> int:
    num_files_generated = 0
    num_results_generated = 0
    output_str = ""
    output_dir = f"{output_dir_root}"
    print_header = True

    for report_type in ["Men", "Women"]:
        num_results_generated = 0
        for output_tuple in output_list:
            row_type = output_tuple[0]
            row_text = output_tuple[1]

            logging.debug(
                f"DUAL SCORES: g: {report_type} r: {row_type} t: {row_text}")

            ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
            if row_type == 'H2' and print_header:
                output_str += f"{row_text:>50}" + '\n'
            elif row_type == 'H3' and print_header:
                output_str += f"{row_text:>55}" + '\n'
                output_str += '\n'
            elif row_type == 'H4' and print_header:
                output_str += row_text + '\n'
            elif row_type == 'H6' + report_type:
                output_str += '\n' + f"{row_text:>38}" + '\n'
                print_header = False
            elif row_type == report_type:
                output_str += row_text + '\n'

                num_results_generated += 1
                if num_results_generated >= num_results_to_display:
                    break

    output_file_name = f"score_dual_combined.txt"
    sst_common.write_output_file(output_dir, output_file_name, output_str)
    num_files_generated += 1

    return num_files_generated
def create_output_file_scores_champ(output_dir_root: str, output_list: list,
                                    gender_of_scores: str,
                                    num_results_to_display: int) -> int:
    num_files_generated = 0
    num_results_generated = 0
    output_str = ""
    output_dir = f"{output_dir_root}"

    for output_tuple in output_list:
        row_type = output_tuple[0]
        row_text = output_tuple[1]

        logging.debug(f"SCORES: {row_type} t: {row_text}")

        ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
        if row_type == 'H2':
            output_str += row_text + '\n'
        elif row_type == 'H3':
            output_str += row_text + '\n'
            output_str += '\n'
        elif row_type == 'H4':
            output_str += row_text + '\n'
            output_str += '\n'
        elif row_type == 'H6':
            output_str += row_text + '\n'
        elif row_type == 'SCORE':
            output_str += row_text + '\n'

        num_results_generated += 1
        if num_results_generated >= num_results_to_display:
            break

    gender_lowercase = gender_of_scores.lower()
    output_file_name = f"score_champsionship_{gender_lowercase}.txt"
    sst_common.write_output_file(output_dir, output_file_name, output_str)
    num_files_generated += 1

    return num_files_generated
Example #9
0
def create_output_result_scores_champ_combined(
        output_dir_root: str, output_list: list,
        num_results_to_display: int) -> int:
    num_files_generated = 0
    num_results_generated = 0
    output_dir = f"{output_dir_root}"

    output_str = ""
    for output_tuple in output_list:
        row_type = output_tuple[0]
        row_text = output_tuple[1]

        logging.debug(f"RSCORES: g: combined {row_type} t: {row_text}")

        ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
        if row_type == 'H2':
            output_str += f"{row_text:<40}" + '\n'
        elif row_type == 'H3':
            pass
        elif row_type == 'H4':
            output_str += '\n' + row_text + '\n'
        elif row_type == 'H5':
            output_str += row_text + '\n'
        elif row_type == 'H6':
            output_str += row_text + '\n'
        elif row_type.startswith("SCORE"):
            output_str += row_text + '\n'

        # num_results_generated += 1
        # if num_results_generated >= num_results_to_display:
        #     break;

    output_file_name = f"score_champsionship_combined.txt"
    sst_common.write_output_file(output_dir, output_file_name, output_str)
    num_files_generated += 1

    return num_files_generated
def create_output_file_program_format2( output_dir_root: str, 
                                event_num: int, 
                                heat_num: int,
                                output_list: list, 
                                display_relay_swimmer_names: bool,
                                split_relays_to_multiple_files: bool ) -> int:
    """ Generate the filename and open the next file """
   
    global event_num_relay
    num_files_created = 0
    split_num = 1
    output_str = ""
    lane_str = ""
    missing_name_for_this_lane = False

    ## Ignore the case where we get event0 heat0
    if event_num == 0:
        return 0

    output_dir = f"{output_dir_root}/"
    lane_str_without_names = ""
    ## For non relay events
    output_file_name = f"{file_name_prefix}{event_num:0>2}_{file_name_suffix}_heat_{heat_num:0>2}.txt"
    
    re_relay_lane_line = re.compile('^\s*(\d{1,2})\s+(\S+)\s+(\S)')

    #header_list = ['H4', 'H5', 'H6']
    header_list = ['H4', 'H5']
    for output_tuple in output_list:
        row_type = output_tuple[0]
        row_text = output_tuple[1]

        logging.debug(f"PROGRAM: e: {event_num} h: {event_num} id: {row_type} t: {row_text}")

        ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
        #if row_type in header_list:
        if row_type == 'H4':
            output_str += f"{row_text.rjust(55)}" + '\n'
        elif row_type == 'H5':
            output_str += f"{row_text.rjust(45)}" + '\n'
        elif row_type == 'H6':
            output_str += '\n' + "  Ln Team     Swimmers" + '\n'
        elif row_type == 'LANE':
            ##
            ## If we have a second lane, but no name for the previous lane due 
            ## to no names being entered, write out lane/team info only
            if missing_name_for_this_lane:
               output_str += lane_str_without_names 
            
            missing_name_for_this_lane = True
            lane_str = row_text
            #  1 SST  D X2:37.00
            relay_lane_line = re_relay_lane_line.findall(row_text)
            if relay_lane_line:
                relay_lane = str(relay_lane_line[0][0]).strip()
                relay_sch  = str(relay_lane_line[0][1]).strip()
                relay_name = str(relay_lane_line[0][2]).strip()
                lane_str = f"{relay_lane:>4} {relay_sch:<4} {relay_name}"
                lane_str_without_names = f"{lane_str:<2}\n"

            #output_str += row_text + '\n'
        elif row_type == 'NAME':
            missing_name_for_this_lane = False

            name_str = reformat_relay_swimmers_names( row_text )
            #output_str += row_text + '\n'
            output_str += f"{lane_str:<2} {name_str:<68}\n"
            ## If split, space it out for readability
            if split_relays_to_multiple_files:
                output_str += '\n'

    
    logging.debug(f"RELAY: {output_str}")
    sst_common.write_output_file(output_dir, output_file_name, output_str)
    num_files_created += 1

    return num_files_created
def create_output_file_program_format1( output_dir_root: str, 
                                event_num: int, 
                                heat_num: int,
                                output_list: list, 
                                display_relay_swimmer_names: bool,
                                split_relays_to_multiple_files: bool ) -> int:
    """ Generate the filename and open the next file """
   
    global event_num_relay
    num_files_created = 0
    split_num = 1
    output_str = ""
    
    ## Ignore the case where we get event0 heat0
    if event_num == 0:
        return 0

    output_dir = f"{output_dir_root}/"
    
    ## For non relay events
    output_file_name = f"{file_name_prefix}{event_num:0>2}_{file_name_suffix}_heat_{heat_num:0>2}.txt"

    ## Count the number of lanes in the RELAY
    num_relay_lane = 0
    if event_num in sst_common.event_num_relay:
        for output_tuple in output_list:
            row_type = output_tuple[0]
            
            if row_type == 'LANE':
                num_relay_lane += 1

    header_list = ['H4', 'H5', 'H6']
    header_str = ""
    ## Loop through list in reverse order
    #for num in range( num_events-1, -1, -1):
    count =0 
    for output_tuple in output_list:
        row_type = output_tuple[0]
        row_text = output_tuple[1]

        logging.debug(f"PROGRAM: e: {event_num} h: {event_num} id: {row_type} t: {row_text}")

        ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
        if row_type in header_list:
            output_str += row_text + '\n'
            header_str += row_text + '\n'
        elif row_type == 'LANE':
            output_str += row_text + '\n'
        elif row_type == 'NAME' and display_relay_swimmer_names:
            output_str += row_text + '\n'
            ## If split, space it out for readability
            if split_relays_to_multiple_files:
                output_str += '\n'

        ## If we have more then 6 relay entries create second output file, if requested to do so
        if split_relays_to_multiple_files and num_relay_lane > 7 and count == 5:
            count = -99
            output_file_name = f"{file_name_prefix}{event_num:0>2}_{file_name_suffix}_heat_{heat_num:0>2}_split{split_num:0>2}.txt"
            
            sst_common.write_output_file(output_dir, output_file_name, output_str)
            output_str = header_str
            ## Regenerate the header?  Need a better way to do this
            num_files_created += 1
            split_num += 1
            output_file_name = f"{file_name_prefix}{event_num:0>2}_{file_name_suffix}_heat_{heat_num:0>2}_split{split_num:0>2}.txt"

        if row_type == 'LANE':
            count += 1
    
    sst_common.write_output_file(output_dir, output_file_name, output_str)
    num_files_created += 1

    return num_files_created
Example #12
0
def create_output_file_results_crawler(output_dir_root: str,
                                       crawler_list: list,
                                       last_num_events: int):
    """ Given a list of tuples (evnt num, crawler_string), generate output files """

    output_dir = f"{output_dir_root}/"
    num_files_generated = 0

    ## Generate individual files per meet
    for crawler_event in crawler_list:
        event_num = crawler_event[0]
        crawler_text = crawler_event[1]

        logging.debug(f"crawler: e: {event_num} t: {crawler_text}")
        ## Generate event specific file
        if event_num > 0:
            #output_file_name = f"{g_crawler_name_prefix}_result_event{event_num:0>2}.txt"
            output_file_name = f"{g_crawler_name_prefix}_result_event{event_num:0>2}.txt"
            sst_common.write_output_file(output_dir, output_file_name,
                                         crawler_text)
            num_files_generated += 1
        ## Genreate special file for the meet name
        elif event_num == sst_common.headerNum2:
            output_file_name = f"{g_crawler_name_prefix}__MeetName.txt"
            sst_common.write_output_file(output_dir, output_file_name,
                                         crawler_text)
            num_files_generated += 1

    ## Generate single file for all scored events in reverse order
    crawler_text = ""
    crawler_text_last_num_events = ""
    meet_name = ""
    num_events = len(crawler_list)
    last_num_events_generated = 0

    ## Loop through list in reverse order to generate crawler string with multiple events
    for num in range(num_events - 1, -1, -1):
        crawler_event = crawler_list[num]
        event_num = crawler_event[0]
        event_text = crawler_event[1]

        ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
        if event_num > 0:
            crawler_text += f" | {event_text}"
            if last_num_events_generated < last_num_events:
                crawler_text_last_num_events += f" | {event_text}"
                last_num_events_generated += 1
        elif event_num == sst_common.headerNum2:
            meet_name = event_text

    ## Add meet_name to front of string
    crawler_text = f"{meet_name} {crawler_text}"
    ## Create the crawler file with ALL events completed so far
    all_events_file_name = f"{g_crawler_name_prefix}__AllEventsReverse.txt"
    output_file_name = all_events_file_name
    sst_common.write_output_file(output_dir, output_file_name, crawler_text)
    num_files_generated += 1

    ## Create the crawler file with last_num events
    #last_xx_events_file_name = f"{g_crawler_name_prefix}__Last_{last_num_events:0>2}_events.txt"
    last_xx_events_file_name = f"{g_crawler_name_prefix}__Last_XX_events.txt"
    output_file_name = last_xx_events_file_name
    sst_common.write_output_file(output_dir, output_file_name,
                                 crawler_text_last_num_events)
    num_files_generated += 1

    return num_files_generated
Example #13
0
def create_output_file_awards(output_dir: str, event_num: int,
                              output_list: list,
                              display_relay_swimmer_names: bool,
                              num_results_to_display: int) -> int:
    """ Generate the filename and open the next file """

    num_files_generated = 0
    num_results_generated = 0
    output_str = ""

    re_results_header = re.compile('^(.*) (Pts|Points)$')

    ## Ignore the case where we get event0 heat0
    if event_num == 0:
        return 0

    logging.info(f"AWARDS: e: {event_num} create_output_file_awards")

    ## Loop through list in reverse order
    #for num in range( num_events-1, -1, -1):
    for output_tuple in output_list:
        row_type = output_tuple[0]
        row_text = output_tuple[1]

        logging.info(f"AWARDS: e: {event_num} id: {row_type} t: {row_text}")

        ## Save off the meet name, which somes at the end of the procesing as we are looping in reverse order
        if row_type == 'H4':
            ## Awards are top justified. Start text below logo
            # output_str += '\n' + '\n'
            output_str += row_text + '\n'
        elif row_type == 'H6':
            place_header_list = re_results_header.findall(row_text)
            if place_header_list:
                placeline_header = str(place_header_list[0][0]).strip()
                output_str += placeline_header + '\n'
            else:
                output_str += row_text + '\n'

        elif row_type == 'PLACE':

            ## Ignore non-scoring entries (i.e. only two non-exhibition relays in event)
            if row_text.startswith(" --- "):
                break
            ## Stop if we hit our top three winners, plus RELAY names
            if num_results_generated >= num_results_to_display:
                break

            ## Lets try to remvoe the POINTS of the PLACE since its always the first XX place winners
            re_results_place = re.compile('^(.*) (\d){1,2}$')
            place_line_list = re_results_place.findall(row_text)

            if place_line_list:
                placeline_place = str(place_line_list[0][0]).strip()
                placeline_points = str(place_line_list[0][1]).strip()
                logging.error(
                    f"PLACE: 1: {placeline_place} 2: {placeline_points}")
                output_str += placeline_place + '\n'
            else:
                output_str += row_text + '\n'
            num_results_generated += 1
    # elif row_type == 'NAME':
    #     output_str += row_text + '\n'
        elif row_type == 'NAME' and display_relay_swimmer_names:
            output_str += row_text + '\n'

    ## One more blank line to keep last line off bottom of screen
    output_str += '\n'
    output_file_name = f"{g_file_name_prefix}{event_num:0>2}_{g_file_name_awards}.txt"
    sst_common.write_output_file(output_dir, output_file_name, output_str)
    num_files_generated += 1

    return num_files_generated