Bonjour. J'ai un petit soucie à comprendre la différence entre variable d'instance et variable de classe. Voici un petit module de trace que j'ai créé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import time
import datetime
 
myModuleList = list()
#ERROR and OFF is the samething.
myModuleList=[{'ModuleName':'ReplicationMaestro',           'FunctionName':'ALL',   'TraceLevel': 'DEBUG'}, \
            {'ModuleName': 'packagesEXPToCompress',         'FunctionName':'ALL',   'TraceLevel': 'DEBUG'}, \
            {'ModuleName': 'packagesACKToDecompress',       'FunctionName':'ALL',   'TraceLevel': 'DEBUG'}, \
            {'ModuleName': 'packagesEXPToDecompress',       'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesToProcess',             'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesACKToCompress',         'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesACKToTransfer',         'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesToTransfer',            'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesToACK',                 'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesToImport',              'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesToExport',              'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesToExport',              'FunctionName':'__isFullExport',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesToRmvFromOrigin',       'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'packagesToRmvFromDestination',  'FunctionName':'ALL',   'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'SiteXMLHandler',        'FunctionName':'ALL' ,  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'SchedulerXMLHandler',   'FunctionName':'ALL' ,  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'Tools',                 'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'Tools',                 'FunctionName':'Now_CleanString' ,  'TraceLevel': 'OFF'}, \
            {'ModuleName': 'Tools',                 'FunctionName':'Now_Object' ,  'TraceLevel': 'OFF'}, \
            {'ModuleName': 'Robocopy',              'FunctionName':'ALL' ,  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'SitesManager',          'FunctionName':'ALL' ,  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'SchedulersManager',     'FunctionName':'ALL' ,  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'ScheduleChecker',       'FunctionName':'ALL' ,  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'ScheduleChecker',       'FunctionName':'getCurrentTimeFrame' ,  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'DaysOfTheWeek',         'FunctionName':'ALL' ,  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'RemoveOrigPackage',     'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'RemoveDestPackage',     'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'CompressAckPckg',       'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'CompressExpPckg',       'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'TransferPackage',       'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'TransferACKPackage',    'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'ReceiveAck',            'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'ApplyPackage',          'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'ExtractForSite',        'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'main',                  'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'DecompressAckPckg',     'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'DecompressExpPckg',     'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'Action',                'FunctionName':'ALL' ,  'TraceLevel': 'INFO'}, \
            {'ModuleName': 'Oracle',                'FunctionName':'ALL',  'TraceLevel': 'ERROR'}, \
            {'ModuleName': 'Oracle',                'FunctionName':'executeSQL',        'TraceLevel': 'OFF'}]
 
