Esempio n. 1
0
    def test_invocation_systemwide_loaders(self):
        baked.bake_lazy_loaders()
        try:
            User, Address = self._o2m_fixture()

            sess = Session()
            q = sess.query(User).options(lazyload(User.addresses))
            with mock.patch.object(BakedLazyLoader, "_emit_lazyload") as el:
                u1 = q.first()
                u1.addresses
                # invoked
                is_(
                    el.mock_calls[0][1][1],
                    u1._sa_instance_state
                )
        finally:
            baked.unbake_lazy_loaders()

        clear_mappers()
        User, Address = self._o2m_fixture()
        sess = Session()
        q = sess.query(User).options(lazyload(User.addresses))

        with mock.patch.object(BakedLazyLoader, "_emit_lazyload") as el:
            u1 = q.first()
            u1.addresses
            # not invoked
            eq_(el.mock_calls, [])
Esempio n. 2
0
    def test_invocation_systemwide_loaders(self):
        baked.bake_lazy_loaders()
        try:
            User, Address = self._o2m_fixture()

            sess = Session()
            q = sess.query(User).options(lazyload(User.addresses))
            with mock.patch.object(BakedLazyLoader, "_emit_lazyload") as el:
                u1 = q.first()
                u1.addresses
                # invoked
                is_(el.mock_calls[0][1][1], u1._sa_instance_state)
        finally:
            baked.unbake_lazy_loaders()

        clear_mappers()
        User, Address = self._o2m_fixture()
        sess = Session()
        q = sess.query(User).options(lazyload(User.addresses))

        with mock.patch.object(BakedLazyLoader, "_emit_lazyload") as el:
            u1 = q.first()
            u1.addresses
            # not invoked
            eq_(el.mock_calls, [])
Esempio n. 3
0
    def _test_baked_lazy_loading_relationship_flag(self, flag):
        baked.bake_lazy_loaders()
        try:
            User, Address = self._o2m_fixture(bake_queries=flag)

            sess = Session()
            u1 = sess.query(User).first()

            from sqlalchemy.orm import Query

            canary = mock.Mock()

            # I would think Mock can do this but apparently
            # it cannot (wrap / autospec don't work together)
            real_compile_context = Query._compile_context

            def _my_compile_context(*arg, **kw):
                if arg[0].column_descriptions[0]['entity'] is Address:
                    canary()
                return real_compile_context(*arg, **kw)

            with mock.patch.object(Query, "_compile_context",
                                   _my_compile_context):
                u1.addresses

                sess.expire(u1)
                u1.addresses
        finally:
            baked.unbake_lazy_loaders()

        if flag:
            eq_(canary.call_count, 1)
        else:
            eq_(canary.call_count, 2)
Esempio n. 4
0
    def test_systemwide_loaders_loadable_via_lazyloader(self):
        from sqlalchemy.orm import configure_mappers

        baked.bake_lazy_loaders()
        try:
            User, Address = self._o2m_fixture(lazy='joined')

            configure_mappers()

            is_(
                User.addresses.property._get_strategy(
                    (('lazy', 'select'), )).__class__, BakedLazyLoader)
        finally:
            baked.unbake_lazy_loaders()
Esempio n. 5
0
    def test_systemwide_loaders_loadable_via_lazyloader(self):
        from sqlalchemy.orm import configure_mappers

        baked.bake_lazy_loaders()
        try:
            User, Address = self._o2m_fixture(lazy='joined')

            configure_mappers()

            is_(
                User.addresses.property.
                _get_strategy((('lazy', 'select'), )).__class__,
                BakedLazyLoader
            )
        finally:
            baked.unbake_lazy_loaders()
Esempio n. 6
0
    def _test_baked_lazy_loading_relationship_flag(self, flag):
        baked.bake_lazy_loaders()
        try:
            User, Address = self._o2m_fixture(bake_queries=flag)

            sess = Session()
            u1 = sess.query(User).first()

            from sqlalchemy.orm import Query

            canary = mock.Mock()

            # I would think Mock can do this but apparently
            # it cannot (wrap / autospec don't work together)
            real_compile_context = Query._compile_context

            def _my_compile_context(*arg, **kw):
                if arg[0].column_descriptions[0]['entity'] is Address:
                    canary()
                return real_compile_context(*arg, **kw)

            with mock.patch.object(
                Query,
                "_compile_context",
                _my_compile_context
            ):
                u1.addresses

                sess.expire(u1)
                u1.addresses
        finally:
            baked.unbake_lazy_loaders()

        if flag:
            eq_(canary.call_count, 1)
        else:
            eq_(canary.call_count, 2)