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 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],)


		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)