Improved type annotations and linting using TypedDicts
This commit is contained in:
parent
5e84b81c7f
commit
f005a6fb50
1 changed files with 11 additions and 13 deletions
|
@ -1,25 +1,23 @@
|
|||
from sys import exit
|
||||
from os import chdir, getenv, system
|
||||
from typing import List, Dict, Union
|
||||
import logging
|
||||
import tomllib
|
||||
from datetime import datetime, time
|
||||
from apscheduler.schedulers.background import BackgroundScheduler, BlockingScheduler
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from apscheduler.triggers.cron import CronTrigger
|
||||
|
||||
from wallman_classes import *
|
||||
|
||||
# Setup Logging. NOTE: Declaration as a global variable is necessary to ensure correct functionality across multiple modules.
|
||||
global logger
|
||||
logger = logging.getLogger("wallman")
|
||||
|
||||
class ConfigError(Exception):
|
||||
pass
|
||||
|
||||
class _ConfigLib:
|
||||
# Initializes the most important config values. TODO: Add handling for the empty config edge case
|
||||
def __init__(self) -> None:
|
||||
self.config_file: Dict[str, Dict[str, Union[int, str, bool, List[str]]]] = self._initialize_config() # Full config
|
||||
self.config_file: ConfigFile = self._initialize_config() # Full config
|
||||
# Dictionaries
|
||||
self.config_general: Dict[str, Union[int, str, bool, List[str]]] = self.config_file["general"]
|
||||
self.config_general: ConfigGeneral = self.config_file["general"]
|
||||
self.config_changing_times: Dict[str, str] = self.config_file["changing_times"]
|
||||
# Values in Dicts
|
||||
self.config_wallpaper_sets_enabled: bool = self.config_general["enable_wallpaper_sets"]
|
||||
|
@ -47,16 +45,16 @@ class _ConfigLib:
|
|||
self._initialize_systray()
|
||||
|
||||
# Read config. TODO: Add error handling for the config not found case.
|
||||
def _initialize_config(self) -> Dict[str, Dict[str, Union[int, str, bool, List[str]]]]:
|
||||
def _initialize_config(self) -> ConfigFile:
|
||||
chdir(str(getenv("HOME")) + "/.config/wallman/")
|
||||
with open("wallman.toml", "rb") as config_file:
|
||||
data: Dict[str, Dict[str, Union[int, str, bool, List[str]]]] = tomllib.load(config_file)
|
||||
data: ConfigFile = tomllib.load(config_file) #pyright:ignore
|
||||
return data
|
||||
|
||||
# HACK on this to avoid double importing of wallman_systray due to variable scope. Idea: Global variable or Variable that is inherited?
|
||||
def _initialize_systray(self):
|
||||
try:
|
||||
import wallman_systray
|
||||
import wallman_systray as _
|
||||
except (ImportError, FileNotFoundError):
|
||||
self.config_systray = False
|
||||
|
||||
|
@ -117,6 +115,7 @@ class ConfigValidity(_ConfigLib):
|
|||
super().__init__()
|
||||
|
||||
def _check_fallback_wallpaper(self) -> bool:
|
||||
# TODO: Make self.config_general["fallback_wallpaper"] a class-wide variable in ConfigLib
|
||||
if self.config_general["fallback_wallpaper"]:
|
||||
logger.debug("A fallback wallpaper has been defined.")
|
||||
return True
|
||||
|
@ -213,7 +212,7 @@ class WallpaperLogic(_ConfigLib):
|
|||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
# NOTE: This looks a bit ugly. Consider pros and cons of adding this into _ConfigLib
|
||||
self.chosen_wallpaper_set: Union[bool, List[str]] = False
|
||||
self.chosen_wallpaper_set: str = "fFTojkvCLIkGVlC6vUo4701djCZczmJDiyHKj4Qdj0zwkLyETsPxP88DLmY9In0I"
|
||||
|
||||
# NOTE: This function could be in a different file because it's not needed in the case only 1 wallpaper per set is needed.
|
||||
# Returns a list of a split string that contains a changing time from the config file
|
||||
|
@ -222,7 +221,6 @@ class WallpaperLogic(_ConfigLib):
|
|||
return unclean_times.split(":")
|
||||
|
||||
# NOTE: This could be in a different file because it's not needed in the "Only one wallpaper set" case.
|
||||
# FIXME: Use a TypedDict here
|
||||
def _choose_wallpaper_set(self) -> None:
|
||||
from random import choice as choose_from
|
||||
self.chosen_wallpaper_set = choose_from(self.config_used_sets)
|
||||
|
@ -264,7 +262,7 @@ class WallpaperLogic(_ConfigLib):
|
|||
# TODO: Add an way for the user to choose if the wallpaper should scale, fill or otherwise. This needs to be editable in the config file.
|
||||
def set_wallpaper_by_time(self) -> bool:
|
||||
# Ensure use of a consistent wallpaper set
|
||||
if self.chosen_wallpaper_set is False:
|
||||
if self.chosen_wallpaper_set != "fFTojkvCLIkGVlC6vUo4701djCZczmJDiyHKj4Qdj0zwkLyETsPxP88DLmY9In0I":
|
||||
self._choose_wallpaper_set()
|
||||
for time_range in range(self.config_total_changing_times - 1):
|
||||
self.current_time_range = time_range # Store current time for better debugging output
|
||||
|
|
Loading…
Reference in a new issue