Below is the file 'ChartInterface.py' from this revision. You can also download the file.
#!/usr/bin/env python # SystemInterface.py # Utilities associated with command line UI import sys import shlex from Chart import Chart from ChartRender import ChartRender from CLIParser import CLIParser, CLIParserError from States import * class ChartInterface: def _init_(self): self.input = None def chart_prompt(self, state, event, params, v, vstatus): sys.stdout.write("fourstar-chart> ") vstatus.change_state(state, vstatus.counter + 1) def command_input(self, state, event, params, v, vstatus): self.input = sys.stdin.readline().strip("\n") vstatus.change_state(state, vstatus.counter + 1) def parse_command(self, state, event, params, v, vstatus): #sys.stdout.write(self.input) vstatus.change_state(state, 1) args = self.input.split() if not len(args): return if len(args) >= 1 and args[0] == "exit": vstatus.change_state(STATE_IDLE, 1) return if args[0] == "details": if len(args) == 2: vstatus.change_state(STATE_CHART_DETAILS, 1) else: print "filename not given: %s" % (self.input,) return if len(args) >= 1 and args[0] == "create": vstatus.change_state(STATE_CHART_CREATE, 1) return if len(args) >= 1 and args[0] == "list": vstatus.change_state(STATE_CHART_LIST, 1) return if len(args) >= 1 and args[0] == "balance": vstatus.change_state(STATE_CHART_BALANCE, 1) return if len(args) >= 1 and args[0] == "find": vstatus.change_state(STATE_CHART_FIND, 1) return print "5 command not understood: %s" % (self.input,) def balance(self, state, event, params, v, vstatus): print "status!!!!!" vstatus.change_state(STATE_CHART_IDLE, 1) def find(self, state, event, params, v, vstatus): print "status!!!!!" vstatus.change_state(STATE_CHART_IDLE, 1) def list(self, state, event, params, v, vstatus): print "status!!!!!" vstatus.change_state(STATE_CHART_IDLE, 1) def create(self, state, event, params, v, vstatus): vstatus.change_state(STATE_CHART_IDLE, 1) args = shlex.split(self.input) print args op = CLIParser(usage = "create") op.add_option("-d", "--details", dest="details", type="string", help="Ledger Details") op.add_option("-D", "--debit-balance", action="store_true", dest="debitbalance", help="Debit Balance") op.add_option("-C", "--credit-balance", action="store_false", dest="debitbalance", help="Credit Balance") op.add_option("-i", "--info", dest="info", type="string", help="Ledger Info Field") try: options, args = op.parse_args(args) print args print options except CLIParserError: print "command problem: %s" % (self.input,) if options.details is None or \ options.debitbalance is None or \ options.info is None: print "missing fields for create" op.print_help() return c = Chart(v) print c.create(options.details,options.debitbalance,options.info) def details(self, state, event, params, v, vstatus): args = self.input.split() print "filename is %s" % (args[1],) c = Chart(v) r = ChartRender(c) print r.render("text",[args[1]]) vstatus.change_state(STATE_CHART_IDLE, 1) # # need to subclass optionparser # op = CLIParser(usage = "foo") # try: # options, args = op.parse_args(args) # except CLIParserError: ## print "command problem: %s" % (self.input,) # return # if len(args) != 0: # op.error('extra command line arguments: ' + ' '.join(args)) #print args #return options # def chart_prompt(self, state, event, params, v, vstatus): # sys.stdout.write("fourstar-chart> ") # vstatus.change_state(state, vstatus.counter + 1) # # def ledger_prompt(self, state, event, params, v, vstatus): # sys.stdout.write("fourstar-ledger> ") # vstatus.change_state(state, vstatus.counter + 1) # # def journal_prompt(self, state, event, params, v, vstatus): # sys.stdout.write("fourstar-journal> ") # vstatus.change_state(state, vstatus.counter + 1)