| """ 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 not CDebugFnVerbose.bVerboseOn: | 
 |             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 not CDebugFnVerbose.bVerboseOn: | 
 |             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 = "" |