from abc import ABC, abstractmethod from rich import console class UIInterface(ABC): @abstractmethod def setup(self): pass @abstractmethod def run(self): pass class RichInterface(UIInterface): def __init__(self,parent): super().__init__() self.__parent = parent self.console = console.Console() self.console.show_cursor(False) self.mode = None def setup(self,**kwargs): for key, value in kwargs.items(): match(key): case "configure": if value: self.mode = "configure" else: self.mode = "run" case "detailed": self.mode = "detailed" case _: raise ValueError(f"Invalid mode: {key}") def configure_run_mode(self): self.console.print("This Application is in [bold red]Configure Mode[/bold red]") self.console.print("This Application requires a CheckWX API Key to run") print("Please enter your CheckWX API:",end='') api_key = input() print(f"\033[A\rPlease enter your CheckWX API:{' ' * len(api_key)}\rPlease enter your CheckWX API:",end='') while api_key == '': self.console.print("[bold red]Invalid API Key: Can't be empty [/bold red]") print("Please enter your CheckWX API:", end='') api_key = input() print(f"\033[A\rPlease enter your CheckWX API:{' ' * len(api_key)}\rPlease enter your CheckWX API:", end='') print("\n") always_show_detailed = self.console.input("Always Show Detailed (default is: [green]No[/green]) [[u]y[/u]/[u]N[/u]]: ").upper() if always_show_detailed == '': always_show_detailed = 'N' while always_show_detailed not in ['Y', 'N']: always_show_detailed = self.console.input("Always Show Detailed (default is: [green]No[/green]) [[u]y[/u]/[u]N[/u]]: ").upper() if always_show_detailed == '': always_show_detailed = 'N' wind_speed_unit = self.console.input( 'Speed Unit (default is: [green]K[/green]) [[u]K[/u]eep/[u]M[/u]iles/K[u]N[/u]ots/KM/[u]H[/u]]: ' ).upper() if wind_speed_unit == '': wind_speed_unit = 'K' while wind_speed_unit not in ['K', 'M', 'N', 'H']: wind_speed_unit = self.console.input( 'Speed Unit (default is: [green]K[/green]) [[u]K[/u]eep/[u]M[/u]iles/K[u]N[/u]ots/KM/[u]H[/u]]: ' ).upper() if wind_speed_unit == '': wind_speed_unit = 'K' temp_unit = self.console.input( 'Temperature Unit (default is: [green]K[/green]) [[u]K[/u]eep/[u]C[/u]elsius/[u]F[/u]ahrenheit]: ' ).upper() if temp_unit == '': temp_unit = 'K' while temp_unit not in ['K', 'C', 'F']: temp_unit = self.console.input( 'Temperature Unit (default is: [green]K[/green]) [[u]K[/u]eep/[u]C[/u]elsius/[u]F[/u]ahrenheit]: ' ).upper() if temp_unit == '': temp_unit = 'K' visibility_unit = self.console.input( 'Visibility Unit (default is: [green]K[/green]) [[u]K[/u]eep/[u]S[/u]M/[u]M[/u]]: ' ).upper() if visibility_unit == '': visibility_unit = 'K' while visibility_unit not in ['K', 'S', 'M']: visibility_unit = self.console.input( 'Visibility Unit (default is: [green]K[/green]) [[u]K[/u]eep/[u]S[/u]M/[u]M[/u]]: ' ).upper() if visibility_unit == '': visibility_unit = 'K' pressure_unit = self.console.input( 'Pressure Unit (default is: [green]K[/green]) [[u]K[/u]eep/[u]I[/u]nHg/[u]H[/u]Pa]: ' ).upper() if pressure_unit == '': pressure_unit = 'K' while pressure_unit not in ['K', 'H', 'U']: pressure_unit = self.console.input( 'Pressure Unit (default is: [green]K[/green]) [[u]K[/u]eep/[u]I[/u]nHg/[u]H[/u]Pa]: ' ).upper() if pressure_unit == '': pressure_unit = 'K' self.__parent.config.set_data_dict({ "checkwx_api_key": api_key}) if always_show_detailed == 'Y': self.__parent.config.set_data_dict({"always_show_detailed":True}) else: self.__parent.config.set_data_dict({"always_show_detailed": False}) if wind_speed_unit == 'K': self.__parent.config.set_data_dict({"wind_speed_unit":"Keep"}) elif wind_speed_unit == 'M': self.__parent.config.set_data_dict({"wind_speed_unit":"Miles"}) elif wind_speed_unit == 'N': self.__parent.config.set_data_dict({"wind_speed_unit": "Knots"}) elif wind_speed_unit == 'H': self.__parent.config.set_data_dict({"wind_speed_unit": "KM/H"}) if temp_unit == 'K': self.__parent.config.set_data_dict({"temp_unit":"Keep"}) elif temp_unit == 'C': self.__parent.config.set_data_dict({ "temp_unit": "Celsius"}) elif temp_unit == 'F': self.__parent.config.set_data_dict({ "temp_unit": "Fahrenheit"}) if visibility_unit == 'K': self.__parent.config.set_data_dict({ "visibility_unit": "Keep"}) elif visibility_unit == 'S': self.__parent.config.set_data_dict({"visibility_unit": "SM"}) elif visibility_unit == 'M': self.__parent.config.set_data_dict({"visibility_unit": "Miles"}) if pressure_unit == 'K': self.__parent.config.set_data_dict({"pressure_unit": "Keep"}) elif pressure_unit == 'H': self.__parent.config.set_data_dict({ "pressure_unit": "HPa"}) elif pressure_unit == 'I': self.__parent.config.set_data_dict({ "pressure_unit": "InHg"}) self.__parent.config.write_config() def run(self): if not self.__parent.is_configured and self.mode != "configure": self.console.print("[bold red]This Application Requires a configuration to run please run with -c flag to configure [/bold red]") self.console.show_cursor(True) exit(69) if self.mode == "configure": self.configure_run_mode() else: self.console.print("This Application is in [bold red]Run Mode[/bold red]") self.console.show_cursor(True)