2014-07-02 01:57:19 +08:00
|
|
|
""" Utility module to help debug Python scripts
|
|
|
|
|
2015-11-06 07:57:33 +08:00
|
|
|
--------------------------------------------------------------------------
|
|
|
|
File: utilsDebug.py
|
2014-07-02 01:57:19 +08:00
|
|
|
|
2015-11-06 07:57:33 +08:00
|
|
|
Overview: Python module to supply functions to help debug Python
|
|
|
|
scripts.
|
|
|
|
Gotchas: None.
|
|
|
|
Copyright: None.
|
|
|
|
--------------------------------------------------------------------------
|
2014-07-02 01:57:19 +08:00
|
|
|
"""
|
|
|
|
|
|
|
|
# Python modules:
|
2015-11-06 07:57:33 +08:00
|
|
|
import sys
|
2014-07-02 01:57:19 +08:00
|
|
|
|
|
|
|
# Third party modules:
|
|
|
|
|
|
|
|
# In-house modules:
|
|
|
|
|
|
|
|
# Instantiations:
|
|
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
2015-11-06 07:57:33 +08:00
|
|
|
# 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.
|
2014-07-02 01:57:19 +08:00
|
|
|
#--
|
2015-11-06 07:57:33 +08:00
|
|
|
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 = ""
|