def claim_code(cls, user, deal): # check if they already have a code for this deal and return it try: result = (Session.query(cls).filter( and_(cls.user == user._id, cls.deal == deal)).one()) return result.code except NoResultFound: pass # select an unclaimed code, assign it to the user, and return it try: claiming = (Session.query(cls).filter( and_(cls.deal == deal, cls.user == None, func.pg_try_advisory_lock(cls.id))).limit(1).one()) except NoResultFound: raise GoldPartnerCodesExhaustedError claiming.user = user._id claiming.date = datetime.now(g.tz) Session.add(claiming) Session.commit() # release the lock Session.query(func.pg_advisory_unlock_all()).all() return claiming.code
def claim_code(cls, user, deal): # check if they already have a code for this deal and return it try: result = Session.query(cls).filter(and_(cls.user == user._id, cls.deal == deal)).one() return result.code except NoResultFound: pass # select an unclaimed code, assign it to the user, and return it try: claiming = ( Session.query(cls) .filter(and_(cls.deal == deal, cls.user == None, func.pg_try_advisory_lock(cls.id))) .limit(1) .one() ) except NoResultFound: raise GoldPartnerCodesExhaustedError claiming.user = user._id claiming.date = datetime.now(g.tz) Session.add(claiming) Session.commit() # release the lock Session.query(func.pg_advisory_unlock_all()).all() return claiming.code