Пример #1
0
    def test_subsecond_accuracy(self):

        Base = declarative_base()

        class Sucktastic(Base):
            __tablename__ = 'test'
            id = Column(Integer, primary_key=True)
            value = Column(DateTime)
            
        register_session(metadata=Base.metadata)

        with transaction.manager:
            session = get_session()
            session.add(Sucktastic(value=datetime(2001,1,1,10,1,2,3)))

        session = get_session()
        
        suck = session.query(Sucktastic).one()

        if session.bind.name=='mysql':
            # whoops, there goes our sub-second info
            self.assertEqual(suck.value,datetime(2001,1,1,10,1,2))
        else:
            self.assertEqual(suck.value,datetime(2001,1,1,10,1,2,3))

        session.rollback()
Пример #2
0
    def test_get_in_view(self):
        register_session('sqlite://')
        register_session('sqlite://','foo')

        # create the tables
        session1 = get_session()
        session2 = get_session('foo')
        with transaction.manager:
            self.Base.metadata.create_all(session1.bind)
            self.Base.metadata.create_all(session2.bind)
        
        # this is what you'd do in views:
        session = get_session()
        session.add(self.Model(id=1,name='foo'))
        model1 = session.query(self.Model).one()
        self.assertEqual(model1.id,1)
        self.assertEqual(model1.name,'foo')

        # or with a name...
        session = get_session('foo')
        session.add(self.Model(id=1,name='foo'))
        model2 = session.query(self.Model).one()
        self.assertEqual(model2.id,1)
        self.assertEqual(model2.name,'foo')

        # paranoia
        self.failIf(model1 is model2)
Пример #3
0
    def test_subsecond_accuracy(self):

        Base = declarative_base()

        class Sucktastic(Base):
            __tablename__ = "test"
            id = Column(Integer, primary_key=True)
            value = Column(DateTime)

        register_session(metadata=Base.metadata)

        with transaction.manager:
            session = get_session()
            session.add(Sucktastic(value=datetime(2001, 1, 1, 10, 1, 2, 3)))

        session = get_session()

        suck = session.query(Sucktastic).one()

        if session.bind.name == "mysql":
            # whoops, there goes our sub-second info
            self.assertEqual(suck.value, datetime(2001, 1, 1, 10, 1, 2))
        else:
            self.assertEqual(suck.value, datetime(2001, 1, 1, 10, 1, 2, 3))

        session.rollback()
Пример #4
0
    def test_get_in_view(self):
        register_session('sqlite://')
        register_session('sqlite://','foo')

        # create the tables
        session1 = get_session()
        session2 = get_session('foo')
        with transaction.manager:
            self.Base.metadata.create_all(session1.bind)
            self.Base.metadata.create_all(session2.bind)
        
        # this is what you'd do in views:
        session = get_session()
        session.add(self.Model(id=1,name='foo'))
        model1 = session.query(self.Model).one()
        self.assertEqual(model1.id,1)
        self.assertEqual(model1.name,'foo')

        # or with a name...
        session = get_session('foo')
        session.add(self.Model(id=1,name='foo'))
        model2 = session.query(self.Model).one()
        self.assertEqual(model2.id,1)
        self.assertEqual(model2.name,'foo')

        # paranoia
        self.failIf(model1 is model2)
Пример #5
0
    def test_different_sessions_when_async(self):
        
        register_session('sqlite://',
                        scoped=False, transactional=False)

        s1 = get_session()
        s2 = get_session()

        self.assertNotEquals(id(s1),id(s2))
Пример #6
0
    def test_different_sessions_when_async(self):
        
        register_session('sqlite://',
                        scoped=False, transactional=False)

        s1 = get_session()
        s2 = get_session()

        self.assertNotEquals(id(s1),id(s2))
Пример #7
0
    def test_tricky_to_delete(self):
        # respect any DB_URL set here so that
        # we sure the real db here to make sure
        # delete works across all our DB types...
        db_path = (
            os.environ.get('DB_URL', '').strip() or
            'sqlite:///'+os.path.join(self.dir.path, 'test.db')
        )

        Base = sa_declarative_base()

        class Model1(Base):
            __tablename__ = 'model1'
            id = Column(Integer, primary_key=True)
            model2_id = Column(Integer, ForeignKey('model2.id'))
            model2 = relationship("Model2")

        class Model2(Base):
            __tablename__ = 'model2'
            id = Column('id', Integer, primary_key=True)

        # create in one session
        register_session(db_path,
                         name='create',
                         transactional=False,
                         metadata=Base.metadata)
        m1 = Model1()
        m2 = Model2()
        m1.model2 = m2
        session = get_session('create')
        if db_path.startswith('sqlite:'):
            session.execute('PRAGMA foreign_keys = ON')
        session.add(m1)
        session.add(m2)
        session.commit()
        compare(session.query(Model1).count(), 1)
        compare(session.query(Model2).count(), 1)
        session.rollback()

        # now register another session which should
        # blow the above away
        register_session(db_path,name='read',
                        transactional=False,
                         metadata=Base.metadata)
        session = get_session('read')
        compare(session.query(Model1).count(), 0)
        compare(session.query(Model2).count(), 0)
        session.rollback()
