1. import sys, time # standard system functions
  2. import cmd       # command-line processor library
  3. import sqlite3   # database library
  4.  
  5. class LoggingProgram(cmd.Cmd):
  6.     """ The base Cmd class gives us a command line interpreter that will
  7.        read input and dispatch do_XXX() functions based on the first word
  8.        of the input. The rest of the input line is passed to the function.
  9.    """
  10.     log_freq = ''
  11.     log_mode = ''
  12.     prompt = 'Log >> '
  13.    
  14.     insertsql = """
  15.        INSERT INTO logdata(logtime, theircall, frequency, mode, sentrpt, rcvdrpt)
  16.        VALUES (?, ?, ?, ?, ?, ?)
  17.        """
  18.        
  19.     def preloop(self):
  20.         "Open DB file and create our data table if needed"
  21.         self.db = sqlite3.connect('log.db')
  22.         self.db.execute("""
  23.            CREATE TABLE IF NOT EXISTS logdata (
  24.               logtime    DATETIME,
  25.               theircall  TEXT,
  26.               frequency  TEXT,
  27.               mode       TEXT,
  28.               sentrpt    TEXT,
  29.               rcvdrpt    TEXT)
  30.            """)
  31.    
  32.     def do_log(self, cmdline):
  33.         "Split up the input line and write it to the database"
  34.         theircall, sent, rcvd = cmdline.split()
  35.         timestr = time.strftime('%Y-%m-%d %H:%M:%S')
  36.         self.db.execute(self.insertsql,
  37.             (timestr, theircall, self.log_freq, self.log_mode, sent, rcvd) )
  38.         self.db.commit()
  39.         print( "Logged %s at %s (%s/%s on %s using %s)"
  40.                %(theircall, timestr, sent, rcvd, self.log_freq, self.log_mode) )
  41.        
  42.     def do_setmode(self, cmdline):
  43.         self.log_mode = cmdline
  44.  
  45.     def do_setfreq(self, cmdline):
  46.         self.log_freq = cmdline
  47.  
  48.     def do_exit(self, cmdline):
  49.         sys.exit()
  50.        
  51.     def do_EOF(self, cmdline):
  52.         self.db.close()
  53.        
  54.     def do_report(self, cmdline):
  55.         for row in self.db.execute("SELECT * FROM logdata ORDER BY logtime"):
  56.             print( '\t'.join(row) )
  57.  
  58.  
  59. if __name__ == "__main__":
  60.     "Python runs this only when the file is executed directly"
  61.     LoggingProgram().cmdloop()