46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
|
"""Configuration handling for the Seasonal Clock"""
|
||
|
|
||
|
|
||
|
import os
|
||
|
from typing import Dict, Union
|
||
|
|
||
|
import toml
|
||
|
from xdg import xdg_config_home
|
||
|
|
||
|
from .geo import get_country_city, get_lat_long, get_timezone
|
||
|
|
||
|
|
||
|
def load_config() -> Dict[str, Union[str, float]]:
|
||
|
"""Load the configuration from $XDG_CONFIG_HOME/seasonal-clock.toml"""
|
||
|
|
||
|
config_dir = xdg_config_home()
|
||
|
config_filename = os.path.join(config_dir, 'seasonal-clock.toml')
|
||
|
|
||
|
if os.path.exists(config_filename):
|
||
|
loaded_config = toml.load(config_filename) or {}
|
||
|
config: Dict[str, Union[float, str]] = loaded_config.get('seasonal-clock')
|
||
|
else:
|
||
|
config = {}
|
||
|
|
||
|
if (
|
||
|
'city' not in config
|
||
|
and 'country' not in config
|
||
|
and 'latitude' not in config
|
||
|
and 'longitude' not in config
|
||
|
):
|
||
|
raise ValueError('No location configured')
|
||
|
|
||
|
if not config.get('longitude') or not config.get('latitude'):
|
||
|
config['latitude'], config['longitude'] = get_lat_long(
|
||
|
config['country'], config['city']
|
||
|
)
|
||
|
elif not config.get('country') or not config.get('city'):
|
||
|
config['country'], config['city'] = get_country_city(
|
||
|
config['latitude'], config['longitude']
|
||
|
)
|
||
|
|
||
|
if not config.get('timezone'):
|
||
|
config['timezone'] = get_timezone(config['latitude'], config['longitude'])
|
||
|
|
||
|
return config
|