diff --git a/FCADLogger.py b/FCADLogger.py index 6d93381..8121978 100644 --- a/FCADLogger.py +++ b/FCADLogger.py @@ -2,6 +2,12 @@ import os, inspect, sys from datetime import datetime import FreeCAD, FreeCADGui +PY3 = sys.version_info[0] == 3 +if PY3: + string_type = str +else: + string_type = basestring + class FCADLogger: def __init__(self, tag, **kargs): self.tag = tag @@ -28,25 +34,42 @@ class FCADLogger: level = self.levels[level] return self._isEnabledFor(level) - def error(self,msg,frame=0): - self.log(0,msg,frame+1) + 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,frame=0): - self.log(1,msg,frame+1) + 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,frame=0): - self.log(2,msg,frame+1) + 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,frame=0): - self.log(3,msg,frame+1) + 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,frame=0): - self.log(4,msg,frame+1) + 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): - if not self._isEnabledFor(level): - return - prefix = '' if self.printTag: diff --git a/assembly.py b/assembly.py index e709c16..09d5d55 100644 --- a/assembly.py +++ b/assembly.py @@ -1085,10 +1085,10 @@ class AsmElementLink(AsmBase): version = self.childVersion(linked,mat) if not self.version.update(version): - logger.debug('skip {}, {}, {}'.format( - objName(obj),self.version.childVersion,version)) + logger.debug('skip {}, {}, {}', + objName(obj),self.version.childVersion,version) return - logger.debug('not skip {}, {}'.format(objName(obj),version)) + logger.debug('not skip {}, {}',objName(obj),version) if not info: info = self.getInfo(True) @@ -1477,9 +1477,9 @@ class AsmConstraint(AsmGroup): if not assembly or \ System.isConstraintSupported(assembly,Constraint.getTypeName(obj)): return - logger.err('Constraint type "{}" is not supported by ' - 'solver "{}"'.format(Constraint.getTypeName(obj), - System.getTypeName(assembly))) + logger.error('Constraint type "{}" is not supported by ' + 'solver "{}"',Constraint.getTypeName(obj), + System.getTypeName(assembly)) Constraint.setDisable(obj) def onChanged(self,obj,prop): @@ -1651,7 +1651,7 @@ class AsmConstraint(AsmGroup): count -= finished if count: distMap.sort() - logger.debug('distance map: {}'.format(len(distMap))) + logger.debug('distance map: {}',len(distMap)) for d in distMap: logger.debug(d) for d,i,j in distMap: @@ -1924,7 +1924,7 @@ class AsmConstraint(AsmGroup): return cstr except Exception as e: - logger.debug('failed to make constraint: {}'.format(e)) + logger.debug('failed to make constraint: {}',e) if undo: FreeCAD.closeActiveTransaction(True) raise @@ -2366,7 +2366,7 @@ class AsmRelationGroup(AsmBase): checkType(relation,AsmRelation) return relation except Exception as e: - logger.error('invalid relation of part array: '+str(e)) + logger.error('invalid relation of part array: {}',e) def update(self,cstr,oldPart,newPart,partName): relation = self.findRelation(oldPart) @@ -2379,7 +2379,7 @@ class AsmRelationGroup(AsmBase): pass relation = self.findRelation(newPart) if not relation: - logger.warn('Cannot find relation of part {}'.format(partName)) + logger.warn('Cannot find relation of part {}',partName) elif cstr not in relation.Group: relation.Group = {-1:cstr} @@ -2798,8 +2798,8 @@ class Assembly(AsmGroup): cls._Timer.setSingleShot(True) cls._Timer.timeout.connect(Assembly.onSolverTimer) cls._TransID = FreeCAD.getActiveTransaction() - logger.debug('auto solve scheduled on change of {}.{}'.format( - objName(obj),prop),frame=1) + logger.debug('auto solve scheduled on change of {}.{}', + objName(obj),prop,frame=1) cls._Timer.start(100) @classmethod @@ -3093,12 +3093,12 @@ class Assembly(AsmGroup): for o in cstrGroup.Group: checkType(o,AsmConstraint) if Constraint.isDisabled(o): - logger.debug('skip constraint {}'.format(cstrName(o))) + logger.debug('skip constraint {}',cstrName(o)) continue if not System.isConstraintSupported(self.Object, Constraint.getTypeName(o)): logger.debug('skip unsupported constraint ' - '{}'.format(cstrName(o))) + '{}',cstrName(o)) continue ret.append(o) self.constraints = ret @@ -3572,7 +3572,7 @@ class AsmWorkPlane(object): if undo: FreeCAD.setActiveTransaction('Assembly create workplane') try: - logger.debug('make {}'.format(tp)) + logger.debug('make {}',tp) if tp == 3: obj = None for o in info.PartGroup.Group: diff --git a/constraint.py b/constraint.py index 6a03db7..907aa0c 100644 --- a/constraint.py +++ b/constraint.py @@ -53,7 +53,7 @@ def _p(solver,partInfo,subname,shape,retAll=False): h = partInfo.EntityMap.get(key,None) system = solver.system if h: - system.log('cache {}: {}'.format(key,h)) + system.log('cache {}: {}',key,h) return h if retAll else h.entity v = utils.getElementPos(shape) @@ -68,14 +68,14 @@ def _p(solver,partInfo,subname,shape,retAll=False): system.NameTag = nameTag e = system.addPoint3d(*params) h = PointInfo(entity=e,params=params,vector=v) - system.log('{}: add draft point {}'.format(key,h)) + system.log('{}: add draft point {}',key,h) if system.sketchPlane and not solver.isFixedElement(part,subname): system.NameTag = nameTag + '.i' e2 = system.addPointInPlane(e,system.sketchPlane.entity, group=partInfo.Group) - system.log('{}: add draft point in plane {},{}'.format( - partInfo.PartName,e2,system.sketchPlane.entity)) + system.log('{}: add draft point in plane {},{}', + partInfo.PartName,e2,system.sketchPlane.entity) elif utils.isDraftCircle(part): requireArc = subname=='Vertex2' @@ -88,7 +88,7 @@ def _p(solver,partInfo,subname,shape,retAll=False): else: raise RuntimeError('Invalid draft circle subname {} of ' '{}'.format(subname,partInfo.PartName)) - system.log('{}: add circle point {}'.format(key,h)) + system.log('{}: add circle point {}',key,h) else: nameTag = partInfo.PartName + '.' + key @@ -97,7 +97,7 @@ def _p(solver,partInfo,subname,shape,retAll=False): system.NameTag = nameTag + 't' h = system.addTransform(e,*partInfo.Params,group=partInfo.Group) h = PointInfo(entity=h, params=partInfo.Params,vector=v) - system.log('{}: {},{}'.format(system.NameTag,h,partInfo.Group)) + system.log('{}: {},{}',system.NameTag,h,partInfo.Group) partInfo.EntityMap[key] = h return h if retAll else h.entity @@ -109,14 +109,14 @@ def _n(solver,partInfo,subname,shape,retAll=False): return 'an edge or face with a planar or cylindrical surface' if utils.isDraftWire(partInfo): logger.warn('Use draft wire {} for normal. Draft wire placement' - ' is not transformable'.format(partInfo.PartName)) + ' is not transformable',partInfo.PartName) return key = subname+'.n' h = partInfo.EntityMap.get(key,None) system = solver.system if h: - system.log('cache {}: {}'.format(key,h)) + system.log('cache {}: {}',key,h) else: if utils.isDraftCircle(partInfo.Part): _prepareDraftCircle(solver,partInfo) @@ -150,7 +150,7 @@ def _n(solver,partInfo,subname,shape,retAll=False): p0=p0.entity, ln=ln, p1=p1, px=px, vx=vx, pla=partInfo.Placement) - system.log('{}: {},{}'.format(system.NameTag,h,partInfo.Group)) + system.log('{}: {},{}',system.NameTag,h,partInfo.Group) partInfo.EntityMap[key] = h return h if retAll else h.entity @@ -177,7 +177,7 @@ def _l(solver,partInfo,subname,shape,retAll=False): h = partInfo.EntityMap.get(key,None) system = solver.system if h: - system.log('cache {}: {}'.format(key,h)) + system.log('cache {}: {}',key,h) else: nameTag = partInfo.PartName + '.' + key if utils.isDraftWire(part): @@ -202,7 +202,7 @@ def _l(solver,partInfo,subname,shape,retAll=False): system.NameTag = nameTag h = system.addLineSegment(tp0,tp1,group=partInfo.Group) h = LineInfo(entity=h,p0=tp0,p1=tp1) - system.log('{}: {},{}'.format(system.NameTag,h,partInfo.Group)) + system.log('{}: {},{}',system.NameTag,h,partInfo.Group) partInfo.EntityMap[key] = h return h if retAll else h.entity @@ -257,14 +257,14 @@ def _w(solver,partInfo,subname,shape,retAll=False): h = partInfo.EntityMap.get(key,None) system = solver.system if h: - system.log('cache {}: {}'.format(key,h)) + system.log('cache {}: {}',key,h) else: p = _p(solver,partInfo,subname,shape,True) n = _n(solver,partInfo,subname,shape,True) system.NameTag = partInfo.PartName + '.' + key w = system.addWorkplane(p.entity,n.entity,group=partInfo.Group) h = PlaneInfo(entity=w,origin=p,normal=n) - system.log('{}: {},{}'.format(system.NameTag,h,partInfo.Group)) + system.log('{}: {},{}',system.NameTag,h,partInfo.Group) return h if retAll else h.entity def _wa(solver,partInfo,subname,shape,retAll=False): @@ -287,7 +287,7 @@ def _c(solver,partInfo,subname,shape,requireArc=False,retAll=False): h = partInfo.EntityMap.get(key,None) system = solver.system if h: - system.log('cache {}: {}'.format(key,h)) + system.log('cache {}: {}',key,h) return h if retAll else h.entity g = partInfo.Group @@ -304,8 +304,8 @@ def _c(solver,partInfo,subname,shape,requireArc=False,retAll=False): system.NameTag = nameTag + '.i' e2 = system.addPointInPlane( pln.origin.entity, system.sketchPlane.entity, group=g) - system.log('{}: fix draft circle in plane {},{}'.format( - partInfo.PartName,e1,e2)) + system.log('{}: fix draft circle in plane {},{}', + partInfo.PartName,e1,e2) if part.FirstAngle == part.LastAngle: if requireArc: @@ -319,7 +319,7 @@ def _c(solver,partInfo,subname,shape,requireArc=False,retAll=False): e = system.addCircle(pln.origin.entity, pln.normal.entity, system.addDistance(r), group=g) h = CircleInfo(entity=e,radius=r,p0=p0) - system.log('{}: add draft circle {}, {}'.format(nameTag,h,g)) + system.log('{}: add draft circle {}, {}',nameTag,h,g) else: system.NameTag = nameTag + '.c' center = system.addPoint2d(pln.entity,solver.v0,solver.v0,group=g) @@ -336,7 +336,7 @@ def _c(solver,partInfo,subname,shape,requireArc=False,retAll=False): system.NameTag = nameTag e = system.addArcOfCircle(pln.entity,center,*points,group=g) h = ArcInfo(entity=e,p1=points[1],p0=points[0],params=params) - system.log('{}: add draft arc {}, {}'.format(nameTag,h,g)) + system.log('{}: add draft arc {}, {}',nameTag,h,g) # exhaust all possible keys from a draft circle to save # recomputation @@ -360,7 +360,7 @@ def _c(solver,partInfo,subname,shape,requireArc=False,retAll=False): h = system.addCircle( pln.origin.entity, pln.normal.entity, hr, group=g) h = CircleInfo(entity=h,radius=hr,p0=None) - system.log('{}: {},{}'.format(nameTag,h,g)) + system.log('{}: {},{}',nameTag,h,g) partInfo.EntityMap[key] = h @@ -439,7 +439,7 @@ class Constraint(ProxyType): try: gui.AsmCmdManager.register(ConstraintCommand(cls)) except Exception: - logger.error('failed to register {}'.format(cls.getName())) + logger.error('failed to register {}',cls.getName()) raise @classmethod @@ -459,7 +459,7 @@ class Constraint(ProxyType): mcs.getType(str(utils.getLabel(obj))): obj.Label = mcs.getTypeName(obj) except Exception as e: - logger.debug('auto constraint label failed: {}'.format(e)) + logger.debug('auto constraint label failed: {}',e) @classmethod def isDisabled(mcs,obj): @@ -504,10 +504,10 @@ class Constraint(ProxyType): for obj in partGroup.Group: if not hasattr(obj,'Placement'): ret.add(obj) - logger.debug('part without Placement {}'.format(objName(obj))) + logger.debug('part without Placement {}',objName(obj)) elif isTypeOf(obj,AsmWorkPlane) and getattr(obj,'Fixed',False): ret.add(obj) - logger.debug('fix workplane {}'.format(objName(obj))) + logger.debug('fix workplane {}',objName(obj)) found = len(ret) for obj in cstrs: @@ -526,7 +526,7 @@ class Constraint(ProxyType): if cstr.hasFixedPart(obj): found = True for info in cstr.getFixedParts(solver,obj): - logger.debug('fixed part ' + info.PartName) + logger.debug('fixed part {}',info.PartName) ret.add(info.Part) if not found and not firstInfo: @@ -540,20 +540,19 @@ class Constraint(ProxyType): return ret if utils.isDraftObject(firstInfo.Part): Locked.lockElement(firstInfo,solver) - logger.debug('lock first draft object {}'.format( - firstInfo.PartName)) + logger.debug('lock first draft object {}',firstInfo.PartName) solver.getPartInfo(firstInfo,True,solver.group) else: - logger.debug('lock first part {}'.format(firstInfo.PartName)) + logger.debug('lock first part {}',firstInfo.PartName) ret.add(firstInfo.Part) if logger.isEnabledFor('debug'): logger.debug('found fixed parts:') for o in ret: if isinstance(o,tuple): - logger.debug('\t{}.{}'.format(o[0].Name,o[1])) + logger.debug('\t{}.{}',o[0].Name,o[1]) else: - logger.debug('\t{}'.format(o.Name)) + logger.debug('\t{}',o.Name) return ret @classmethod @@ -690,8 +689,8 @@ class Base(with_metaclass(Constraint, object)): name = getattr(cls,'_cstrFuncName','add'+cls.getName()) return getattr(solver.system,name) except AttributeError: - logger.warn('{} not supported in solver "{}"'.format( - cstrName(obj),solver.getName())) + logger.warn('{} not supported in solver "{}"', + cstrName(obj),solver.getName()) @classmethod def getEntityDef(cls,elements,checkCount,obj=None): @@ -751,7 +750,7 @@ class Base(with_metaclass(Constraint, object)): 'or a {} element to define a projection plane'.format( cstrName(obj), _ordinal[len(elements)])) - solver.system.log('{} entities: {}'.format(cstrName(obj),ret)) + solver.system.log('{} entities: {}',cstrName(obj),ret) return ret @classmethod @@ -763,7 +762,7 @@ class Base(with_metaclass(Constraint, object)): return params = cls.getPropertyValues(obj) + cls.getEntities(obj,solver) ret = func(*params,group=solver.group) - solver.system.log('{}: {}'.format(cstrName(obj),ret)) + solver.system.log('{}: {}',cstrName(obj),ret) return ret @classmethod @@ -887,8 +886,7 @@ class Locked(Base): else: w = 0 e = system.addPointsCoincident(e1,e2,w,group=solver.group) - system.log('{}: fix point {},{},{}'.format( - info.PartName,e,e1,e2)) + system.log('{}: fix point {},{},{}',info.PartName,e,e1,e2) else: # The second point, so we are fixing a linear edge. We can't # add a second coincidence constraint, which will cause @@ -901,7 +899,7 @@ class Locked(Base): system.NameTag = nameTag # Now, constraint the second variable point to the line e = system.addPointOnLine(e2,l,group=solver.group) - system.log('{}: fix line {},{}'.format(info.PartName,e,l)) + system.log('{}: fix line {},{}',info.PartName,e,l) ret.append(e) @@ -970,13 +968,13 @@ class BaseMulti(Base): if cls.canMultiply(obj): elements = obj.Proxy.getElements() if len(elements)<=1: - logger.warn('{} not enough elements'.format(cstrName(obj))) + logger.warn('{} not enough elements',cstrName(obj)) return firstInfo = elements[0].Proxy.getInfo(expand=True) count = len(firstInfo) if not count: - logger.warn('{} no first part shape'.format(cstrName(obj))) + logger.warn('{} no first part shape',cstrName(obj)) return dragPart = solver.getDragPart() @@ -1059,20 +1057,20 @@ class BaseMulti(Base): for e in obj.Proxy.getElements(): info = e.Proxy.getInfo() if info.Part in parts: - logger.warn('{} skip duplicate parts {}'.format( - cstrName(obj),info.PartName)) + logger.warn('{} skip duplicate parts {}', + cstrName(obj),info.PartName) continue parts.add(info.Part) if solver.isFixedPart(info.Part): if ref: - logger.warn('{} skip more than one fixed part {},{}'.format( - cstrName(obj),info.PartName,ref.PartName)) + logger.warn('{} skip more than one fixed part {},{}', + cstrName(obj),info.PartName,ref.PartName) continue ref = info elements.append(e) if len(elements)<=1: - logger.warn('{} has no effective constraint'.format(cstrName(obj))) + logger.warn('{} has no effective constraint',cstrName(obj)) return e0 = None e = None @@ -1134,7 +1132,7 @@ class BaseCascade(BaseMulti): ret.append(h) if not ret: - logger.warn('{} has no effective constraint'.format(cstrName(obj))) + logger.warn('{} has no effective constraint',cstrName(obj)) return ret @@ -1266,7 +1264,7 @@ class PointOnLine(Base): params[1] = params[1].entity params = cls.getPropertyValues(obj) + params ret = func(*params,group=solver.group) - solver.system.log('{}: {}'.format(cstrName(obj),ret)) + solver.system.log('{}: {}',cstrName(obj),ret) return ret @@ -1364,7 +1362,7 @@ class Symmetric(Base): func = cls.constraintFunc(obj,solver,'addPointsVertical') if func: ret.append(func(e0.px, e1.px, w.entity, group=solver.group)) - solver.system.log('{}: {}'.format(cstrName(obj),ret)) + solver.system.log('{}: {}',cstrName(obj),ret) return ret @@ -1564,7 +1562,7 @@ class LineLength(BaseSketch): _,p0,p1 = cls.getEntities(obj,solver,retAll=True)[0] params = cls.getPropertyValues(obj) + [p0,p1] ret = func(*params,group=solver.group) - solver.system.log('{}: {}'.format(cstrName(obj),ret)) + solver.system.log('{}: {}',cstrName(obj),ret) return ret @@ -1643,7 +1641,7 @@ class MidPoint(BaseSketch): if len(params)==2: params.append(0) ret = func(*params,group=solver.group) - solver.system.log('{}: {}'.format(cstrName(obj),ret)) + solver.system.log('{}: {}',cstrName(obj),ret) return ret diff --git a/gui.py b/gui.py index d3cd68c..6e8016c 100644 --- a/gui.py +++ b/gui.py @@ -120,13 +120,13 @@ class SelectionObserver: self.resetElementVisible() def attach(self): - logger.trace('attach selection aboserver {}'.format(self._attached)) + logger.trace('attach selection aboserver {}',self._attached) if not self._attached: FreeCADGui.Selection.addObserver(self,False) self._attached = True def detach(self): - logger.trace('detach selection aboserver {}'.format(self._attached)) + logger.trace('detach selection aboserver {}',self._attached) if self._attached: FreeCADGui.Selection.removeObserver(self) self._attached = False @@ -165,7 +165,7 @@ class AsmCmdManager(ProxyType): hgrp.SetBool(toolbar,show) tb = mw.findChild(QtGui.QToolBar,toolbar) if not tb: - logger.error('cannot find toolbar "{}"'.format(toolbar)) + logger.error('cannot find toolbar "{}"',toolbar) tb.setVisible(show) @classmethod @@ -494,8 +494,7 @@ class AsmCmdTrace(AsmCmdCheckable): if len(subs)==1: cls._object = sel[0].Object cls._subname = subs[0] - logger.info('trace {}.{}'.format( - cls._object.Name,cls._subname)) + logger.info('trace {}.{}',cls._object.Name,cls._subname) return logger.info('trace moving element') @@ -690,8 +689,8 @@ class AsmCmdGotoLinked(AsmCmdBase): subname = '.'.join(subname+linkSub.split('.')) sobj = sels[0].Object.getSubObject(subname,retType=1) if not sobj: - logger.error('Cannot find sub object {}.{}'.format( - objName(sels[0].Object),subname)) + logger.error('Cannot find sub object {}.{}', + objName(sels[0].Object),subname) return FreeCADGui.Selection.pushSelStack() FreeCADGui.Selection.clearSelection() @@ -738,8 +737,8 @@ class AsmCmdUp(AsmCmdBase): j = len(children)-1 elif j>=len(children): j = 0 - logger.debug('move {}:{} -> {}:{}'.format( - i,objName(obj),j,objName(children[j]))) + logger.debug('move {}:{} -> {}:{}', + i,objName(obj),j,objName(children[j])) FreeCAD.setActiveTransaction(cls._menuText) readonly = 'Immutable' in parent.getPropertyStatus('Group') if readonly: diff --git a/mover.py b/mover.py index 51a62f8..4c4cc4c 100644 --- a/mover.py +++ b/mover.py @@ -41,8 +41,7 @@ class AsmMovingPart(object): if bbox.isValid(): self.bbox = bbox else: - logger.warn('empty bounding box of part {}'.format( - info.PartName)) + logger.warn('empty bounding box of part {}',info.PartName) self.bbox = FreeCAD.BoundBox(0,0,0,5,5,5) hasBound = False @@ -84,7 +83,7 @@ class AsmMovingPart(object): pla = info.Placement.multiply(FreeCAD.Placement(pos,rot)) else: pla = info.Placement.multiply(self.offset) - logger.trace('part move update {}: {}'.format(objName(info.Parent),pla)) + logger.trace('part move update {}: {}',objName(info.Parent),pla) self.draggerPlacement = pla return pla @@ -115,15 +114,15 @@ class AsmMovingPart(object): if info.Subname.startswith('Vertex'): idx = utils.draftWireVertex2PointIndex(part,info.Subname) if idx is None: - logger.error('Invalid draft wire vertex {} {}'.format( - info.Subname, info.PartName)) + logger.error('Invalid draft wire vertex {} {}', + info.Subname, info.PartName) return change = [idx] else: change = utils.edge2VertexIndex(part,info.Subname,True) if change[0] is None or change[1] is None: - logger.error('Invalid draft wire edge {} {}'.format( - info.Subname, info.PartName)) + logger.error('Invalid draft wire edge {} {}', + info.Subname, info.PartName) return movement = self.Movement diff --git a/proxy.py b/proxy.py index 2de3db0..afa6260 100644 --- a/proxy.py +++ b/proxy.py @@ -92,8 +92,8 @@ class ProxyType(type): cls = mcs.getType(mcs.getTypeName(obj)) proxy = mcs.getProxy(obj) if type(proxy) is not cls: - logger.debug('attaching {}, {} -> {}'.format( - objName(obj),type(proxy).__name__,cls.__name__),frame=1) + logger.debug('attaching {}, {} -> {}', + objName(obj),type(proxy).__name__,cls.__name__,frame=1) if proxy: mcs.detach(obj) if mcs.getTypeID(obj) != cls._id: @@ -131,8 +131,8 @@ class ProxyType(type): def detach(mcs,obj,detachAll=False): proxy = mcs.getProxy(obj) if proxy: - logger.debug('detaching {}<{}>'.format(objName(obj), - proxy.__class__.__name__)) + logger.debug('detaching {}<{}>',objName(obj), + proxy.__class__.__name__) for key in proxy.getPropertyInfoList(): prop = mcs.getPropertyInfo(key) obj.removeProperty(prop.Name) @@ -156,8 +156,8 @@ class ProxyType(type): def attach(mcs,obj,checkType=True): info = mcs.getInfo() if not info.TypeNames: - logger.error('"{}" has no registered types'.format( - mcs.getMetaName())) + logger.error('"{}" has no registered types', + mcs.getMetaName()) return if checkType: @@ -167,8 +167,8 @@ class ProxyType(type): mcs.setDefaultTypeID(obj) if mcs._typeEnum not in obj.PropertiesList: - logger.debug('type enum {}, {}'.format(mcs._typeEnum, - mcs._propGroup)) + logger.debug('type enum {}, {}',mcs._typeEnum, + mcs._propGroup) obj.addProperty("App::PropertyEnumeration", mcs._typeEnum,mcs._propGroup,'',2) mcs.setTypeName(obj,info.TypeNames) @@ -177,8 +177,8 @@ class ProxyType(type): try: idx = mcs.getType(obj)._idx except KeyError: - logger.warn('{} has unknown {} type {}'.format( - objName(obj),mcs.getMetaName(),mcs.getTypeID(obj))) + logger.warn('{} has unknown {} type {}', + objName(obj),mcs.getMetaName(),mcs.getTypeID(obj)) mcs.setTypeName(obj,idx) return mcs.setProxy(obj) @@ -226,8 +226,8 @@ class ProxyType(type): info.TypeNameMap[cls.getName()] = cls info.TypeNames.append(cls.getName()) cls._idx = len(info.TypeNames)-1 - logger.trace('register {} "{}":{},{}'.format( - mcs.getMetaName(),cls.getName(),cls._id,cls._idx)) + logger.trace('register {} "{}":{},{}', + mcs.getMetaName(),cls.getName(),cls._id,cls._idx) @classmethod def addPropertyInfo(mcs,info,duplicate): diff --git a/solver.py b/solver.py index 3404c60..9bdfbba 100644 --- a/solver.py +++ b/solver.py @@ -34,8 +34,8 @@ class Solver(object): self.system = System.getSystem(assembly) cstrs = assembly.Proxy.getConstraints() if not cstrs: - logger.debug('skip assembly {} with no constraint'.format( - objName(assembly))) + logger.debug('skip assembly {} with no constraint', + objName(assembly)) return self._fixedGroup = 2 @@ -69,7 +69,7 @@ class Solver(object): self._fixedElements.add((part,None)) for cstr in cstrs: - self.system.log('preparing {}'.format(cstrName(cstr))) + self.system.log('preparing {}',cstrName(cstr)) self.system.GroupHandle += 1 ret = Constraint.prepare(cstr,self) if ret: @@ -87,13 +87,12 @@ class Solver(object): info = self._partMap.get(dragPart,None) if info and info.Workplane: # add dragging point - self.system.log('add drag point ' - '{}'.format(info.Workplane[1])) + self.system.log('add drag point {}',info.Workplane[1]) # TODO: slvs addWhereDragged doesn't work as expected, need # to investigate more # addDragPoint(info.Workplane[1],group=self.group) - self.system.log('solving {}'.format(objName(assembly))) + self.system.log('solving {}',objName(assembly)) try: self.system.solve(group=self.group,reportFailed=reportFailed) except RuntimeError as e: @@ -109,13 +108,12 @@ class Solver(object): try: c = self.system.getConstraint(h) except Exception as e2: - logger.error('cannot find constraint ' - '{}: {}'.format(h,e2)) + logger.error('cannot find constraint {}: {}',h,e2) continue if c.group <= self._fixedGroup or \ c.group-self._fixedGroup >= len(cstrs): logger.error('failed constraint in unexpected group' - ' {}'.format(c.group)) + ' {}',c.group) continue cstr = cstrs[c.group-self._fixedGroup] msg += '\n{}, handle: {}'.format(cstrName(cstr),h) @@ -143,12 +141,12 @@ class Solver(object): v = partInfo.Placement.inverse().multVec(v) idx = utils.draftWireVertex2PointIndex(part,key[:-2]) if utils.isSamePos(points[idx],v): - self.system.log('not moving {} point {}'.format( - partInfo.PartName,idx)) + self.system.log('not moving {} point {}', + partInfo.PartName,idx) else: changed = True - self.system.log('moving {} point{} from {}->{}'.format( - partInfo.PartName,idx,points[idx],v)) + self.system.log('moving {} point{} from {}->{}', + partInfo.PartName,idx,points[idx],v) if rollback is not None: rollback.append((partInfo.PartName, part, @@ -163,11 +161,11 @@ class Solver(object): q = (params[4],params[5],params[6],params[3]) pla = FreeCAD.Placement(FreeCAD.Vector(*p),FreeCAD.Rotation(*q)) if isSamePlacement(partInfo.Placement,pla): - self.system.log('not moving {}'.format(partInfo.PartName)) + self.system.log('not moving {}',partInfo.PartName) else: touched = True - self.system.log('moving {} {} {} {}'.format( - partInfo.PartName,partInfo.Params,params,pla)) + self.system.log('moving {} {} {} {}', + partInfo.PartName,partInfo.Params,params,pla) if rollback is not None: rollback.append((partInfo.PartName, part, @@ -196,12 +194,12 @@ class Solver(object): math.degrees(p0.getAngle(p2))) if utils.isSameValue(v0,v): - self.system.log('not change draft circle {}'.format( - partInfo.PartName)) + self.system.log('not change draft circle {}', + partInfo.PartName) else: touched = True - self.system.log('change draft circle {} {}->{}'.format( - partInfo.PartName,v0,v)) + self.system.log('change draft circle {} {}->{}', + partInfo.PartName,v0,v) if rollback is not None: rollback.append((partInfo.PartName, part, v0)) part.Radius = v[0] @@ -221,10 +219,9 @@ class Solver(object): pla = partInfo0.Placement.copy() pla.Base += pos-refPos if isSamePlacement(info0.Placement,pla): - self.system.log('not moving {}'.format(info0.PartName)) + self.system.log('not moving {}',info0.PartName) else: - self.system.log('moving {} {}'.format( - partInfo.PartName,pla)) + self.system.log('moving {} {}',partInfo.PartName,pla) touched = True if rollback is not None: rollback.append((info0.PartName, @@ -307,7 +304,7 @@ class Solver(object): CstrMap = {}, Update = []) - self.system.log('{}, {}'.format(partInfo,g)) + self.system.log('{}, {}',partInfo,g) self._partMap[info.Part] = partInfo return partInfo @@ -332,9 +329,9 @@ def _solve(objs=None,recursive=None,reportFailed=False, if not isTypeOf(obj,Assembly): continue if System.isDisabled(obj) or obj.Freeze: - logger.debug('bypass disabled assembly {}'.format(objName(obj))) + logger.debug('bypass disabled assembly {}',objName(obj)) continue - logger.debug('adding assembly {}'.format(objName(obj))) + logger.debug('adding assembly {}',objName(obj)) assemblies.append(obj) if not assemblies: @@ -354,9 +351,9 @@ def _solve(objs=None,recursive=None,reportFailed=False, if not isTypeOf(obj,Assembly): continue if System.isDisabled(obj) or obj.Freeze: - logger.debug('skip disabled assembly {}'.format(objName(obj))) + logger.debug('skip disabled assembly {}',objName(obj)) continue - logger.debug('adding assembly {}'.format(objName(obj))) + logger.debug('adding assembly {}',objName(obj)) assemblies.append(obj) if not assemblies: @@ -375,7 +372,7 @@ def _solve(objs=None,recursive=None,reportFailed=False, except Exception: if rollback is not None: for name,part,v in reversed(rollback): - logger.debug('roll back {} to {}'.format(name,v)) + logger.debug('roll back {} to {}',name,v) if isinstance(v,FreeCAD.Placement): setPlacement(part,v) elif utils.isDraftWire(part): diff --git a/sys_slvs.py b/sys_slvs.py index 71d5800..f3846b9 100644 --- a/sys_slvs.py +++ b/sys_slvs.py @@ -51,5 +51,5 @@ class _SystemSlvs(SystemExtension,slvs.System): reason = 'unknown failure' if reason: raise RuntimeError(reason) - logger.info('dof remaining: {}'.format(self.Dof)) + logger.info('dof remaining: {}',self.Dof) diff --git a/sys_sympy.py b/sys_sympy.py index 41b77ce..59dd068 100644 --- a/sys_sympy.py +++ b/sys_sympy.py @@ -306,7 +306,7 @@ class _MetaType(type): def __init__(cls, name, bases, attrs): super(_MetaType,cls).__init__(name,bases,attrs) if len(cls._args): - logger.trace('registing sympy ' + cls.__name__) + logger.trace('registing sympy {}', cls.__name__) mcs = cls.__class__ mcs._types.append(cls) mcs._typeMap[cls.__name__[1:]] = cls @@ -689,7 +689,7 @@ class _Translate(_Vector): elif isinstance(e,CoordSystem): # This means src is a normal, and we don't translate normal in order # to be compatibable with solvespace - logger.warn('{} translating normal has no effect'.format(self.Name)) + logger.warn('{} translating normal has no effect',self.Name) return e else: raise ValueError('unsupported transformation {} of ' @@ -1183,7 +1183,7 @@ class _SystemSymPy(SystemExtension): if not ret.success: msg = getattr(ret,'message',None) logger.warn('failed to solve {}: ' - '{}'.format(o.Name,msg if msg else ret)) + '{}',o.Name,msg if msg else ret) else: self.log('single solve done: ' '{}'.format(ret.x[0])) @@ -1216,7 +1216,7 @@ class _SystemSymPy(SystemExtension): continue except Exception as excp: logger.warn('simple solve exception: ' - '{}'.format(excp.message)) + '{}',excp.message) if not restart: if len(active_params)!=len(params): diff --git a/system.py b/system.py index 3066d3b..a661088 100644 --- a/system.py +++ b/system.py @@ -148,9 +148,9 @@ class SystemExtension(object): msg = '{} between {} and {}'.format(cstrName(self.cstrObj), self.firstInfo.PartName, self.secondInfo.PartName) if warn: - logger.warn('skip redundant ' + msg, frame=1) + logger.warn('skip redundant {}', msg, frame=1) else: - logger.debug('auto relax ' + msg, frame=1) + logger.debug('auto relax {}', msg, frame=1) def _countConstraints(self,increment,limit,*names): first,second = self.firstInfo,self.secondInfo diff --git a/utils.py b/utils.py index 1322484..771567b 100644 --- a/utils.py +++ b/utils.py @@ -89,11 +89,11 @@ def getElementShape(obj,tp=None,transform=False,noElementMap=True): needSubElement=True,retType=2, transform=transform,noElementMap=noElementMap) if not sobj: - logger.trace('no sub object {}'.format(obj)) + logger.trace('no sub object {}',obj) return if sobj.isDerivedFrom('App::Line'): if tp not in (None,Part.Shape,Part.Edge): - logger.trace('wrong type of shape {}'.format(obj)) + logger.trace('wrong type of shape {}',obj) return size = sobj.ViewObject.Size shape = Part.makeLine(FreeCAD.Vector(-size,0,0), @@ -102,7 +102,7 @@ def getElementShape(obj,tp=None,transform=False,noElementMap=True): return shape elif sobj.isDerivedFrom('App::Plane'): if tp not in (None, Part.Shape, Part.Face): - logger.trace('wrong type of shape {}'.format(obj)) + logger.trace('wrong type of shape {}',obj) return size = sobj.ViewObject.Size shape = Part.makePlane(size*2,size*2, @@ -110,17 +110,17 @@ def getElementShape(obj,tp=None,transform=False,noElementMap=True): shape.transformShape(mat,False,True) return shape elif shape.isNull(): - logger.trace('no shape {}'.format(obj)) + logger.trace('no shape {}',obj) return if not isinstance(shape,Part.Shape) or shape.isNull(): - logger.trace('null shape {}'.format(obj)) + logger.trace('null shape {}',obj) return if not tp or isinstance(shape,tp): return shape elif isinstance(shape,(Part.Vertex,Part.Edge,Part.Face)): - logger.trace('wrong shape type {}'.format(obj)) + logger.trace('wrong shape type {}',obj) return elif tp is Part.Vertex: if shape.countElement('Edge'): @@ -136,7 +136,7 @@ def getElementShape(obj,tp=None,transform=False,noElementMap=True): if shape.countElement('Face')==1: return shape.Face1 else: - logger.trace('wrong shape type {}'.format(obj)) + logger.trace('wrong shape type {}',obj) def isDraftWire(obj): proxy = getattr(obj,'Proxy',None)