""" Utility module to help debug Python scripts -------------------------------------------------------------------------- File: utilsDebug.py Overview: Python module to supply functions to help debug Python scripts. Environment: OS: Windows/LINUX/OSX IDE: Visual Studio 2013 Plugin Python Tools (PTVS) Script: Python 2.6 x64 Gotchas: None. Copyright: None. -------------------------------------------------------------------------- """ # Python modules: # 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: # 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; print "%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 ); # Class destructor def __del__( self ): self.__indent_back(); #++------------------------------------------------------------------------ # 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 = "";