Source code for ores.util

import logging
import time
import traceback

import stopit

from .errors import TimeoutError

logger = logging.getLogger(__name__)


[docs]def jsonify_error(error): error_type = error.__class__.__name__ message = str(error) return {'error': {'type': error_type, 'message': message}}
[docs]def timeout(func, *args, seconds=None, **kwargs): if seconds is None: return func(*args, **kwargs) start = time.time() with stopit.SignalTimeout(seconds) as to_ctx_mgr: result = func(*args, **kwargs) duration = time.time() - start # OK, let's check what happened if to_ctx_mgr.state == to_ctx_mgr.EXECUTED: # All's fine, everything was executed return result elif to_ctx_mgr.state == to_ctx_mgr.TIMED_OUT: # Timeout occurred while executing the block raise TimeoutError("Timed out after {0} seconds." .format(round(duration))) else: traceback.print_stack() raise RuntimeError("Something weird happened.")