schrodinger.application.matsci.textlogger module

Class to set up a nicely formatted logger

Copyright Schrodinger, LLC. All rights reserved.

schrodinger.application.matsci.textlogger.log_error(msg, logger=None)

Add a message to the log file and exit with an error code

Parameters:
  • msg (str) – The message to log
  • logger (logging.Logger) – The logger object or None if msg should be printed
schrodinger.application.matsci.textlogger.log_msg(msg, timestamp=False, pad=False, pad_below=False, logger=None)

Add a message to the log file

Parameters:
  • msg (str) – The message to log
  • timestamp (bool) – Whether to print a timestamp with the message
  • pad (bool) – Whether to pad above this message with a blank line
  • pad_below (bool) – Whether to pad below this message with a blank line
  • logger (logging.Logger) – The logger object or None if msg should be printed
schrodinger.application.matsci.textlogger.log(logger, msg, level=20)

Log a message if the logger is defined, else print it

Parameters:
  • logger (logging.Logger) – The logger object or None if no logger is defined
  • msg (str) – The message to log
  • level (int) – The log level to use when logging. These are constants from the Python logging module. The default is INFO.
schrodinger.application.matsci.textlogger.log_initial_data(logger, namespace, msgwidth=None, namespace_header='Command line options:', job_header='Job information')

Log information about the currently running job, if running under job control, and all information in the namespace object.

Parameters:
  • namespace (object) – The object whose properties should be logged. In typical use, this is an argparse.Namespace object. All the values in the __dict__ of this object will be logged. Note that __dict__ does not contain the double-underscore class methods.
  • logger (logging.Logger) – The logger to log with
  • msgwidth (int) – The width of the log messages. Taken from the logger if not supplied
  • namespace_header (str or None) – If not None, this line will be printed above the logged namespace properties
  • job_header (str or None) – If not None, this line will be printed above the logged job properties
schrodinger.application.matsci.textlogger.log_namespace(namespace, logger, msgwidth=None, header='Command line options:')

Log the value of all properties on a object, such as logging all the parameters of an argparse.Namespace object.

Parameters:
  • namespace (object) – The object whose properties should be logged. In typical use, this is an argparse.Namespace object. All the values in the __dict__ of this object will be logged. Note that __dict__ does not contain the double-underscore class methods.
  • logger (logging.Logger) – The logger to log with
  • msgwidth (int) – The width of the log messages. Taken from the logger if not supplied
  • header (str or None) – If not None, this line will be printed above the logged properties
schrodinger.application.matsci.textlogger.log_jobinfo(logger, msgwidth=None, header='Job information')

Log the information about the current running job if there is one.

Parameters:
  • logger (logging.Logger) – The logger to log with
  • msgwidth (int) – The width of the log messages. Taken from the logger if not supplied
  • header (str or None) – If not None, this line will be printed above the logged properties
schrodinger.application.matsci.textlogger.run_jobs_with_update_logging(jobq, logfn, fraction=0.1, interval=3500)

Run all the current jobs in the JobDJ and logs progress information at semi-regular intervals so the user can track status

Parameters:
  • jobq (schrodinger.job.queue.JobDJ) – The queue to run
  • logfn (callable) – A function that takes a string and a boolean timestamp argument and logs the string
  • fraction (float) – A value between 0 and 1. When this fraction of the total jobs has completed since the last log update, a new update will be triggered.
  • interval (int) – A new update will be triggered when this number of seconds have passed since the last log update
Note:

fraction and interval are not obeyed strictly as updates can only be triggered when a job completes

schrodinger.application.matsci.textlogger.create_logger(logfilename=None, extension='-driver.log', related_filename=None, verbose=False, width=80)

Create a logger that can be used for logging information to a file

If running under job control, the log file this logger writes to will be added to the backend as a Log File.

Parameters:
  • logfilename (str) – The name of the log file the logger should write to. If not supplied, the name will be based off the Job name if running under job control or based off of the basename of a related_file if not. As a last resort, the logfile name will use ‘logfile’ as the base name.
  • extension (str) – The extension to add to the file name if logfilename is not supplied.
  • related_filanem – The basename of this filename will be used as the base of the log file name IF logfilename is not supplied directly and we are not running under job control.
  • verbose (bool) – Whether to enable verbose logging
  • width (int) – Text width of the file
Return type:

(logging.Logger, str)

Returns:

The logger and the name of the file it logs to.

schrodinger.application.matsci.textlogger.get_param_string(identifier, value, msgwidth)

Return a formatted line with identifier on the left and value right-justified. A line of ‘…’ will consume the intervening space.

Parameters:
  • identifier (str) – description of the value
  • value (any) – the value of the descriptor
  • msgwidth (int) – the length of the msg
Return type:

str

Returns:

msg, formatted msg

class schrodinger.application.matsci.textlogger.GetLogger(logfilename, verbose, msgwidth)

Bases: object

Set up a textwrapped log file.

class MyFormatter(msgwidth)

Bases: logging.Formatter

Extend logging.Formatter to customize the formats of different log levels and to textwrap the messages.

FORMATS = {10: '%(message)s', 20: '%(message)s', 'DEFAULT': '%(levelname)s (from function %(funcName)s):\n\n%(message)s\n'}
format(record)

Format the specified record as text.

The record’s attribute dictionary is used as the operand to a string formatting operation which yields the returned string. Before formatting the dictionary, a couple of preparatory steps are carried out. The message attribute of the record is computed using LogRecord.getMessage(). If the formatting string uses the time (as determined by a call to usesTime(), formatTime() is called to format the event time. If there is exception information, it is formatted using formatException() and appended to the message.

setItUp()

Set up the logger.

schrodinger.application.matsci.textlogger.decode_base64_cmd(value)

Extract a BASE64 encoded command line from the full command line in value and return it as plain text string

Parameters:value (str) – A full job control command line containing a -cmd BASE64 etc. encoded command line string
Return type:str, str
Returns:The second value is the raw decoded BASE64 value and the first value is the raw value modified to be similar to what a user would type to on the command line (double quotes, redirects, parens, “python” removed, $SCHRODINGER/run added)