class TRACES:
    count = 0
    Indentation = ""
    def __init__(self, moduleToTraces, functionToTraces):
 
        self.myModuleList = myModuleList
        self.moduleToTraces = moduleToTraces
        self.functionToTraces = functionToTraces
        if self.__isTracesNeeded():
            self.__setIndentation()
            TRACES.count += 1
            self.tracescount  = TRACES.count
            if TRACES.Indentation:
                self.LOG("[" + self.__NOW() + "] " + TRACES.Indentation  + moduleToTraces + "::" + functionToTraces + " {")
            else:
                self.LOG("[" + self.__NOW() + "] " + moduleToTraces + "::" + functionToTraces + " {")
            self.Indentation = TRACES.Indentation + ": "
        else:
            tmp = TRACES.Indentation
            self.__setIndentation()
            self.Indentation = TRACES.Indentation
            TRACES.Indentation = tmp
 
    def __del__(self):
        if self.__isTracesNeeded():
            try:
                if TRACES.Indentation:
                    self.LOG("[" + self.__NOW() + "] " + TRACES.Indentation + "} ")
                else:
                    self.LOG("[" + self.__NOW() + "] } ")
                TRACES.count -= 1
                TRACES.Indentation = TRACES.Indentation.replace(": ", "", 1)
                TRACES.Indentation = TRACES.Indentation.lstrip()
            except:
                self.LOG("[" + self.__NOW() + "] } ")
 
    def __setIndentation(self):
        Indentation = ""
        for i in range (0, TRACES.count):
            Indentation += ": "
 
        TRACES.Indentation = Indentation
 
    def ERROR(self, message):
        try:
            self.LOG("[" + self.__NOW() + "] " + self.Indentation + "**ERROR** in" + self.moduleToTraces + "::" + self.functionToTraces + "||" + message)
        except:
            self.LOG("error ERROR IN THE STRING YOU TRY TO TRACE")
 
    def DEBUG(self, message):
        try:
            if self.__isTracesNeeded("DEBUG"):
                self.LOG("[" + self.__NOW() + "] " + self.Indentation  +  message)
        except:
            self.LOG("debug ERROR IN THE STRING YOU TRY TO TRACE")
 
    def INFO(self, message):
        try:
            if self.__isTracesNeeded("INFO"):
                self.LOG("[" + self.__NOW() + "] " + self.Indentation + message)
        except:
            self.LOG("info ERROR IN THE STRING YOU TRY TO TRACE")
 
    def WARNING(self, message):
        try:
            if self.__isTracesNeeded("WARNING"):
                self.LOG("[" +  self.__NOW() + "] " + self.Indentation + "!WARNING! " + message)
        except:
            self.LOG("warning ERROR IN THE STRING YOU TRY TO TRACE")
 
    def LOG(self, message):
        print message
 
    def __NOW(self):
        import datetime
        return "(UTC)" + str(datetime.datetime.utcnow()).split(".")[0]
 
    def __isTracesNeeded(self, levelToCheck="ALLLEVEL"):
        show = False
        for module in self.myModuleList:
            if self.moduleToTraces in module['ModuleName']:
                if self.functionToTraces in module['FunctionName'] or module['FunctionName'] == 'ALL':
                    if module['TraceLevel'].upper() == "OFF" or module['TraceLevel'].upper() == "ERROR":
                        show =  False
                    elif levelToCheck.upper() == "ALLLEVEL":
                        show =  True
                    elif levelToCheck.upper() == "WARNING" and (module['TraceLevel'].upper() == "WARNING" or module['TraceLevel'].upper() == "INFO" or module['TraceLevel'].upper() == "DEBUG"):
                        show =   True
                    elif levelToCheck.upper() == "INFO" and (module['TraceLevel'].upper() == "DEBUG" or module['TraceLevel'].upper() == "INFO") :
                        show =   True
                    elif levelToCheck.upper() == "DEBUG" and (module['TraceLevel'].upper() == "DEBUG") :
                        show =   True
 
        #Module was not find in the list, that means that the we do not trace the module
        return show
 
####################################################################################
##### Called at the command line ###################################################
####################################################################################
if __name__ == '__main__':
    #print str(myModuleList[4]['ModuleName'])
    myTraces = TRACES("ReplicationMaestro", "function1")
    myTraces.DEBUG("niveau debug")
    myTraces.ERROR("niveau error")
    myTraces.INFO("niveau info")
    myTraces.WARNING("niveau warning")
 
    myTraces2 = TRACES("packagesEXPToCompress", "function2")
    myTraces2.DEBUG("niveau debug")
    #myTraces2.ERROR("niveau error")
    myTraces2.WARNING("niveau warning")
    myTraces2.INFO("niveau info")
    #
    myTraces3 = TRACES("packagesACKToDecompress", "function3")
    myTraces3.DEBUG("niveau debug")
    #myTraces3.ERROR("niveau error")
    myTraces3.WARNING("niveau warning")
    myTraces3.DEBUG("niveau debug")
Mon problème vient du fait que je n'ai plus accès aux variables de TRACES dans le dernier __del__ appelé. C'est comme si, dans le dernier __del__, les variables de classes sont effacé avant de débuter la fonction...

Quelqu'un peu m'aider?

merci!