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
def close_session_after(*args, **kwargs): try: return f(*args, **kwargs) finally: Session.remove()
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
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)