Skip to content

Instantly share code, notes, and snippets.

@Javex
Last active December 19, 2015 02:49
Show Gist options
  • Save Javex/5885669 to your computer and use it in GitHub Desktop.
Save Javex/5885669 to your computer and use it in GitHub Desktop.
Demonstrates how an `InvalidRequestError` is raised where it shouldn't be.
from sqlalchemy import orm
from sqlalchemy.engine import create_engine
from sqlalchemy.ext.declarative.api import declarative_base
from sqlalchemy.orm.scoping import scoped_session
from sqlalchemy.orm.session import sessionmaker
from sqlalchemy.schema import Column
from sqlalchemy.types import String
from zope.sqlalchemy.datamanager import ZopeTransactionExtension
import binascii
import os
import transaction
DBSession = scoped_session(sessionmaker())
Base = declarative_base()
class Session(Base):
__tablename__ = 'session'
id = Column(String, primary_key=True)
def __init__(self):
self.id = binascii.hexlify(os.urandom(32))
class ObjectFactory(dict):
def __init__(self):
self.session = Session()
self.db_session = DBSession()
self.db_session.add(self.session)
def test_invalid_request_error():
engine = create_engine('sqlite://')
DBSession.configure(bind=engine)
Base.metadata.create_all(engine)
db_session = DBSession()
sess = Session()
db_session.add(sess)
session = ObjectFactory()
assert db_session is session.db_session
assert db_session is \
orm.session.Session.object_session(session.session)
assert session.session in db_session
assert isinstance(session.session, Session)
assert isinstance(Session.id, orm.attributes.InstrumentedAttribute)
db_session.expire(session.session)
db_session.expunge(session.session)
transaction.commit()
db_session.close()
if __name__ == '__main__':
test_invalid_request_error()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment