Changeset 72

Show
Ignore:
Timestamp:
03/30/08 03:02:11 (5 months ago)
Author:
njriley
Message:

SQLAlchemy-based DB stuff

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sucrose/trunk/python/api/sucrose.py

    r60 r72  
    1212import magicalpic 
    1313 
    14 class Sucrose
     14class Sucrose(object)
    1515 
    1616        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): 
    2218                        return False 
    2319 
    24  
    25         def db(self): 
    26                 return self.db 
    27  
     20                self.pic.vendItem(location) 
     21                #auth.record_purchase(location) 
     22                return True 
    2823 
    2924        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 
    3926 
    4027        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 
    5029 
    5130        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 
    6132 
    6233        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 
    7235 
    7336        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') 
    8140                print "GOOD LOCATION" 
    8241 
    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)) 
    9643 
    9744        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 
    10346 
    104                except Exception
    105                        return False 
    106  
    107  
    108         def __init__(self, db): 
    109                 self.db = db 
    110                 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() 
    11154                return 
  • sucrose/trunk/python/mysql/db.py

    r69 r72  
    11# XXX remove when completely migrated to SQLAlchemy 
    2 import dbaccess 
     2from mysql import dbaccess 
    33_db = dbaccess.DB() 
    44sucrose = _db.sucrose 
     
    88from sqlalchemy.databases.mysql import MSEnum, MSInteger 
    99from sqlalchemy.ext.declarative import declarative_base 
     10from sqlalchemy.orm import sessionmaker 
    1011 
     12DB_URL = 'mysql://soda:m568EXUFS@db1.acm.uiuc.edu' 
    1113# 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) 
    1418 
    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))) 
    1923 
    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)) 
    2327 
    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))) 
    2933 
    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'"))) 
    3640 
    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))) 
    4145 
    42 class User(_Base): __table__ = users 
    43 class Vending(_Base): __table__ = vending 
    44 class Transaction(_Base): __table__ = transactions 
    45 class Tray(_Base): __table__ = trays 
    46 class Item(_Base): __table__ = items 
     46class User(_acm_Base): __table__ = _users 
     47class Vending(_acm_Base): __table__ = _vending 
     48class Transaction(_acm_Base): __table__ = _transactions 
     49class Tray(_sucrose_Base): __table__ = _trays 
     50class Item(_sucrose_Base): __table__ = _items 
    4751 
     52_Session = sessionmaker(autoflush=True, twophase=True, transactional=True) 
     53session = _Session() 
  • sucrose/trunk/python/sucrose

    r62 r72  
    11#!/afs/acm/sig/arch/sucrose/candy/bin/python 
    22 
    3 import pygtk 
    4 import pango 
    5 pygtk.require('2.0') 
    6 import gtk 
    73import threading 
    84import sys 
    95 
    10 from mysql import dbaccess 
     6from mysql import db 
    117 
    128from api import user_interface, sucrose, authenticator 
     
    1612 
    1713if __name__ == "__main__": 
    18         s = sucrose.Sucrose(dbaccess.DB()
     14        s = sucrose.Sucrose(db
    1915        card = cardswipe.Cardswipe(s) 
    2016