User:GeneaBot/Code/object display
< User:GeneaBot | Code
# -*- coding: utf-8 -*-
import pywikibot
class DisplayMessages:
FileOpen = False
FilenameT = "default.txt"
FilenameE = "default.csv"
Directory = "logs\\"
#
#
#
Debug = 1
# 0 = only error
# 1 = warning
# 2 = infos
# 3 = function calls
# 5 = method calls
# 7 = util calls
#
#
#
def SetDebug(Debug):
DisplayMessages.Debug = Debug
SetDebug = staticmethod(SetDebug)
#
#
#
#
def GetDebug():
return DisplayMessages.Debug
GetDebug = staticmethod(GetDebug)
#
#
#
#
def SetFileName(FileName):
if len(FileName) > 4:
if FileName[len(FileName)-4:] == ".txt":
DisplayMessages.FilenameT = FileName
DisplayMessages.FilenameE = FileName[:len(FileName)-4] + ".csv"
else:
DisplayMessages.FilenameT = FileName + ".txt"
DisplayMessages.FilenameE = FileName + ".csv"
else:
DisplayMessages.FilenameT = FileName + ".txt"
DisplayMessages.FilenameE = FileName + ".csv"
SetFileName = staticmethod(SetFileName)
#
#
#
#
def Format(Function, TypMsg, Message):
lgDebLigne = 51
lgLigne = 135
text = Function + " ".center(lgDebLigne-11)
text = text[:lgDebLigne-11] + " " + TypMsg + " ".center(lgDebLigne-11)
text = text[:lgDebLigne-3 ] + " : "
lines = Message.split('\n')
cr = ""
for msg in lines:
text += cr
while len(msg) > lgLigne:
text += msg[:lgLigne] + "\n" + " ".center(lgDebLigne)
msg = msg[lgLigne:]
text += msg
cr = "\n" + " ".center(lgDebLigne)
return text
Format = staticmethod(Format)
#
#
#
#
def error(TypeSoft, Function, Message):
DisplayMessages.Print(TypeSoft, 0, Function, "ERROR", Message)
error = staticmethod(error)
#
#
#
#
def warning(TypeSoft, Function, Message):
DisplayMessages.Print(TypeSoft, 1, Function, "warning", Message)
warning = staticmethod(warning)
#
#
#
#
def message(TypeSoft, Function, Message):
DisplayMessages.Print(TypeSoft, 1, Function, "message", Message)
message = staticmethod(message)
#
#
#
#
def call(TypeSoft, Function, Level, Message):
DisplayMessages.Print(TypeSoft, Level, Function, "calling", Message)
call = staticmethod(call)
#
#
#
#
def debug(TypeSoft, Function, Level, Message):
DisplayMessages.Print(TypeSoft, Level, Function, "debug " + str(Level), Message)
debug = staticmethod(debug)
#
#
#
#
def Print(typSoft, level, function, typMsg, message):
if typSoft == 'O':
fct = function.split('.')
if len(fct) >= 3:
functionT = fct[0] + '.' + fct[2]
functionE = fct[0] + ';' + fct[1] + ';' + fct[2]
else:
functionT = function
if len(fct) == 2:
functionE = fct[0] + ';;' + fct[1]
else:
functionE = ';;' + function
else:
functionT = function
functionE = ';;' + function
text = DisplayMessages.Format(functionT, typMsg, message)
textT = "oe".join(text.split('œ'))
if DisplayMessages.Debug >= level:
print(textT)
if not DisplayMessages.FilenameT == "":
if not DisplayMessages.FileOpen:
DisplayMessages.FileT = open(DisplayMessages.Directory + DisplayMessages.FilenameT, "w")
DisplayMessages.FileE = open(DisplayMessages.Directory + DisplayMessages.FilenameE, "w")
textE = 'Soft;Class;Object;Function;Type Message;Gravity;Message'
DisplayMessages.FileE.write( textE + '\n' )
DisplayMessages.FileOpen = True
try:
DisplayMessages.FileT.write( textT + '\n' )
except UnicodeEncodeError :
DisplayMessages.FileT.write( textT[:51] + '### cannot display text : UnicodeEncodeError ###\n' )
message2 = ", ".join(message.split('\n'))
messageE = "-".join(message2.split(';'))
textE = typSoft + ';' + functionE + ';' + typMsg + ';' + str(level) + ';' + messageE
try:
DisplayMessages.FileE.write( textE + '\n' )
except UnicodeEncodeError :
DisplayMessages.FileT.write( typSoft + ';' + functionE + ';' + typMsg + ';' + str(level) + ';' + '### cannot display text : UnicodeEncodeError ###\n' )
Print = staticmethod(Print)
#
#
#
def End():
if DisplayMessages.FileOpen:
DisplayMessages.FileT.close()
DisplayMessages.FileE.close()
DisplayMessages.FileOpen = False
End = staticmethod(End)
class DisplayLog:
FileOpen = False
Filename = "default.log"
Directory = "logs\\"
#
#
#
def SetFileName(FileIn=""):
if not FileIn == "":
if FileIn[len(FileIn)-4:] == ".txt":
DisplayLog.Filename = FileIn[:len(FileIn)-4] + ".log"
else:
DisplayLog.Filename = FileIn + ".log"
SetFileName = staticmethod(SetFileName)
#
#
#
def AppendRequest(Text):
if not DisplayLog.FileOpen:
DisplayLog.File = open(DisplayLog.Directory + DisplayLog.Filename, "w")
DisplayLog.FileOpen = True
DisplayLog.File.write("\n" + Text + "\n")
AppendRequest = staticmethod(AppendRequest)
#
#
#
def AppendLogTitle(Text):
if not DisplayLog.FileOpen:
DisplayLog.File = open(DisplayLog.Directory + DisplayLog.Filename, "w")
DisplayLog.FileOpen = True
DisplayLog.File.write("=== " + Text + " ===\n")
AppendLogTitle = staticmethod(AppendLogTitle)
#
#
#
def AppendItem(Text):
if not Text == "":
if not DisplayLog.FileOpen:
DisplayLog.File = open(DisplayLog.Directory + DisplayLog.Filename, "w")
DisplayLog.FileOpen = True
DisplayLog.File.write(Text + "\n")
AppendItem = staticmethod(AppendItem)
#
#
#
def End():
DisplayLog.File.close()
DisplayLog.FileOpen = False
End = staticmethod(End)
#
#
#
def Read():
if DisplayLog.FileOpen:
DisplayLog.End()
DisplayLog.File = open(DisplayLog.Directory + DisplayLog.Filename, "r")
TextResult = DisplayLog.File.read()
DisplayLog.File.close()
print( TextResult)
Read = staticmethod(Read)
class CallParameter:
def __init__(self, *args):
self.param = dict()
ListArgs = pywikibot.handle_args(args)
i = 0
while i < len(ListArgs):
argument = ListArgs[i]
if argument[0] == '-':
argument = argument[1:]
larg = argument.split(':')
if len(larg) == 1:
self.param[larg[0].lower()] = True
elif len(larg) == 2:
name = larg[0].lower()
value = argument[len(larg[0])+1:]
if value.isdigit():
self.param[name] = int(value)
else:
self.param[name] = value
else:
name = larg[0].lower()
value = argument[len(larg[0])+1:]
if value.isdigit():
self.param[name] = int(value)
else:
self.param[name] = value
i += 1
DisplayMessages.SetDebug( self.GetValue('debug', 1) )
#
#
#
def GetValue(self, Name, DefaultValue):
Value = DefaultValue
if Name in self.param:
if type(Value) == type(self.param[Name]):
Value = self.param[Name]
return Value
def testObjectDisplay(*args):
param = CallParameter(*args)
print( param.param )
print( 'debug : ' + str(param.GetValue('debug', 1)) )
print( 'case : ' + str(param.GetValue('case', 0)) )
print( 'represent : ' + str(param.GetValue('represent', False)) )
DisplayMessages.SetFileName("")
DisplayMessages.error ("T", "testObjectDisplay", "test error message")
DisplayMessages.warning("T", "testObjectDisplay", "test warning message")
DisplayMessages.call ("T", "testObjectDisplay", 3, "test function message")
DisplayMessages.call ("T", "testObjectDisplay", 5, "test method message")
DisplayMessages.call ("T", "testObjectDisplay", 7, "test util message")
i = 0
while i < 10:
DisplayMessages.debug("T", "testObjectDisplay", i, "test debug " + str(i) + " message")
i += 1
basictext = "0123456789"
i = 0
text = basictext
while i < 30:
text += basictext
i += 1
DisplayMessages.debug("T", "testObjectDisplay", 0, "test of long message : " + text)
DisplayMessages.debug("T", "testObjectDisplay", 0, "test message with carriage return : " + text + \
"\nNewline : " + text)
DisplayMessages.End()
if __name__ == "__main__":
testObjectDisplay()