andrej@1511: #!/usr/bin/env python andrej@1511: # -*- coding: utf-8 -*- andrej@1511: Edouard@2270: from __future__ import absolute_import edouard@2309: from __future__ import print_function Edouard@2270: import traceback edouard@2309: import sys andrej@1667: Edouard@2270: from runtime.Worker import worker Edouard@2270: MainWorker = worker() andrej@1511: Edouard@2270: _PLCObjectSingleton = None etisserant@49: edouard@2309: Edouard@2270: def GetPLCObjectSingleton(): edouard@2309: assert _PLCObjectSingleton is not None Edouard@2270: return _PLCObjectSingleton Edouard@2270: Edouard@2270: Edouard@2270: def LogMessageAndException(msg, exp=None): Edouard@2270: if exp is None: Edouard@2270: exp = sys.exc_info() Edouard@2270: if _PLCObjectSingleton is not None: Edouard@2270: _PLCObjectSingleton.LogMessage(0, msg + '\n'.join(traceback.format_exception(*exp))) Edouard@2307: print(msg) Edouard@2307: traceback.print_exception(*exp) Edouard@2270: edouard@2309: edouard@2309: def CreatePLCObjectSingleton(*args, **kwargs): Edouard@2270: global _PLCObjectSingleton Edouard@2327: from runtime.PLCObject import PLCObject # noqa # pylint: disable=wrong-import-position edouard@2309: _PLCObjectSingleton = PLCObject(*args, **kwargs) Edouard@2583: Edouard@2583: Edouard@2583: def default_evaluator(tocall, *args, **kwargs): Edouard@2583: try: Edouard@2583: res = (tocall(*args, **kwargs), None) Edouard@2583: except Exception: Edouard@2583: res = (None, sys.exc_info()) Edouard@2583: return res