+++ /dev/null
-import pickle
-
-ACCOUNT_FILE = 'bank.pck'
-
-class BankAccount:
- def __init__(self):
- f = None
- self.bank = {}
- try:
- f = open(ACCOUNT_FILE)
- except IOError:
- pass
- if f != None:
- self.bank = pickle.load(f)
- self.sanity_check(self.bank)
- f.close()
- self.save()
-
- def sanity_check_user(self, user):
- wanted_fields = ['balance']
- for f in user:
- if f in wanted_fields:
- if f == 'balance':
- if not isinstance(user['balance'], tuple):
- return False
- if len(user['balance']) != 2:
- return False
- if not isinstance(user[0], int) or \
- not isinstance(user[1], int):
- return False
- del wanted_fields[f]
- else:
- return False
- if len(wanted_fields) != 0:
- return False
- return True
-
- def sanity_check(self, bank):
- for u in bank:
- if not self.sanity_check_user(u):
- return False
- return True
-
- def save(self):
- f = open(ACCOUNT_FILE, 'w')
- pickle.dump(self.bank, f)
- f.close()
-
- def ensure_user_exists(self, username):
- if self.bank.has_key(username):
- return
- self.bank[username] = {}
- self.bank[username]['balance'] = (0,0)
-
- def get_balance(self, username):
- if self.bank.has_key(username):
- return self.bank[username]['balance']
- return (0,0)
-
- def add_amount(self, username, amount):
- self.ensure_user_exists(username)
- (cur_cents, cur_bytes) = self.bank[username]['balance']
- (add_cents, add_bytes) = amount
- self.bank[username]['balance'] = (cur_cents+add_cents,
- cur_bytes+add_bytes)
- self.save()