13 changed files with 149 additions and 92 deletions
@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env python3 |
||||
|
||||
# MIT License |
||||
# |
||||
# Copyright (c) 2021 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com> |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
# of this software and associated documentation files (the "Software"), to deal |
||||
# in the Software without restriction, including without limitation the rights |
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
# copies of the Software, and to permit persons to whom the Software is |
||||
# furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included in all |
||||
# copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
# SOFTWARE. |
||||
|
||||
# This code is inspired by |
||||
# https://github.com/ceccopierangiolieugenio/pyCuT/blob/master/cupy/CuTCore/CuDebug.py |
||||
|
||||
import inspect |
||||
from collections.abc import Callable |
||||
|
||||
class _TTkContext: |
||||
__slots__ = ['file', 'line', 'function'] |
||||
def __init__(self, cf): |
||||
self.file = cf[1] |
||||
self.line = cf[2] |
||||
self.function = cf[3] |
||||
def __str__(self): |
||||
return f"{self.file}:{self.line} [{self.function}]" |
||||
|
||||
class TTkLog: |
||||
DebugMsg = 0x0001 |
||||
InfoMsg = 0x0002 |
||||
ErrorMsg = 0x0004 |
||||
WarningMsg = 0x0008 |
||||
CriticalMsg = 0x0010 |
||||
FatalMsg = 0x0020 |
||||
SystemMsg = CriticalMsg |
||||
|
||||
_messageHandler: Callable = None |
||||
|
||||
@staticmethod |
||||
def _process_msg(mode: int, msg: str): |
||||
if TTkLog._messageHandler is not None: |
||||
curframe = inspect.currentframe() |
||||
calframe = inspect.getouterframes(curframe,1) |
||||
if len(calframe) > 2: |
||||
ctx = _TTkContext(calframe[2]) |
||||
TTkLog._messageHandler(mode, ctx, msg) |
||||
|
||||
@staticmethod |
||||
def debug(msg): |
||||
TTkLog._process_msg(TTkLog.DebugMsg, msg) |
||||
|
||||
@staticmethod |
||||
def info(msg): |
||||
TTkLog._process_msg(TTkLog.InfoMsg, msg) |
||||
|
||||
@staticmethod |
||||
def error(msg): |
||||
TTkLog._process_msg(TTkLog.ErrorMsg, msg) |
||||
|
||||
@staticmethod |
||||
def warn(msg): |
||||
TTkLog._process_msg(TTkLog.WarningMsg, msg) |
||||
|
||||
@staticmethod |
||||
def critical(msg): |
||||
TTkLog._process_msg(TTkLog.CriticalMsg, msg) |
||||
|
||||
@staticmethod |
||||
def fatal(msg): |
||||
TTkLog._process_msg(TTkLog.FatalMsg, msg) |
||||
|
||||
@staticmethod |
||||
def installMessageHandler(mh: Callable): |
||||
TTkLog._messageHandler = mh |
||||
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python3 |
||||
|
||||
# Copyright 2021 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com> |
||||
# Copyright 2020 Aristocratos (https://github.com/aristocratos/bpytop) |
||||
# |
||||
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||
# you may not use this file except in compliance with the License. |
||||
# You may obtain a copy of the License at |
||||
# |
||||
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
# |
||||
# Unless required by applicable law or agreed to in writing, software |
||||
# distributed under the License is distributed on an "AS IS" BASIS, |
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
# See the License for the specific language governing permissions and |
||||
# limitations under the License. |
||||
@ -1,72 +0,0 @@
|
||||
#!/usr/bin/env python3 |
||||
|
||||
# MIT License |
||||
# |
||||
# Copyright (c) 2021 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com> |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
# of this software and associated documentation files (the "Software"), to deal |
||||
# in the Software without restriction, including without limitation the rights |
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
# copies of the Software, and to permit persons to whom the Software is |
||||
# furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included in all |
||||
# copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
# SOFTWARE. |
||||
|
||||
# This code is inspired by |
||||
# https://github.com/ceccopierangiolieugenio/pyCuT/blob/master/cupy/CuTCore/CuDebug.py |
||||
|
||||
import inspect |
||||
|
||||
DebugMsg = 0 # A message generated by the Debug() function. |
||||
InfoMsg = 4 # A message generated by the Info() function. |
||||
WarningMsg = 1 # A message generated by the Warning() function. |
||||
CriticalMsg = 2 # A message generated by the Critical() function. |
||||
FatalMsg = 3 # A message generated by the Fatal() function. |
||||
SystemMsg = CriticalMsg |
||||
|
||||
_MessageHandler = None |
||||
|
||||
def _process_msg(mode, msg): |
||||
global _MessageHandler |
||||
if _MessageHandler is not None: |
||||
curframe = inspect.currentframe() |
||||
calframe = inspect.getouterframes(curframe,1) |
||||
if len(calframe) > 2: |
||||
class context: |
||||
__slots__ = ('file', 'line', 'function') |
||||
def __str__(self): |
||||
return f"{self.file}:{self.line} [{self.function}]" |
||||
ctx = context() |
||||
ctx.file = calframe[2][1] |
||||
ctx.line = calframe[2][2] |
||||
ctx.function = calframe[2][3] |
||||
_MessageHandler(mode, ctx, msg) |
||||
|
||||
def debug(msg): |
||||
_process_msg(DebugMsg, msg) |
||||
|
||||
def info(msg): |
||||
_process_msg(InfoMsg, msg) |
||||
|
||||
def warn(msg): |
||||
_process_msg(WarningMsg, msg) |
||||
|
||||
def critical(msg): |
||||
_process_msg(CriticalMsg, msg) |
||||
|
||||
def fatal(msg): |
||||
_process_msg(FatalMsg, msg) |
||||
|
||||
def installMessageHandler(mh): |
||||
global _MessageHandler |
||||
_MessageHandler = mh |
||||
Loading…
Reference in new issue