On Fri, Oct 9, 2009 at 13:45, Iwan <[email protected]> wrote:

> We ran into a silly problem which took quite some digging to discover
> - I thought I'd share it here and ask for better solutions too.
>
> We have a complicated app which uses a custom session.  We set the
> custom session by assigning to elixir.session, eg:
>
>  elixir.session = scoped_session(sessionmaker(autoflush=True,
> transactional=True), scopefunc=custom_scope_func)
>
> However, our elixir Entity-derived classes just happen to be imported
> BEFORE that statement executes.
>
> Of course, the result is that they are all using the original
> elixir.session (ScopedSession), and not the one we set.  And nothing
> really breaks to tell you that, so it is hard to find in a complex
> app.

Well that global (ie provided by default) collection, session and
metadata was a poor design decision and this is one of the numerous
problems it brings. At some point, I should really think things
through and see how to get rid of them with minimal upgrade hassle.

> Now, we would not want to litter our modules with __session__ or have
> to remember to add options to each class.

I can understand that...

> Neither do we want to be
> dependent on when what gets imported...

Well, that's the only semi-clean (IMO) option currently available.

> One partial solution to the problem is to NOT assign to
> elixir.session, but just to call configure() on it.  However, it is
> crucial to us to actually set a custom scopefunc and you cannot do
> that with configure (unless I am mistaken).

> Is it possible to change the scopefunc on a ScopedSession after
> creation?

You are correct, as far as I can tell, it's not possible.

> Or, alternatively, is it possible to move all classes from
> the old elixir.session to the new one we assign?

I think you can do it after declaring your entities (but before
setup_all), but that's quite ugly. The following should work (I have
not actually tried):

for entity in elixir.entities:
    entity._descriptor.session = XYZ

-- 
Gaëtan de Menten
http://openhex.org

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"SQLElixir" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sqlelixir?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to