On Fri, Dec 16, 2011 at 5:07 AM, John Anderson <[email protected]> wrote:
> On 12/15/2011 07:02 PM, Viktor Nagy wrote: > > hi, > > I'm stuck and sweating with a "should be simple, so common" problem > related sqlalchemy and portable pyramid app development. > > I would like bind together several apps using config.include. > All these apps use their own DBSession and Base declarations. The > DBSession shouldn't cause any troubles as scoped session is used > everywhere, but this is not true about the Base declarations. > > If I don't want to import the Base of one of my apps (it's not feasible > in my case anyway), then I have to move every already defined table from > other models' metadata to this Base.metadata, otherwise SQLAlchemy can not > find related tables as they are contained within separate metadatas. > > Moreover, even when I come up with some really dirty solution and manage > to run the pserve, the populate script needs a different approach just like > writing tests, and it seems to me that in every situation I should invent > new approaches, and I'm running out of ideas. :) > > I guess that overcoming such situations should be a common task, so I > would be glad if you would share your experiences with me. > > > I use the registry to define what session and just make sure each Base > class is defined a different name, although you could just do import Base > as base1 or something. > > So, for instance I have a the site pcolalug.com repo and it uses a > re-usable library called pyramid_signup, so in its init it registers the > session to a marker interface so pyramid_signup knows how to use it: > > > https://github.com/pcolalug/pcolalug.com/blob/master/pcolalug/__init__.py#L68 > > and the populate script just imports each base and calls create on them: > > > https://github.com/pcolalug/pcolalug.com/blob/master/scripts/populate.py#L49 > Actually you avoid my problem not by using the registry, but by using a common Base. This way it's easy! :) https://github.com/pcolalug/pcolalug.com/blob/master/pcolalug/models.py#L15 But suppose you have two projects to include and both of them create their own Base class. (Like pyramid_signup does.) What would you inherit from in pcolalug.models? The point is that Base.metadata holds all the tables that were defined with the given Base. And when you run Base.metadata.create_all(), then you can access only the tables know by Base. Thus foreign key relationship can not span Bases. And this leads to serious headaches on my side! > > and then in pyramid_signup, it just never uses a global session, it just > always pulls from the registry: > > > https://github.com/sontek/pyramid_signup/blob/master/pyramid_signup/lib.py#L20 > > Then to make sure that you can also override templates whenever possible I > use asset specs: > > https://github.com/sontek/pyramid_signup/blob/master/pyramid_signup/views.py#L125 > > does that help? > > Unfortunately, it did not. :( -- You received this message because you are subscribed to the Google Groups "pylons-discuss" 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/pylons-discuss?hl=en.