Пример #8
0
    def test_register(self):
        register_session('sqlite://')

        # create the tables
        session = get_session()
        self.Base.metadata.create_all(session.bind)
        
        # check registrations
        compare(generator(
                C('zope.component.registry.UtilityRegistration',
                  component=C('sqlalchemy.orm.scoping.ScopedSession'),
                  factory=None,
                  info=u'',
                  name=u'',
                  provided=ISession,
                  registry=self.components.registry
                  )),self.components.registry.registeredUtilities())
        
        # this is what get_session goes:
        session = getSiteManager().getUtility(ISession)
        
        session.add(self.Model(id=1,name='foo'))
        model = session.query(self.Model).one()
        self.assertEqual(model.id,1)
        self.assertEqual(model.name,'foo')
Пример #9
0
    def test_register(self):
        register_session('sqlite://')

        # create the tables
        session = get_session()
        self.Base.metadata.create_all(session.bind)
        
        # check registrations
        compare(generator(
                C('zope.component.registry.UtilityRegistration',
                  component=C('sqlalchemy.orm.scoping.ScopedSession'),
                  factory=None,
                  info=u'',
                  name=u'',
                  provided=ISession,
                  registry=self.components.registry
                  )),self.components.registry.registeredUtilities())
        
        # this is what get_session goes:
        session = getSiteManager().getUtility(ISession)
        
        session.add(self.Model(id=1,name='foo'))
        model = session.query(self.Model).one()
        self.assertEqual(model.id,1)
        self.assertEqual(model.name,'foo')
Пример #10
0
    def test_tricky_to_delete(self):
        # respect any DB_URL set here so that
        # we sure the real db here to make sure
        # delete works across all our DB types...
        db_path = (os.environ.get('DB_URL', '').strip()
                   or 'sqlite:///' + os.path.join(self.dir.path, 'test.db'))

        Base = sa_declarative_base()

        class Model1(Base):
            __tablename__ = 'model1'
            id = Column(Integer, primary_key=True)
            model2_id = Column(Integer, ForeignKey('model2.id'))
            model2 = relationship("Model2")

        class Model2(Base):
            __tablename__ = 'model2'
            id = Column('id', Integer, primary_key=True)

        # create in one session
        register_session(db_path,
                         name='create',
                         transactional=False,
                         metadata=Base.metadata)
        m1 = Model1()
        m2 = Model2()
        m1.model2 = m2
        session = get_session('create')
        if db_path.startswith('sqlite:'):
            session.execute('PRAGMA foreign_keys = ON')
        session.add(m1)
        session.add(m2)
        session.commit()
        compare(session.query(Model1).count(), 1)
        compare(session.query(Model2).count(), 1)
        session.rollback()

        # now register another session which should
        # blow the above away
        register_session(db_path,
                         name='read',
                         transactional=False,
                         metadata=Base.metadata)
        session = get_session('read')
        compare(session.query(Model1).count(), 0)
        compare(session.query(Model2).count(), 0)
        session.rollback()
Пример #11
0
 def test_transaction(self):
     register_session('sqlite://')
     
     # functional
     with transaction.manager:
         session = get_session()
         self.Base.metadata.create_all(session.bind)
         session.add(self.Model(id=1,name='foo'))
     
     compare(session.query(self.Model).count(), expected=1)
Пример #12
0
 def test_no_transaction(self):
     register_session('sqlite://',transactional=False)
     
     # functional
     session = get_session()
     self.Base.metadata.create_all(session.bind)
     session.add(self.Model(id=1,name='foo'))
     session.commit()
 
     compare(session.query(self.Model).count(), expected=1)
Пример #13
0
 def test_no_transaction(self):
     register_session('sqlite://',transactional=False)
     
     # functional
     session = get_session()
     self.Base.metadata.create_all(session.bind)
     session.add(self.Model(id=1,name='foo'))
     session.commit()
 
     compare(1,
             session.scalar(self.Model.__table__.select().count()))
Пример #14
0
 def test_no_transaction(self):
     register_session('sqlite://',transactional=False)
     
     # functional
     session = get_session()
     self.Base.metadata.create_all(session.bind)
     session.add(self.Model(id=1,name='foo'))
     session.commit()
 
     compare(1,
             session.scalar(self.Model.__table__.select().count()))
Пример #15
0
    def test_functional_metadata(self):
        Base = sa_declarative_base()

        class Model(Base):
            __tablename__ = 'model'
            id = Column('id', Integer, primary_key=True)
            name = Column('name', String(50))

        register_session(transactional=False, metadata=Base.metadata)
        session = get_session()
        session.add(Model(name='foo'))
        session.commit()
Пример #16
0
    def test_transaction_no_session_usage(self):
        register_session('sqlite://')

        # functional
        with transaction.manager:
            session = get_session()
            self.Base.metadata.create_all(session.bind)
            session.execute(
                self.Model.__table__.insert().values(name='test')
                )

        compare(session.query(self.Model).count(), expected=1)
