Example #1
0
    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
Example #2
0
    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