From f09aba2b6b063d7926ad41b46985dddf5e99be34 Mon Sep 17 00:00:00 2001 From: Fabian Schindler <fabian.schindler.strauss@gmail.com> Date: Fri, 20 Nov 2020 17:08:03 +0100 Subject: [PATCH] Adding possibility to configure error handlers --- core/registrar/registrar.py | 39 +++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/core/registrar/registrar.py b/core/registrar/registrar.py index 968ff054..bcd4800d 100644 --- a/core/registrar/registrar.py +++ b/core/registrar/registrar.py @@ -1,11 +1,11 @@ import re import logging -import importlib from .source import get_source from .scheme import get_scheme from .backend import get_backends from .exceptions import RegistrationError +from .utils import import_by_path logger = logging.getLogger(__name__) @@ -22,22 +22,27 @@ def register_file(config: dict, path: str, replace: bool=False): for pre_handler in get_pre_handlers(config): pre_handler(config, path, context) - for backend in get_backends(config, path): - if backend.exists(source, context): - if replace: - logger.info(f"Replacing '{path}'.") - backend.register(source, context, replace=True) + try: + for backend in get_backends(config, path): + if backend.exists(source, context): + if replace: + logger.info(f"Replacing '{path}'.") + backend.register(source, context, replace=True) + else: + raise RegistrationError(f'Object {context} is already registered') else: - raise RegistrationError(f'Object {context} is already registered') - else: - logger.info(f"Registering '{path}'.") - backend.register(source, context, replace=False) + logger.info(f"Registering '{path}'.") + backend.register(source, context, replace=False) + except Exception as e: + for error_handler in get_error_handlers(config): + error_handler(config, path, context, e) + raise + else: + for post_handler in get_post_handlers(config): + post_handler(config, path, context) - for post_handler in get_post_handlers(config): - post_handler(config, path, context) - - logger.info(f"Successfully {'replaced' if replace else 'registered'} '{path}'") - return context + logger.info(f"Successfully {'replaced' if replace else 'registered'} '{path}'") + return context def _get_handlers(config, name): @@ -61,3 +66,7 @@ def get_pre_handlers(config): def get_post_handlers(config): return _get_handlers(config, 'post_handlers') + + +def get_error_handlers(config): + return _get_handlers(config, 'error_handlers') -- GitLab