diff --git a/tool.py b/tool.py index 19d8831..bdf2310 100644 --- a/tool.py +++ b/tool.py @@ -10,9 +10,8 @@ import http.server import socketserver import threading -from tqdm import tqdm +from tqdm import tqdm import shutil -import math init() @@ -108,45 +107,34 @@ def show_about_section(): def josaa_rounds_year(): os.system("cls" if os.name == "nt" else "clear") print(Fore.GREEN + ascii_art) - # progress bar of step 1 - total = 100 - steps_completed = int(total * 0.1) - display_progress_bar("STEP 1/10 ", steps_completed=steps_completed, total=total, duration=0.3) - - applied_filters = {"Counseling Type": "JOSAA"} + total=100 + steps_completed= int(total*0.1) + display_progress_bar("STEP 1/10 ",steps_completed=steps_completed,total=total, duration=0.3) - josaa_round_year = None # initialize print(Fore.YELLOW + "Select JOSAA round year") print(Fore.GREEN + "1." + Fore.BLUE + "2022") print(Fore.GREEN + "2." + Fore.BLUE + "2023") print(Fore.GREEN + "3." + Fore.BLUE + "2024" + Fore.RESET) - while josaa_round_year is None: - josaa_round_year_sel = input("Select Option (1 to 3): ").strip() - - if josaa_round_year_sel == "1": - josaa_round_year = "2022" - elif josaa_round_year_sel == "2": - josaa_round_year = "2023" - elif josaa_round_year_sel == "3": - josaa_round_year = "2024" - else: - print(Fore.RED + "Invalid input! Please select a number between 1 and 3." + Fore.RESET) - - applied_filters["Year"] = josaa_round_year - josaa_rounds(josaa_round_year, applied_filters) - -def josaa_rounds(josaa_round_year, applied_filters): + josaa_round_year_sel = input("Select Option (1 to 3): ") + if josaa_round_year_sel == "1": + josaa_round_year = "2022" + elif josaa_round_year_sel == "2": + josaa_round_year = "2023" + elif josaa_round_year_sel == "3": + josaa_round_year = "2024" + print(josaa_round_year) + josaa_rounds(josaa_round_year) + + +def josaa_rounds(josaa_round_year): os.system("cls" if os.name == "nt" else "clear") print(Fore.GREEN + ascii_art) - - # progress bar for step-2 - total = 100 - steps_completed = int(total * 0.2) - display_progress_bar("STEP 2/10 ", steps_completed=steps_completed, total=total, duration=0.3) - + #progress bar for step-2 + total=100 + steps_completed= int(total*0.2) + display_progress_bar("STEP 2/10 ",steps_completed=steps_completed,total=total,duration=0.3) print(f"{Fore.YELLOW}Select JOSAA round ({josaa_round_year}){Fore.RESET}") - if josaa_round_year == "2024": menu_options = [ "Round 1", @@ -155,7 +143,6 @@ def josaa_rounds(josaa_round_year, applied_filters): "Round 4", "Round 5" ] - max_option = 5 else: menu_options = [ "Round 1", @@ -165,82 +152,65 @@ def josaa_rounds(josaa_round_year, applied_filters): "Round 5", "Round 6" ] - max_option = 6 for i, option in enumerate(menu_options, start=1): print(f"{Fore.GREEN}{i}. {Fore.RESET}{Fore.BLUE}{option}" + Fore.RESET) + if josaa_round_year == "2024": + selected_round = input("Select Option (1 to 5): ") + if int(selected_round) > 5: + return josaa_rounds(josaa_round_year) + csv_files("josaa", selected_round, josaa_round_year) + else: + selected_round = input("Select Option (1 to 6): ") + if int(selected_round) > 6: + return josaa_rounds(josaa_round_year) + csv_files("josaa", selected_round, josaa_round_year) - selected_round = None - while selected_round is None: - user_input = input(f"Select Option (1 to {max_option}): ").strip() - if user_input.isdigit() and 1 <= int(user_input) <= max_option: - selected_round = user_input - else: - print(Fore.RED + f"Invalid input! Please select a number between 1 and {max_option}." + Fore.RESET) - applied_filters["Round"] = selected_round - csv_files("josaa", selected_round, josaa_round_year, applied_filters) - def csab_rounds_year(): os.system("cls" if os.name == "nt" else "clear") print(Fore.GREEN + ascii_art) - - # progress bar for step-1 - total = 100 - steps_completed = int(total * 0.1) - display_progress_bar("STEP 1/10 ", steps_completed=steps_completed, total=total, duration=0.3) - - applied_filters = {"Counseling Type": "CSAB"} - csab_round_year = None # initialize + #progress bar for step-1 + total=100 + steps_completed= int(total*0.1) + display_progress_bar("STEP 1/10 ",steps_completed=steps_completed,total=total, duration=0.3) print(Fore.YELLOW + "Select CSAB round year") print(Fore.GREEN + "1." + Fore.BLUE + "2021") print(Fore.GREEN + "2." + Fore.BLUE + "2022") print(Fore.GREEN + "3." + Fore.BLUE + "2023") print(Fore.GREEN + "4." + Fore.BLUE + "2024" + Fore.RESET) - while csab_round_year is None: - - csab_round_year_sel = input("Select Option (1 to 4): ").strip() - - if csab_round_year_sel == "1": - csab_round_year = "2021" - elif csab_round_year_sel == "2": - csab_round_year = "2022" - elif csab_round_year_sel == "3": - csab_round_year = "2023" - elif csab_round_year_sel == "4": - csab_round_year = "2024" - else: - print(Fore.RED + "Invalid input! Please select a number between 1 and 4." + Fore.RESET) - - applied_filters["Year"] = csab_round_year - csab_rounds(csab_round_year, applied_filters) - -def csab_rounds(csab_round_year, applied_filters): + csab_round_year_sel = input("Select Option (1 to 4): ") + if csab_round_year_sel == "1": + csab_round_year = "2021" + elif csab_round_year_sel == "2": + csab_round_year = "2022" + elif csab_round_year_sel == "3": + csab_round_year = "2023" + elif csab_round_year_sel == "4": + csab_round_year = "2024" + print(csab_round_year) + csab_rounds(csab_round_year) + + +def csab_rounds(csab_round_year): os.system("cls" if os.name == "nt" else "clear") print(Fore.GREEN + ascii_art) - # progress bar for step-2 - total = 100 - steps_completed = int(total * 0.2) - display_progress_bar("STEP 2/10 ", steps_completed=steps_completed, total=total, duration=0.3) + #progress bar for step-2 + total=100 + steps_completed= int(total*0.2) + display_progress_bar("STEP 2/10 ",steps_completed=steps_completed,total=total, duration=0.3) - print(f"{Fore.YELLOW}Select CSAB round ({csab_round_year})") + print(f"{Fore.YELLOW}Select CSAB round ({csab_round_year})" ) print(Fore.GREEN + "1." + Fore.BLUE + "Round 1") print(Fore.GREEN + "2." + Fore.BLUE + "Round 2") + csab_round = input(Fore.RESET + "Select Option (1 to 2) : ") + csv_files("csab", csab_round, csab_round_year) - csab_round = None - while csab_round is None: - user_input = input(Fore.RESET + "Select Option (1 to 2): ").strip() - if user_input in ["1", "2"]: - csab_round = user_input - else: - print(Fore.RED + "Invalid input! Please select 1 or 2." + Fore.RESET) - - applied_filters["Round"] = csab_round - csv_files("csab", csab_round, csab_round_year, applied_filters) +# define the path of csv files for different types of colleges -def csv_files(type, round, year, applied_filters): +def csv_files(type, round, year): # Get path to the temporary folder created by PyInstaller if getattr(sys, 'frozen', False): # If the script is running in a PyInstaller bundle @@ -257,7 +227,7 @@ def csv_files(type, round, year, applied_filters): "NITs": os.path.join(cwd, "josaa", f"{year}", f"round_{josaa_rounds}", "ranks_nits.csv"), "GFTIs": os.path.join(cwd, "josaa", f"{year}", f"round_{josaa_rounds}", "ranks_gftis.csv") } - josaa_institute_types(CSV_FILES, applied_filters) + josaa_institue_types(CSV_FILES) elif type == "csab": csab_rounds = round csv_path = os.path.join( @@ -267,108 +237,98 @@ def csv_files(type, round, year, applied_filters): f"round_{csab_rounds}", "ranks.csv") df = pd.read_csv(csv_path) - csab_institute_types(df, applied_filters) + csab_institue_types(df) + -def csab_institute_types(df, applied_filters): +def csab_institue_types(df): + # clear the screen os.system("cls" if os.name == "nt" else "clear") print(Fore.GREEN + ascii_art) - - # progress bar for step-3 - total = 100 - steps_completed = int(total * 0.3) - display_progress_bar("STEP 3/10 ", steps_completed=steps_completed, total=total, duration=0.3) - + #progress bar for step-3 + total=100 + steps_completed= int(total*0.3) + display_progress_bar("STEP 3/10 ",steps_completed=steps_completed,total=total, duration=0.3) + # ask for user input for institute type print(Fore.YELLOW + "Select Institute type:") print(Fore.GREEN + "1." + Fore.BLUE + "ALL") print(Fore.GREEN + "2." + Fore.BLUE + "IIITs") print(Fore.GREEN + "3." + Fore.BLUE + "NITs") print(Fore.GREEN + "4." + Fore.BLUE + "GFTIs") - # loop until valid input - option = None - institute_type_name = "" - while option is None: - - user_input = input(Fore.RESET + "Select Option (1 to 4): ").strip() - if user_input in ["1", "2", "3", "4"]: - option = user_input - else: - print(Fore.RED + "Invalid option! Please select a number between 1 and 4." + Fore.RESET) + option = input(Fore.RESET + "Select Option (1 to 4): ") # filter the dataframe based on the selected option if option == "1": - df = df[~df['Institute'].str.contains('Indian Institute of Technology')] - institute_type_name = "ALL (IIITs, NITs, GFTIs)" + df = df[~df['Institute'].str.contains( + 'Indian Institute of Technology')] elif option == "2": - df = df[df['Institute'].str.contains('Indian Institute of Information Technology')] - institute_type_name = "IIITs" + df = df[df['Institute'].str.contains( + 'Indian Institute of Information Technology')] elif option == "3": - df = df[df['Institute'].str.contains('National Institute of Technology')] - institute_type_name = "NITs" + df = df[df['Institute'].str.contains( + 'National Institute of Technology')] elif option == "4": - df = df[~df['Institute'].str.contains('National Institute of Technology')] - df = df[~df['Institute'].str.contains('Indian Institute of Information Technology')] - institute_type_name = "GFTIs" - - applied_filters["Institute Type"] = institute_type_name - main(df, applied_filters) + df = df[~df['Institute'].str.contains( + 'National Institute of Technology')] + df = df[~df['Institute'].str.contains( + 'Indian Institute of Information Technology')] + else: + print("Invalid option. Please select again.") -def josaa_institute_types(CSV_FILES, applied_filters): + main(df) + + +def josaa_institue_types(CSV_FILES): # clear the screen os.system("cls" if os.name == "nt" else "clear") print(Fore.GREEN + ascii_art) - - # progress bar for step-3 - total = 100 - steps_completed = int(total * 0.3) - display_progress_bar("STEP 3/10 ", steps_completed=steps_completed, total=total, duration=0.3) - + #progress bar for step-3 + total=100 + steps_completed= int(total*0.3) + display_progress_bar("STEP 3/10 ",steps_completed=steps_completed,total=total, duration=0.3) + # ask for user input for institute type print(Fore.YELLOW + "Select Institute type:") print(Fore.GREEN + "1." + Fore.BLUE + "ALL (No IITs Included)") print(Fore.GREEN + "2." + Fore.BLUE + "IIITs") print(Fore.GREEN + "3." + Fore.BLUE + "NITs") print(Fore.GREEN + "4." + Fore.BLUE + "GFTIs") print(Fore.GREEN + "5." + Fore.BLUE + "IITs") - # loop until valid input - college_type = None - option = None - while option is None: - - user_input = input(Fore.RESET + "Select Option (1 to 5): ").strip() - if user_input in ["1", "2", "3", "4", "5"]: - option = user_input - if option == "1": - college_type = "ALL" - elif option == "2": - college_type = "IIITs" - elif option == "3": - college_type = "NITs" - elif option == "4": - college_type = "GFTIs" - elif option == "5": - college_type = "IITs" - else: - print(Fore.RED + "Invalid option! Please select a number between 1 and 5." + Fore.RESET) + option = input(Fore.RESET + "Select Option (1 to 5): ") + + # filter the dataframe based on the selected option + if option == "1": + college_type = "ALL" + elif option == "2": + college_type = "IIITs" + elif option == "3": + college_type = "NITs" + elif option == "4": + college_type = "GFTIs" + elif option == "5": + college_type = "IITs" + else: + print("Invalid option. Please select again.") + josaa_institue_types - applied_filters["Institute Type"] = college_type - # read the csv file based on the selected college type csv_path = CSV_FILES[college_type] df = pd.read_csv(csv_path) - if option == "1": - # Remove all IITs occurrence if "ALL" option was chosen - df = df[~df['Institute'].str.contains('Indian Institute of Technology')] - main(df, applied_filters) + # Remove all IITs occurance if "ALL" option was choosed. + df = df[~df['Institute'].str.contains( + 'Indian Institute of Technology')] + main(df) elif option == "5": - # fix ranks with strings in them - df['Closing Rank'] = df['Closing Rank'].str.extract(r'(\d+)').astype(float) - df['Opening Rank'] = df['Opening Rank'].str.extract(r'(\d+)').astype(int) - main(df, applied_filters) + # fix ranks with strings in it. + df['Closing Rank'] = df['Closing Rank'].str.extract( + r'(\d+)').astype(float) + df['Opening Rank'] = df['Opening Rank'].str.extract( + r'(\d+)').astype(int) + main(df) else: - main(df, applied_filters) + main(df) -def filter_programs(institute_df, current_filters): +def filter_programs(institute_df): os.system("cls" if os.name == "nt" else "clear") print(Fore.GREEN + ascii_art) #progress bar for step-4 @@ -396,7 +356,7 @@ def filter_programs(institute_df, current_filters): print("") program_choices = { - 1: 'All', + 1: '', 2: 'Computer Science and Engineering', 3: 'Artificial Intelligence and Data Science', 4: 'Electronics and Communication Engineering', @@ -414,24 +374,10 @@ def filter_programs(institute_df, current_filters): program_choices_list = program_input.split() filtered_df = institute_df - - selected_program_names = [] - - if '1' in program_choices_list: - selected_program_names.append("All") - else: - # Build a list of selected program names - for choice in program_choices_list: - if choice.isdigit() and int(choice) in program_choices: - selected_program_names.append(program_choices[int(choice)]) - - # Filter the dataframe - if selected_program_names: - filtered_df = institute_df[institute_df["Academic Program Name"].str.contains( - '|'.join(selected_program_names))] - - current_filters["Program"] = ", ".join(selected_program_names) + if '1' not in program_choices_list: + filtered_df = institute_df[institute_df["Academic Program Name"].str.contains( + '|'.join([program_choices.get(int(choice), '') for choice in program_choices_list]))] if len(filtered_df) == 0: print( @@ -440,7 +386,6 @@ def filter_programs(institute_df, current_filters): Fore.RESET) return filtered_df - # This part for page 2 can be simplified or adjusted as needed if '13' in program_choices_list: os.system("cls" if os.name == "nt" else "clear") programs = filtered_df["Academic Program Name"].unique() @@ -450,14 +395,14 @@ def filter_programs(institute_df, current_filters): if program_choice >= 14 and program_choice < 14 + len(programs): program = programs[program_choice - 14] filtered_df = filtered_df[filtered_df["Academic Program Name"] == program] - current_filters["Program"] = program # Update with the specific choice else: print(Fore.RED + "Invalid choice. Please try again." + Fore.RESET) return filtered_df return filtered_df -def display_df_web(df, heading, subheading, applied_filters=None): + +def display_df_web(df, heading, subheading): output_dir = 'output' if not os.path.exists(output_dir): os.makedirs(output_dir) @@ -468,15 +413,6 @@ def display_df_web(df, heading, subheading, applied_filters=None): # convert the DataFrame to an HTML table html_table = df.to_html(index=False, classes='table',table_id="tableID") - - # Prepare the filters section as HTML - filters_html = "" - if applied_filters: - filters_html += "