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
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
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
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
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
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
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