Hi,

i want to migrate my Pylons projects to Pyramid framework but i have
one architecture problem (the same that i have in Pylons).

So, i have one project/package named "cms" and many other projects
using cms (pyramid projects site1, site2, site3 etc.). The problem is
that cms need to import information about models (DBSession) from the
current project.

Proof Of Concept:

==== cms ====
(pyramid_migrate)p...@b00s:~/pyramid_migrate/shared$ ls
cms  site1  site2

(pyramid_migrate)p...@b00s:~/pyramid_migrate/shared$ cat cms/cms/
__init__.py
config = None
(pyramid_migrate)p...@b00s:~/pyramid_migrate/shared$ cat cms/cms/
someview.py
#from site1.models import DBSession
#from site1.models import MyModel

def my_view(request):
    # some main ugly code ;-(
    import cms
    model_path = cms.config.package_name + '.models'
    temp = __import__(model_path, globals(), locals(), ['*'], -2)

    DBSession = temp.DBSession
    MyModel = temp.MyModel
    dbsession = DBSession()

    root =
dbsession.query(MyModel).filter(MyModel.name==u'root').first()
    return {'root':root, 'project':'site1'}


==== site1 config ====
(pyramid_migrate)p...@b00s:~/pyramid_migrate/shared$ cat site1/site1/
__init__.py
import sys
from pyramid.configuration import Configurator
from pyramid.settings import asbool

from site1.models import initialize_sql

# where is our cms project
sys.path.append('../cms')

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    db_string = settings.get('db_string')
    if db_string is None:
        raise ValueError("No 'db_string' value in application
configuration.")
    db_echo = settings.get('db_echo', 'false')
    initialize_sql(db_string, asbool(db_echo))
    config = Configurator(settings=settings)
    config.begin()
    config.add_static_view('static', 'site1:static')
    config.add_route('home', '/', view='site1.views.my_view',
                     view_renderer='templates/mytemplate.pt')
    config.add_route('cms', '/cms', view='cms.someview.my_view',
                     view_renderer='templates/mytemplate.pt')
    config.end()
    # set cms/__init__.py (config variable)
    import cms
    cms.config = config
    return config.make_wsgi_app()


Example above is working but it's a little bit ugly. Is there any
better solution for this problem?

-- 
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.

Reply via email to