Source code for metatensor.status
# -*- coding: utf-8 -*-
from typing import Optional
from ._c_api import MTS_SUCCESS
[docs]
class MetatensorError(Exception):
"""This class is used to throw exceptions for all errors in metatensor."""
def __init__(self, message, status=None):
super(Exception, self).__init__(message)
self.message: str = message
"""error message for this exception"""
self.status: Optional[int] = status
"""status code for this exception"""
LAST_EXCEPTION = None
def _save_exception(e):
global LAST_EXCEPTION
LAST_EXCEPTION = e
def _check_status(status):
if status == MTS_SUCCESS:
return
elif status > MTS_SUCCESS:
raise MetatensorError(last_error(), status)
elif status < MTS_SUCCESS:
global LAST_EXCEPTION
e = LAST_EXCEPTION
LAST_EXCEPTION = None
raise MetatensorError(last_error(), status) from e
def _check_pointer(pointer):
if not pointer:
global LAST_EXCEPTION
if LAST_EXCEPTION is not None:
e = LAST_EXCEPTION
LAST_EXCEPTION = None
raise MetatensorError(last_error()) from e
else:
raise MetatensorError(last_error())
def last_error():
"""Get the last error message on this thread"""
from ._c_lib import _get_library
lib = _get_library()
message = lib.mts_last_error()
return message.decode("utf8")