Move FCADLogger class into FreeCAD core
This commit is contained in:
parent
ab7a9b865f
commit
2e23850947
137
FCADLogger.py
137
FCADLogger.py
|
@ -1,136 +1,7 @@
|
||||||
import os, inspect, sys
|
import FreeCAD
|
||||||
from datetime import datetime
|
|
||||||
import FreeCAD, FreeCADGui
|
|
||||||
|
|
||||||
PY3 = sys.version_info[0] == 3
|
class FCADLogger(FreeCAD.Logger):
|
||||||
if PY3:
|
|
||||||
string_type = str
|
|
||||||
else:
|
|
||||||
string_type = basestring
|
|
||||||
|
|
||||||
class FCADLogger:
|
|
||||||
def __init__(self,tag,**kargs):
|
def __init__(self,tag,**kargs):
|
||||||
self.tag = tag
|
kargs.setdefault('title','Assembly3')
|
||||||
self.levels = { 'error':0, 'warn':1, 'info':2,
|
super(FCADLogger,self).__init__(tag,**kargs)
|
||||||
'debug':3, 'trace':4 }
|
|
||||||
self.printer = [
|
|
||||||
FreeCAD.Console.PrintError,
|
|
||||||
FreeCAD.Console.PrintWarning,
|
|
||||||
FreeCAD.Console.PrintMessage,
|
|
||||||
FreeCAD.Console.PrintLog,
|
|
||||||
FreeCAD.Console.PrintLog ]
|
|
||||||
self.laststamp = datetime.now()
|
|
||||||
for key,default in (('printTag',True),('noUpdateUI',True),
|
|
||||||
('timing',True),('lineno',True),('parent',None)):
|
|
||||||
setattr(self,key,kargs.get(key,default))
|
|
||||||
|
|
||||||
def _isEnabledFor(self,level):
|
|
||||||
if self.parent and not self.parent._isEnabledFor(level):
|
|
||||||
return False
|
|
||||||
return FreeCAD.getLogLevel(self.tag) >= level
|
|
||||||
|
|
||||||
def isEnabledFor(self,level):
|
|
||||||
if not isinstance(level,int):
|
|
||||||
level = self.levels[level]
|
|
||||||
return self._isEnabledFor(level)
|
|
||||||
|
|
||||||
def error(self,msg,*args,**kargs):
|
|
||||||
if self._isEnabledFor(0):
|
|
||||||
frame = kargs.get('frame',0)+1
|
|
||||||
if isinstance(msg,string_type):
|
|
||||||
msg = msg.format(*args,**kargs)
|
|
||||||
self.log(0,msg,frame)
|
|
||||||
|
|
||||||
def warn(self,msg,*args,**kargs):
|
|
||||||
if self._isEnabledFor(1):
|
|
||||||
frame = kargs.get('frame',0)+1
|
|
||||||
if isinstance(msg,string_type):
|
|
||||||
msg = msg.format(*args,**kargs)
|
|
||||||
self.log(1,msg,frame)
|
|
||||||
|
|
||||||
def info(self,msg,*args,**kargs):
|
|
||||||
if self._isEnabledFor(2):
|
|
||||||
frame = kargs.get('frame',0)+1
|
|
||||||
if isinstance(msg,string_type):
|
|
||||||
msg = msg.format(*args,**kargs)
|
|
||||||
self.log(2,msg,frame)
|
|
||||||
|
|
||||||
def debug(self,msg,*args,**kargs):
|
|
||||||
if self._isEnabledFor(3):
|
|
||||||
frame = kargs.get('frame',0)+1
|
|
||||||
if isinstance(msg,string_type):
|
|
||||||
msg = msg.format(*args,**kargs)
|
|
||||||
self.log(3,msg,frame)
|
|
||||||
|
|
||||||
def trace(self,msg,*args,**kargs):
|
|
||||||
if self._isEnabledFor(4):
|
|
||||||
frame = kargs.get('frame',0)+1
|
|
||||||
if isinstance(msg,string_type):
|
|
||||||
msg = msg.format(*args,**kargs)
|
|
||||||
self.log(4,msg,frame)
|
|
||||||
|
|
||||||
def log(self,level,msg,frame=0):
|
|
||||||
prefix = ''
|
|
||||||
|
|
||||||
if self.printTag:
|
|
||||||
prefix += '<{}> '.format(self.tag)
|
|
||||||
|
|
||||||
if self.timing:
|
|
||||||
now = datetime.now()
|
|
||||||
prefix += '{} - '.format((now-self.laststamp).total_seconds())
|
|
||||||
self.laststamp = now
|
|
||||||
|
|
||||||
if self.lineno:
|
|
||||||
try:
|
|
||||||
frame = sys._getframe(frame+1)
|
|
||||||
prefix += '{}({}): '.format(os.path.basename(
|
|
||||||
frame.f_code.co_filename),frame.f_lineno)
|
|
||||||
except Exception:
|
|
||||||
frame = inspect.stack()[frame+1]
|
|
||||||
prefix += '{}({}): '.format(os.path.basename(frame[1]),frame[2])
|
|
||||||
|
|
||||||
self.printer[level]('{}{}\n'.format(prefix,msg))
|
|
||||||
|
|
||||||
if not self.noUpdateUI:
|
|
||||||
try:
|
|
||||||
FreeCADGui.updateGui()
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _catch(self,level,msg,func,args=None,kargs=None):
|
|
||||||
try:
|
|
||||||
if not args:
|
|
||||||
args = []
|
|
||||||
if not kargs:
|
|
||||||
kargs = {}
|
|
||||||
return func(*args,**kargs)
|
|
||||||
except Exception:
|
|
||||||
if self._isEnabledFor(level):
|
|
||||||
import traceback
|
|
||||||
self.log(level,msg+'\n'+traceback.format_exc(),frame=2)
|
|
||||||
|
|
||||||
def catch(self,msg,func,*args,**kargs):
|
|
||||||
return self._catch(0,msg,func,args,kargs)
|
|
||||||
|
|
||||||
def catchWarn(self,msg,func,*args,**kargs):
|
|
||||||
return self._catch(1,msg,func,args,kargs)
|
|
||||||
|
|
||||||
def catchInfo(self,msg,func,*args,**kargs):
|
|
||||||
return self._catch(2,msg,func,args,kargs)
|
|
||||||
|
|
||||||
def catchDebug(self,msg,func,*args,**kargs):
|
|
||||||
return self._catch(3,msg,func,args,kargs)
|
|
||||||
|
|
||||||
def catchTrace(self,msg,func,*args,**kargs):
|
|
||||||
return self._catch(4,msg,func,args,kargs)
|
|
||||||
|
|
||||||
def report(self,msg,func,*args,**kargs):
|
|
||||||
try:
|
|
||||||
return func(*args,**kargs)
|
|
||||||
except Exception as e:
|
|
||||||
import traceback
|
|
||||||
self.error(msg+'\n'+traceback.format_exc(),frame=1)
|
|
||||||
|
|
||||||
import PySide
|
|
||||||
PySide.QtGui.QMessageBox.critical(
|
|
||||||
FreeCADGui.getMainWindow(),'Assembly',str(e))
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user