Пример #17
0
 def test_functional(self):
     Base = sa_declarative_base()
     class Model(Base):
         __tablename__ = 'model'
         id = Column('id', Integer, primary_key=True)
         name = Column('name', String(50))
         
     register_session(
         transactional=False,
         config=Config(Source(Model.__table__)))
     session = get_session()
     session.add(Model(name='foo'))
     session.commit()
Пример #18
0
    def test_transaction_no_session_usage(self):
        register_session('sqlite://')

        # functional
        with transaction.manager:
            session = get_session()
            self.Base.metadata.create_all(session.bind)
            session.execute(
                self.Model.__table__.insert().values(name='test')
                )

        compare(1,
                session.scalar(self.Model.__table__.select().count()))
Пример #19
0
 def test_how_to_create(self):
     register_session('sqlite://', transactional=False)
     # at this stage we have no tables
     session = get_session()
     session.add(self.Model(name='foo'))
     # so we get an error
     with ShouldRaise(OperationalError):
         session.commit()
     # ...which we then need to abort:
     session.rollback()
     # if we know we have no tables, we can do:
     self.Base.metadata.create_all(session.bind)
     # now we can commit:
     session.add(self.Model(name='foo'))
     session.commit()
     # ...and get stuff back:
     self.assertEqual(1,session.query(self.Model).count())
Пример #20
0
 def test_how_to_create(self):
     register_session('sqlite://', transactional=False)
     # at this stage we have no tables
     session = get_session()
     session.add(self.Model(name='foo'))
     # so we get an error
     with ShouldRaise(OperationalError):
         session.commit()
     # ...which we then need to abort:
     session.rollback()
     # if we know we have no tables, we can do:
     self.Base.metadata.create_all(session.bind)
     # now we can commit:
     session.add(self.Model(name='foo'))
     session.commit()
     # ...and get stuff back:
     self.assertEqual(1,session.query(self.Model).count())
Пример #21
0
    def test_only_some_packages(self):
        Base = sa_declarative_base()

        class Model1(Base):
            __tablename__ = 'model1'
            id = Column('id', Integer, primary_key=True)
            name = Column('name', String(50))

        class Model2(Base):
            __tablename__ = 'model2'
            id = Column('id', Integer, primary_key=True)
            name = Column('name', String(50))

        register_session(transactional=False,
                         config=Config(Source(Model1.__table__)))

        # only table1 should have been created!
        compare([u'model1'],
                Inspector.from_engine(get_session().bind).get_table_names())
Пример #22
0
    def setUp(self):
        register_session(transactional=False)

        self.Base = declarative_base()

        class Model(Common, self.Base):
            id = Column(Integer, primary_key=True)
            value = Column(Integer)

        class AnotherModel(Common, self.Base):
            id = Column(Integer, primary_key=True)
            attr = Column(Integer)
            other_id = Column(Integer, ForeignKey('model.id'))
            other = relationship("Model", backref='another')

        self.Model = Model
        self.AnotherModel = AnotherModel

        self.session = get_session()
        self.addCleanup(self.session.rollback)
        self.Base.metadata.create_all(self.session.bind)
Пример #23
0
    def setUp(self):
        register_session(transactional=False)

        self.Base = declarative_base()

        class Model(Common, self.Base):
            id =  Column(Integer, primary_key=True)
            value = Column(Integer)

        class AnotherModel(Common, self.Base):
            id = Column(Integer, primary_key=True)
            attr = Column(Integer)
            other_id = Column(Integer, ForeignKey('model.id'))
            other = relationship("Model", backref='another')

        self.Model = Model
        self.AnotherModel = AnotherModel

        self.session = get_session()
        self.addCleanup(self.session.rollback)
        self.Base.metadata.create_all(self.session.bind)
Пример #24
0
    def test_only_some_packages(self):
        Base = sa_declarative_base()
        
        class Model1(Base):
            __tablename__ = 'model1'
            id = Column('id', Integer, primary_key=True)
            name = Column('name', String(50))
            
        class Model2(Base):
            __tablename__ = 'model2'
            id = Column('id', Integer, primary_key=True)
            name = Column('name', String(50))
            
        register_session(
            transactional=False,
            config=Config(Source(Model1.__table__)))

        # only table1 should have been created!
        compare(
            [u'model1'],
            Inspector.from_engine(get_session().bind).get_table_names()
            )
Пример #25
0
 def setUp(self):
     register_session(transactional=False)
     self.session = get_session()
     self.addCleanup(self.session.rollback)
     Base.metadata.create_all(self.session.bind)
Пример #26
0
 def setUp(self):
     register_session(transactional=False)
     self.session = get_session()
     self.addCleanup(self.session.rollback)
     Base.metadata.create_all(self.session.bind)
Пример #27
0
 def run(self):
     self.resulting_session = get_session()
Пример #28
0
 def run(self):
     self.resulting_session = get_session()