--- /dev/null
+#!/usr/bin/env python
+
+class VendingException( Exception ): pass
+
+FILENAME="snacks.conf"
+
+def parse_line( l ):
+ toks = l.strip().split()
+ if not len( toks ):
+ return
+
+ if toks[0][:1] == '#':
+ return
+
+ if len( toks ) < 4:
+ raise VendingException( "Bad line '%s' in snack config file, too few items" % l )
+
+ # price
+ try:
+ price = int( toks[0] )
+ except ValueError:
+ raise VendingException( "Bad line '%s' in snack config file, bad price" % l)
+
+ # slots
+ slots = toks[1].split(",")
+ for s in slots:
+ if len(s) != 2:
+ raise VendingException( "Bad line %s' in snack config file, bad slot '%s'" % (l, s) )
+
+ # shortname for dispense
+ shortname = toks[2]
+
+ # name
+ name = ' '.join( toks[3:] )
+
+ return ( price, slots, shortname, name )
+
+def get_snacks( filename = FILENAME ):
+
+ snacks = []
+ try:
+ f = file( filename )
+ snacks = filter( bool, map( parse_line, f ) )
+ except IOError, e:
+ raise VendingException( e )
+
+ ret = {}
+ for price, slots, shortname, name in snacks:
+ for s in slots:
+ ret[s] = (price, shortname, name)
+
+ return ret
+
+def get_snack( slot ):
+
+ snacks = get_snacks()
+ if slot not in key:
+ raise VendingException( "Slot '%s' isn't in config file" % slot )
+
+ return snacks[slot]
+
+def get_price( slot ):
+ p, sn, n = get_snacks( slot )
+ return p
+
+def get_name( slot ):
+ p, sn, n = get_snacks( slot )
+ return n
+
+def get_short_name( slot ):
+ p, sn, n = get_snacks( slot )
+ return sn
+
+if __name__ == '__main__':
+ snacks = get_snacks()
+
+ print snacks