Hey folks, not sure where this belongs, but it seems to be a fairly
under-the-hood question, so I'll try here first.

I have some utilities that get registered in various packages in zcml.
The packages are included from the main apps configure.zml file with

<include package="xornot.model" />

and in that packages configure.zcml file I have:

<utility provides="xornot.model.interfaces.IResourceMappers"
component="xornot.model.mappers.model_mappers" name="model_mappers"/>

The configure.zcml from xornot.model *is* definitely being parsed,
putting garbage in there stops app start up. Here's what I can figure
out, I have another a factory that looks up that utility from the
registry. In my app.py file where I set up the registry using the
Configurator object, I have the following code, *after* all
configuration is done:

# instantiate  ModelFactory, does all the SQLA startup housekeeping
model_factory = ModelFactory(registry=registry, **settings)
# register model factory as generic adapter of request to provide
model
registry.registerAdapter(model_factory, (IRequest,), Interface,
'model')

Now here's what's weird. The ModelFactory does not find that utility.
Looking at ._registered_utilities of the registry during ModelFactory
init shows no registration of my model mapper utility. But when I drop
into the debugger from the root factory, I can find that utility in
the registry. I want to set up the ModelFactory once and only once on
start up ( it makes SQLA mappers, which I believe are shared between
threads ).

I can't figure out for the life of me why the utilities aren't in
there, it must be some innards thing I don't grok. I thought all
included zcml packages were loaded in during the config setup code.
Any help much appreciated. I will include my app code for ref:

thanks
iain

def app(global_config, **settings):
    "return a wsgi app with a xornot ModelFactory in the registry"

    from xornot.model.interfaces import IAbstractModel
    from xornot.model.factories import ModelFactory

    # allow ini file's to set the app package and configure.zcml file
    app_package = settings.get('app_package', None)
    zcml_file = settings.get('configure_zcml', 'configure.zcml')

    # we are using the zope global site manager
    registry = getGlobalSiteManager()

    config = Configurator( registry=registry )
    config.include('pyramid_zcml')
    config.setup_registry(settings=settings, root_factory=DefaultRoot,
        request_factory=Request )

    if app_package:
        config.load_zcml("%s:%s" % (app_package, zcml_file) )
    else:
        # load from current package
        config.load_zcml(zcml_file)


    # instantiate  ModelFactory, does all the SQLA startup
housekeeping
    # XXX: this guy is not finding utilities registered in included
packages!
    model_factory = ModelFactory(registry=registry, **settings)
    # register model factory as generic adapter of request to provide
model
    registry.registerAdapter(model_factory, (IRequest,), Interface,
'model')

    # get the base app and return it
    app = config.make_wsgi_app()

    return app

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-devel" group.
To post to this group, send email to pylons-devel@googlegroups.com.
To unsubscribe from this group, send email to 
pylons-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/pylons-devel?hl=en.

Reply via email to