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
Example #3
0
 def close_session_after(*args, **kwargs):
     try:
         return f(*args, **kwargs)
     finally:
         Session.remove()
Example #4
0
 def get_codes_for_user(cls, user):
     results = Session.query(cls).filter(cls.user == user._id)
     codes = {r.deal: r.code for r in results}
     return codes
Example #5
0
 def close_session_after(*args, **kwargs):
     try:
         return f(*args, **kwargs)
     finally:
         Session.remove()
Example #6
0
 def get_codes_for_user(cls, user):
     results = Session.query(cls).filter(cls.user == user._id)
     codes = {r.deal: r.code for r in results}
     return codes
Example #7
0
from collections import deque, defaultdict
from datetime import datetime
import StringIO, csv, psycopg2

from pylons import app_globals as g
from r2.lib import emailer
from r2.models.gold import Base, Session
from sqlalchemy import create_engine
from sqlalchemy import Column, String, DateTime, Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base


session = Session()

class GoldTransaction(Base):
    __tablename__ = 'reddit_gold'

    _charter_end = datetime(2010, 7, 20, 8, 6, 10, 365317, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=-420, name=None))

    # database columns
    trans_id = Column(String, primary_key=True)
    status = Column(String)
    date = Column(DateTime)
    payer_email = Column(String)
    paying_id = Column(String)
    pennies = Column(Integer)
    secret = Column(String)
    account_id = Column(String)
    days = Column(Integer)
    subscr_id = Column(String)