Explicit snack support
[zanchey/dispense2.git] / sql-edition / servers / SnackConfig.py
diff --git a/sql-edition/servers/SnackConfig.py b/sql-edition/servers/SnackConfig.py
new file mode 100755 (executable)
index 0000000..e608f81
--- /dev/null
@@ -0,0 +1,77 @@
+#!/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

UCC git Repository :: git.ucc.asn.au