aboutsummaryrefslogtreecommitdiff
path: root/scripts/utilsDebug.py
blob: 4b5eb7fa3e70696f53f3f2c197c44b996001ae18 (plain) (blame)
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
""" Utility module to help debug Python scripts

    --------------------------------------------------------------------------
    File: utilsDebug.py

    Overview:  Python module to supply functions to help debug Python
               scripts.
    Gotchas:   None.
    Copyright: None.
    --------------------------------------------------------------------------
"""

# Python modules:
import sys

# Third party modules:

# In-house modules:

# Instantiations:

#-----------------------------------------------------------------------------
# Details: Class to implement simple stack function trace. Instantiation the
#          class as the first function you want to trace. Example:
#          obj = utilsDebug.CDebugFnVerbose("validate_arguments()")
# Gotchas: This class will not work in properly in a multi-threaded
#          environment.
# Authors: Illya Rudkin 28/11/2013.
# Changes: None.
#--
class CDebugFnVerbose(object):
    # Public static properties:
    bVerboseOn = False # True = turn on function tracing, False = turn off.

    # Public:
    #++------------------------------------------------------------------------
    # Details: CDebugFnVerbose constructor.
    # Type:    Method.
    # Args:    vstrFnName - (R) Text description i.e. a function name.
    # Return:  None.
    # Throws:  None.
    #--
    # CDebugFnVerbose(vstrFnName)

    #++------------------------------------------------------------------------
    # Details: Print out information on the object specified.
    # Type:    Method.
    # Args:    vstrText - (R) Some helper text description.
    #          vObject - (R) Some Python type object.
    # Return:  None.
    # Throws:  None.
    #--
    def dump_object(self, vstrText, vObject):
        if CDebugFnVerbose.bVerboseOn == False:
            return
        sys.stdout.write("%d%s> Dp: %s" % (CDebugFnVerbose.__nLevel, self.__get_dots(),
                                           vstrText))
        print(vObject)

    #++------------------------------------------------------------------------
    # Details: Print out some progress text given by the client.
    # Type:    Method.
    # Args:    vstrText - (R) Some helper text description.
    # Return:  None.
    # Throws:  None.
    #--
    def dump_text(self, vstrText):
        if CDebugFnVerbose.bVerboseOn == False:
            return
        print(("%d%s> Dp: %s" % (CDebugFnVerbose.__nLevel, self.__get_dots(),
                                 vstrText)))

    # Private methods:
    def __init__(self, vstrFnName):
        self.__indent_out(vstrFnName)

    #++------------------------------------------------------------------------
    # Details: Build an indentation string of dots based on the __nLevel.
    # Type:    Method.
    # Args:    None.
    # Return:  Str - variable length string.
    # Throws:  None.
    #--
    def __get_dots(self):
        return "".join("." for i in range(0, CDebugFnVerbose.__nLevel))

    #++------------------------------------------------------------------------
    # Details: Build and print out debug verbosity text indicating the function
    #          just exited from.
    # Type:    Method.
    # Args:    None.
    # Return:  None.
    # Throws:  None.
    #--
    def __indent_back(self):
        if CDebugFnVerbose.bVerboseOn:
            print(("%d%s< fn: %s" % (CDebugFnVerbose.__nLevel, self.__get_dots(),
                                     self.__strFnName)))
        CDebugFnVerbose.__nLevel -= 1

    #++------------------------------------------------------------------------
    # Details: Build and print out debug verbosity text indicating the function
    #          just entered.
    # Type:    Method.
    # Args:    vstrFnName - (R) Name of the function entered.
    # Return:  None.
    # Throws:  None.
    #--
    def __indent_out(self, vstrFnName):
        CDebugFnVerbose.__nLevel += 1
        self.__strFnName = vstrFnName
        if CDebugFnVerbose.bVerboseOn:
            print(("%d%s> fn: %s" % (CDebugFnVerbose.__nLevel, self.__get_dots(),
                                     self.__strFnName)))

    # Private statics attributes:
    __nLevel = 0 # Indentation level counter

    # Private attributes:
    __strFnName = ""