Swallow and print errors instead of crashing

This commit is contained in:
I-Al-Istannen 2020-05-08 23:35:25 +02:00
parent a4c518bf4c
commit afa48c2d2d
2 changed files with 31 additions and 0 deletions

28
PFERD/errors.py Normal file
View File

@ -0,0 +1,28 @@
"""
An error logging decorator.
"""
import logging
from typing import Any, Callable
from .logging import FatalException, PrettyLogger
LOGGER = logging.getLogger(__name__)
PRETTY = PrettyLogger(LOGGER)
def swallow_and_print_errors(function: Callable) -> Callable:
"""
Decorates a function, swallows all errors, logs them and returns none if one occurred.
"""
def inner(*args: Any, **kwargs: Any) -> Any:
# pylint: disable=broad-except
try:
return function(*args, **kwargs)
except FatalException as error:
PRETTY.error(str(error))
return None
except Exception as error:
Console().print_exception()
return None
return inner

View File

@ -9,6 +9,7 @@ from typing import List, Optional, Union
from .cookie_jar import CookieJar
from .diva import (DivaDownloader, DivaDownloadStrategy, DivaPlaylistCrawler,
diva_download_new)
from .errors import swallow_and_print_errors
from .ilias import (IliasAuthenticator, IliasCrawler, IliasDirectoryFilter,
IliasDownloader, IliasDownloadStrategy,
KitShibbolethAuthenticator, download_modified_or_new)
@ -89,6 +90,7 @@ class Pferd(Location):
return organizer
@swallow_and_print_errors
def ilias_kit(
self,
target: PathLike,
@ -141,6 +143,7 @@ class Pferd(Location):
clean=clean,
)
@swallow_and_print_errors
def diva_kit(
self,
target: Union[PathLike, Organizer],