1"""
2@package core.debug
3
4@brief wxGUI debugging
5
6Classes:
7 - debug::DebugMsg
8
9@code
10from core.debug import Debug
11Debug.msg (3, 'debug message')
12@endcode
13
14(C) 2007-2009, 2011 by the GRASS Development Team
15
16This program is free software under the GNU General Public License
17(>=v2). Read the file COPYING that comes with GRASS for details.
18
19@author Martin Landa <landa.martin gmail.com>
20"""
21
22import os
23import sys
24
25import grass.script as grass
26
27
28class DebugMsg:
29    """wxGUI debugging
30
31        g.gisenv set=WX_DEBUG=[0-5]
32
33    """
34
35    def __init__(self):
36        # default level
37        self.debuglevel = 0
38
39        self.SetLevel()
40
41    def SetLevel(self):
42        """Initialize gui debug level
43        """
44        try:
45            self.debuglevel = int(grass.gisenv().get('WX_DEBUG', 0))
46            if self.debuglevel < 0 or self.debuglevel > 5:
47                raise ValueError(
48                    _("Wx debug level {0}.").format(
49                        self.debuglevel))
50        except ValueError as e:
51            self.debuglevel = 0
52            sys.stderr.write(
53                _("WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {0}\n").format(e))
54
55    def msg(self, level, message, *args):
56        """Print debug message
57
58        :param level: debug level (0-5)
59        :param message: message to be printed
60        :param args: formatting params
61        """
62        # self.SetLevel()
63        if self.debuglevel > 0 and level > 0 and level <= self.debuglevel:
64            if args:
65                sys.stderr.write("GUI D%d/%d: " % (level, self.debuglevel) +
66                                 message % args + os.linesep)
67            else:
68                sys.stderr.write("GUI D%d/%d: " % (level, self.debuglevel) +
69                                 message + os.linesep)
70            sys.stderr.flush()  # force flush (required for MS Windows)
71
72    def GetLevel(self):
73        """Return current GUI debug level"""
74        return self.debuglevel
75
76# Debug instance
77Debug = DebugMsg()
78