Changeset 72
- Timestamp:
- 03/30/08 03:02:11 (5 months ago)
- Files:
-
- sucrose/trunk/python/api/sucrose.py (modified) (1 diff)
- sucrose/trunk/python/mysql/db.py (modified) (2 diffs)
- sucrose/trunk/python/sucrose (modified) (2 diffs)
- sucrose/trunk/python/tests (added)
- sucrose/trunk/python/tests/__init__.py (added)
- sucrose/trunk/python/tests/test_sucrose.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
sucrose/trunk/python/api/sucrose.py
r60 r72 12 12 import magicalpic 13 13 14 class Sucrose :14 class Sucrose(object): 15 15 16 16 def vend(self, location, auth): 17 if auth.authenticate_purchase(location): 18 self.pic.vendItem(location) 19 #auth.record_purchase(location) 20 return True 21 else: 17 if not auth.authenticate_purchase(location): 22 18 return False 23 19 24 25 def db(self): 26 return self.db 27 20 self.pic.vendItem(location) 21 #auth.record_purchase(location) 22 return True 28 23 29 24 def netid_from_uin(self, uin): 30 try: 31 sql = "SELECT netid FROM users WHERE uin=" + uin 32 self.db.integrate.execute(sql) 33 result = self.db.integrate.fetchone() 34 return result[0] 35 36 except Exception: 37 return False 38 25 return self.users.filter_by(uin=uin).first().netid 39 26 40 27 def uid_from_uin(self, uin): 41 try: 42 uer_id_sql = "SELECT uid FROM users WHERE uin=" + uin 43 sucrose.db.integrate.execute(uer_id_sql) 44 result = sucrose.db.integrate.fetchone() 45 return result[0] 46 47 except Exception: 48 return False 49 28 return self.users.filter_by(uin=uin).first().uid 50 29 51 30 def location_from_id(self, id): 52 try: 53 sql = "SELECT machine_tray_id FROM trays WHERE machine='sucrose' AND item_id=" + id 54 self.db.sucrose.execute(sql) 55 result = self.db.sucrose.fetchone() 56 return result[0] 57 58 except Exception: 59 return False 60 31 return self.trays.filter_by(item_id=id).first().machine_tray_id 61 32 62 33 def cost_from_id(self, id): 63 try: 64 item_cost_sql = "SELECT cur_price FROM trays WHERE item_id=" + id 65 sucrose.db.sucrose.execute(item_cost_sql) 66 result = sucrose.db.sucrose.fetchone() 67 return result[0] 68 69 except Exception: 70 return False 71 34 return self.trays.filter_by(item_id=id).first().cur_price 72 35 73 36 def item_id_from_location(self, location): 74 75 # Check that location is in a valid location 76 if not( ( (int(location[1]) in (1, 2, 3, 7)) and \ 77 (int(location[0]) in range(1,6)) ) or \ 78 (int(location[1]) in (4,5)) ): 79 return False 80 37 if not ( ( location[0] in '12345' and location[1] in '1237' ) or 38 ( location[0] in '0123456789' and location[1] in '46' ) ): 39 raise ValueError('invalid item ID') 81 40 print "GOOD LOCATION" 82 41 83 try: 84 # Lookup location 85 sql = "SELECT item_id FROM trays WHERE machine='sucrose' AND machine_tray_id=" + location 86 self.db.sucrose.execute(sql) 87 print "GOOD SQL?" + sql 88 result = self.db.sucrose.fetchone() 89 print "GOOD RESULT?" 90 print result 91 return result[0] 92 93 except Exception: 94 return False 95 42 return self.trays.filter_by(machine_tray_id=int(location)) 96 43 97 44 def item_name_from_id(self, id): 98 try: 99 sql = "SELECT name FROM items WHERE item_id=" + id 100 self.db.sucrose.execute(sql) 101 result = self.db.sucrose.fetchone() 102 return result[0] 45 return self.items.filter_by(item_id=id).first().name 103 46 104 except Exception:105 return False106 107 108 def __init__(self, db):109 self.db = db110 self.pic = magicalpic.SucrosePic()47 def __init__(self, db, dbonly=False): 48 session = db.session 49 self.users = session.query(db.User) 50 self.trays = session.query(db.Tray).filter_by(machine='sucrose') 51 self.items = session.query(db.Item) 52 if not dbonly: 53 self.pic = magicalpic.SucrosePic() 111 54 return sucrose/trunk/python/mysql/db.py
r69 r72 1 1 # XXX remove when completely migrated to SQLAlchemy 2 import dbaccess2 from mysql import dbaccess 3 3 _db = dbaccess.DB() 4 4 sucrose = _db.sucrose … … 8 8 from sqlalchemy.databases.mysql import MSEnum, MSInteger 9 9 from sqlalchemy.ext.declarative import declarative_base 10 from sqlalchemy.orm import sessionmaker 10 11 12 DB_URL = 'mysql://soda:m568EXUFS@db1.acm.uiuc.edu' 11 13 # XXX change 'sucrose' to 'vending' once caffeine is migrated 12 _engine = create_engine('mysql://soda:m568EXUFS@db1.acm.uiuc.edu/sucrose') 13 _Base = declarative_base(_engine) 14 _sucrose = create_engine('%s/sucrose' % DB_URL) 15 _acm = create_engine('%s/acm_integrate' % DB_URL) 16 _sucrose_Base = declarative_base(_sucrose) 17 _acm_Base = declarative_base(_acm) 14 18 15 users = Table('acm_integrate.users',_Base.metadata,16 Column('uid', MSInteger(10, unsigned=True), primary_key=True),17 Column('netid', String(8)),18 Column('uin', String(9)))19 _users = Table('users', _acm_Base.metadata, 20 Column('uid', MSInteger(10, unsigned=True), primary_key=True), 21 Column('netid', String(8)), 22 Column('uin', String(9))) 19 23 20 vending = Table('acm_integrate.vending',_Base.metadata,21 Column('uid', MSInteger(10, unsigned=True), ForeignKey('acm_integrate.users.uid'), primary_key=True),22 Column('balance', Numeric))24 _vending = Table('vending', _acm_Base.metadata, 25 Column('uid', MSInteger(10, unsigned=True), ForeignKey('acm_acm.users.uid'), primary_key=True), 26 Column('balance', Numeric)) 23 27 24 transactions = Table('acm_integrate.vending_transactions',_Base.metadata,25 Column('transaction_id', Integer, primary_key=True, autoincrement=True),26 Column('user_id', MSInteger(unsigned=True), ForeignKey('acm_integrate.users.uid')),27 Column('item_id', Integer),28 Column('cost', Numeric(4, 2)))28 _transactions = Table('vending_transactions', _acm_Base.metadata, 29 Column('transaction_id', Integer, primary_key=True, autoincrement=True), 30 Column('user_id', MSInteger(unsigned=True), ForeignKey('acm_acm.users.uid')), 31 Column('item_id', Integer), 32 Column('cost', Numeric(4, 2))) 29 33 30 trays = Table('trays',_Base.metadata,31 Column('tray_id', Integer, primary_key=True, autoincrement=True),32 Column('machine_tray_id', Integer),33 Column('cur_price', Numeric(4, 2)),34 Column('item_id', Integer, ForeignKey('items.item_id')),35 Column('machine', MSEnum("'caffeine'", "'sucrose'")))34 _trays = Table('trays', _sucrose_Base.metadata, 35 Column('tray_id', Integer, primary_key=True, autoincrement=True), 36 Column('machine_tray_id', Integer), 37 Column('cur_price', Numeric(4, 2)), 38 Column('item_id', Integer, ForeignKey('items.item_id')), 39 Column('machine', MSEnum("'caffeine'", "'sucrose'"))) 36 40 37 items = Table('items',_Base.metadata,38 Column('item_id', Integer, primary_key=True, autoincrement=True),39 Column('num_consumed', Integer),40 Column('name', String(255)))41 _items = Table('items', _sucrose_Base.metadata, 42 Column('item_id', Integer, primary_key=True, autoincrement=True), 43 Column('num_consumed', Integer), 44 Column('name', String(255))) 41 45 42 class User(_ Base): __table__ =users43 class Vending(_ Base): __table__ =vending44 class Transaction(_ Base): __table__ =transactions45 class Tray(_ Base): __table__ =trays46 class Item(_ Base): __table__ =items46 class User(_acm_Base): __table__ = _users 47 class Vending(_acm_Base): __table__ = _vending 48 class Transaction(_acm_Base): __table__ = _transactions 49 class Tray(_sucrose_Base): __table__ = _trays 50 class Item(_sucrose_Base): __table__ = _items 47 51 52 _Session = sessionmaker(autoflush=True, twophase=True, transactional=True) 53 session = _Session() sucrose/trunk/python/sucrose
r62 r72 1 1 #!/afs/acm/sig/arch/sucrose/candy/bin/python 2 2 3 import pygtk4 import pango5 pygtk.require('2.0')6 import gtk7 3 import threading 8 4 import sys 9 5 10 from mysql import db access6 from mysql import db 11 7 12 8 from api import user_interface, sucrose, authenticator … … 16 12 17 13 if __name__ == "__main__": 18 s = sucrose.Sucrose(db access.DB())14 s = sucrose.Sucrose(db) 19 15 card = cardswipe.Cardswipe(s) 20 16
