User:GeneaBot/Code/object display

From Wikidata
Jump to navigation Jump to search
# -*- 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()