Source code for nv_ingest_api.util.exception_handlers.schemas
# SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES.
# All rights reserved.
# SPDX-License-Identifier: Apache-2.0
import logging
from pydantic import ValidationError
logger = logging.getLogger(__name__)
[docs]
def schema_exception_handler(func, **kwargs):
"""
A decorator that handles `ValidationError` exceptions for schema validation functions.
This decorator wraps a function that performs schema validation using Pydantic.
If a `ValidationError` is raised, it logs detailed error messages and raises a `ValueError` with the combined error
messages.
Parameters
----------
func : callable
The function to be decorated. This function is expected to perform schema validation.
kwargs : dict
Additional keyword arguments to be passed to the function.
Returns
-------
callable
The wrapped function that executes `func` with exception handling.
Raises
------
ValueError
If a `ValidationError` is caught, this decorator logs the error details and raises a `ValueError` with the
combined error messages.
Notes
-----
This decorator is particularly useful for functions that validate configurations or data models,
ensuring that any validation errors are logged and communicated clearly.
Examples
--------
>>> @schema_exception_handler
... def validate_config(config_data):
... schema = MySchema(**config_data)
... return schema
...
>>> try:
... validate_config(invalid_config)
... except ValueError as e:
... print(f"Caught error: {e}")
Caught error: Invalid configuration: field1: value is not a valid integer; field2: field required
"""
def inner_function(*args, **kwargs):
try:
return func(*args, **kwargs)
except ValidationError as e:
error_messages = "; ".join([f"{error['loc'][0]}: {error['msg']}" for error in e.errors()])
log_error_message = f"Invalid configuration: {error_messages}"
logger.error(log_error_message)
raise ValueError(log_error_message)
return inner_function