X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbindings%2Fpython%2Fbt2%2Fbt2%2Futils.py;h=023ff0a8062ef06b2b34be41ccc294d460471dff;hb=4acc866e829881299a13d0aa8e28b93807549975;hp=bd8ebf8e9d841fdce79a7eff713b8f42d5646ea6;hpb=578e048b5debf169e286e5b5cc747b5d6c16886d;p=babeltrace.git diff --git a/src/bindings/python/bt2/bt2/utils.py b/src/bindings/python/bt2/bt2/utils.py index bd8ebf8e..023ff0a8 100644 --- a/src/bindings/python/bt2/bt2/utils.py +++ b/src/bindings/python/bt2/bt2/utils.py @@ -21,6 +21,8 @@ # THE SOFTWARE. import bt2 +import bt2.logging +from bt2 import native_bt def _check_bool(o): @@ -45,22 +47,39 @@ def _check_str(o): def _check_type(o, expected_type): if not isinstance(o, expected_type): - raise TypeError("'{}' is not a '{}' object".format(o.__class__.__name__, - expected_type)) + raise TypeError( + "'{}' is not a '{}' object".format(o.__class__.__name__, expected_type) + ) + + +def _is_in_int64_range(v): + assert isinstance(v, int) + return v >= -(2 ** 63) and v <= (2 ** 63 - 1) def _is_int64(v): - _check_int(v) - return v >= -(2**63) and v <= (2**63 - 1) + if not isinstance(v, int): + return False + + return _is_in_int64_range(v) + + +def _is_in_uint64_range(v): + assert isinstance(v, int) + return v >= 0 and v <= (2 ** 64 - 1) def _is_uint64(v): - _check_int(v) - return v >= 0 and v <= (2**64 - 1) + if not isinstance(v, int): + return False + + return _is_in_uint64_range(v) def _check_int64(v, msg=None): - if not _is_int64(v): + _check_int(v) + + if not _is_in_int64_range(v): if msg is None: msg = 'expecting a signed 64-bit integral value' @@ -69,7 +88,9 @@ def _check_int64(v, msg=None): def _check_uint64(v, msg=None): - if not _is_uint64(v): + _check_int(v) + + if not _is_in_uint64_range(v): if msg is None: msg = 'expecting an unsigned 64-bit integral value' @@ -92,18 +113,73 @@ def _check_alignment(a): raise ValueError('{} is not a power of two'.format(a)) -def _raise_bt2_error(msg): - if msg is None: - raise bt2.Error - else: - raise bt2.Error(msg) +def _check_log_level(log_level): + _check_int(log_level) + + log_levels = ( + bt2.logging.LoggingLevel.TRACE, + bt2.logging.LoggingLevel.DEBUG, + bt2.logging.LoggingLevel.INFO, + bt2.logging.LoggingLevel.WARNING, + bt2.logging.LoggingLevel.ERROR, + bt2.logging.LoggingLevel.FATAL, + bt2.logging.LoggingLevel.NONE, + ) + if log_level not in log_levels: + raise ValueError("'{}' is not a valid logging level".format(log_level)) -def _handle_ret(ret, msg=None): - if int(ret) < 0: - _raise_bt2_error(msg) +def _handle_func_status(status, msg=None): + if status == native_bt.__BT_FUNC_STATUS_OK: + # no error + return -def _handle_ptr(ptr, msg=None): - if ptr is None: - _raise_bt2_error(msg) + if status == native_bt.__BT_FUNC_STATUS_ERROR: + assert msg is not None + raise bt2.Error(msg) + elif status == native_bt.__BT_FUNC_STATUS_MEMORY_ERROR: + assert msg is not None + raise bt2.MemoryError(msg) + elif status == native_bt.__BT_FUNC_STATUS_END: + if msg is None: + raise bt2.Stop + else: + raise bt2.Stop(msg) + elif status == native_bt.__BT_FUNC_STATUS_AGAIN: + if msg is None: + raise bt2.TryAgain + else: + raise bt2.TryAgain(msg) + elif status == native_bt.__BT_FUNC_STATUS_CANCELED: + if msg is None: + raise bt2.Canceled + else: + raise bt2.Canceled(msg) + elif status == native_bt.__BT_FUNC_STATUS_LOADING_ERROR: + if msg is None: + raise bt2.LoadingError + else: + raise bt2.LoadingError(msg) + elif status == native_bt.__BT_FUNC_STATUS_OVERFLOW: + if msg is None: + raise bt2.OverflowError + else: + raise bt2.OverflowError(msg) + elif status == native_bt.__BT_FUNC_STATUS_INVALID_OBJECT: + if msg is None: + raise bt2.InvalidObject + else: + raise bt2.InvalidObject(msg) + elif status == native_bt.__BT_FUNC_STATUS_INVALID_PARAMS: + if msg is None: + raise bt2.InvalidParams + else: + raise bt2.InvalidParams(msg) + elif status == native_bt.__BT_FUNC_STATUS_UNSUPPORTED: + if msg is None: + raise bt2.Unsupported + else: + raise bt2.Unsupported(msg) + else: + assert False