Add type hints for settings module

Types make it easier to understand the code and improve autocompletion
in IDEs.
This commit is contained in:
Björn Ricks 2023-12-17 13:56:33 +01:00
commit f69e2cca6b
No known key found for this signature in database

View file

@ -8,11 +8,13 @@ import re
import sys import sys
from os.path import isabs from os.path import isabs
from pathlib import Path from pathlib import Path
from types import ModuleType
from typing import Any, Dict, Optional
from pelican.log import LimitFilter from pelican.log import LimitFilter
def load_source(name, path): def load_source(name: str, path: str) -> ModuleType:
spec = importlib.util.spec_from_file_location(name, path) spec = importlib.util.spec_from_file_location(name, path)
mod = importlib.util.module_from_spec(spec) mod = importlib.util.module_from_spec(spec)
sys.modules[name] = mod sys.modules[name] = mod
@ -22,6 +24,8 @@ def load_source(name, path):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Settings = Dict[str, Any]
DEFAULT_THEME = os.path.join( DEFAULT_THEME = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "themes", "notmyidea" os.path.dirname(os.path.abspath(__file__)), "themes", "notmyidea"
) )
@ -177,7 +181,9 @@ DEFAULT_CONFIG = {
PYGMENTS_RST_OPTIONS = None PYGMENTS_RST_OPTIONS = None
def read_settings(path=None, override=None): def read_settings(
path: Optional[str] = None, override: Optional[Settings] = None
) -> Settings:
settings = override or {} settings = override or {}
if path: if path:
@ -221,7 +227,7 @@ def read_settings(path=None, override=None):
return settings return settings
def get_settings_from_module(module=None): def get_settings_from_module(module: Optional[ModuleType] = None) -> Settings:
"""Loads settings from a module, returns a dictionary.""" """Loads settings from a module, returns a dictionary."""
context = {} context = {}
@ -230,7 +236,7 @@ def get_settings_from_module(module=None):
return context return context
def get_settings_from_file(path): def get_settings_from_file(path: str) -> Settings:
"""Loads settings from a file path, returning a dict.""" """Loads settings from a file path, returning a dict."""
name, ext = os.path.splitext(os.path.basename(path)) name, ext = os.path.splitext(os.path.basename(path))
@ -238,7 +244,7 @@ def get_settings_from_file(path):
return get_settings_from_module(module) return get_settings_from_module(module)
def get_jinja_environment(settings): def get_jinja_environment(settings: Settings) -> Settings:
"""Sets the environment for Jinja""" """Sets the environment for Jinja"""
jinja_env = settings.setdefault( jinja_env = settings.setdefault(
@ -253,7 +259,7 @@ def get_jinja_environment(settings):
return settings return settings
def _printf_s_to_format_field(printf_string, format_field): def _printf_s_to_format_field(printf_string: str, format_field: str) -> str:
"""Tries to replace %s with {format_field} in the provided printf_string. """Tries to replace %s with {format_field} in the provided printf_string.
Raises ValueError in case of failure. Raises ValueError in case of failure.
""" """
@ -269,7 +275,7 @@ def _printf_s_to_format_field(printf_string, format_field):
return result return result
def handle_deprecated_settings(settings): def handle_deprecated_settings(settings: Settings) -> Settings:
"""Converts deprecated settings and issues warnings. Issues an exception """Converts deprecated settings and issues warnings. Issues an exception
if both old and new setting is specified. if both old and new setting is specified.
""" """
@ -566,7 +572,7 @@ def handle_deprecated_settings(settings):
return settings return settings
def configure_settings(settings): def configure_settings(settings: Settings) -> Settings:
"""Provide optimizations, error checking, and warnings for the given """Provide optimizations, error checking, and warnings for the given
settings. settings.
Also, specify the log messages to be ignored. Also, specify the log messages to be ignored.