Implement various cleanup

- Don't import wallman_systray to see if it exists, use
importlib.util.find_spec() to look for deps instead

- Improve handling if no config file exists.
This commit is contained in:
Emma Nora Theuer 2025-02-03 20:09:26 +01:00
parent 6c72bdc31b
commit 105c59d122

View file

@ -26,6 +26,8 @@ class _ConfigLib:
self.config_total_changing_times: int = len(self.config_changing_times) self.config_total_changing_times: int = len(self.config_changing_times)
self.config_log_level: str = self.config_general.get("loglevel", "INFO").upper() self.config_log_level: str = self.config_general.get("loglevel", "INFO").upper()
self.config_behavior: str = self._set_behavior() self.config_behavior: str = self._set_behavior()
# Setup logging
self._set_log_level()
# HACK: Add a function to handle these try/except blocks cleanlier. # HACK: Add a function to handle these try/except blocks cleanlier.
try: try:
self.config_notify: bool = self.config_general["notify"] self.config_notify: bool = self.config_general["notify"]
@ -38,24 +40,29 @@ class _ConfigLib:
self.config_systray: bool = True self.config_systray: bool = True
logger.warning("'systray' is not set in the dictionary general in the config file, defaulting to 'true'.") logger.warning("'systray' is not set in the dictionary general in the config file, defaulting to 'true'.")
# Setup logging
self._set_log_level()
# Setup systray. # Setup systray.
if self.config_systray: if self.config_systray:
self._initialize_systray() self._verify_systray_deps()
# Read config. TODO: Add error handling for the config not found case. # Read config. TODO: Add error handling for the config not found case.
def _initialize_config(self) -> ConfigFile: def _initialize_config(self) -> ConfigFile:
chdir(str(getenv("HOME")) + "/.config/wallman/") chdir(str(getenv("HOME")) + "/.config/wallman/")
try:
with open("wallman.toml", "rb") as config_file: with open("wallman.toml", "rb") as config_file:
data: ConfigFile = tomllib.load(config_file) #pyright:ignore data: ConfigFile = tomllib.load(config_file) #pyright:ignore
return data return data
except FileNotFoundError:
raise FileNotFoundError("No config file could be found in ~/.config/wallman/wallman.toml")
except tomllib.TOMLDecodeError as e:
print("ERROR: Config could not be parsed: Invalid TOML Syntax")
raise e
# HACK on this to avoid double importing of wallman_systray due to variable scope. Idea: Global variable or Variable that is inherited? def _verify_systray_deps(self):
def _initialize_systray(self): from importlib import util
try: if util.find_spec("pystray") is None or util.find_spec("pillow") is None:
import wallman_systray as _ logger.error("systray is enabled, but dependencies for the systray couldn't be found. Are pystray and pillow installed?")
except (ImportError, FileNotFoundError): logger.info("Setting self.config_systray to false.")
print("ERROR: systray is enabled, but dependencies for the systray couldn't be found. Are pystray and pillow installed?")
self.config_systray = False self.config_systray = False
def _set_log_level(self): def _set_log_level(self):
@ -313,9 +320,9 @@ class WallpaperLogic(_ConfigLib):
scheduler.start() scheduler.start()
if self.config_systray: if self.config_systray:
# NOTE: The wallman_systray impomrt should be handled differently. See the note in Config_Validity.
import wallman_systray as systray import wallman_systray as systray
from functools import partial from functools import partial
scheduler: BackgroundScheduler = _schedule_background_wallpapers() scheduler: BackgroundScheduler = _schedule_background_wallpapers()
menu: systray.Menu = systray.Menu ( menu: systray.Menu = systray.Menu (
systray.item("Re-Set Wallpaper", partial(systray.set_wallpaper_again, wallpaper_setter=self.set_wallpaper_by_time)), systray.item("Re-Set Wallpaper", partial(systray.set_wallpaper_again, wallpaper_setter=self.set_wallpaper_by_time)),
@ -325,5 +332,4 @@ class WallpaperLogic(_ConfigLib):
icon = systray.Icon("wallman_icon", systray.icon_image, "My Tray Icon", menu) icon = systray.Icon("wallman_icon", systray.icon_image, "My Tray Icon", menu)
icon.run() icon.run()
else: else:
_schedule_blocking_wallpapers() _schedule_blocking_wallpapers()