Chris McDonough wrote:
> Iain Duncan wrote:
>> On Sat, 2009-09-26 at 01:42 -0400, Chris McDonough wrote:
>>> Iain Duncan wrote:
>>>>>> If I could get the 'one-registry-to-rule-them-all' loaded in middelware
>>>>>> on ingress, is there at least a reasonable way of forcing the bgf app to
>>>>>> use that registry as it's site manager? 
>>>>> Nope.  BFG hooks this "hookable" thing when it loads a ZCML file to put 
>>>>> it in 
>>>>> its own registry, and unhooks it when loading is done.  On every request, 
>>>>> it 
>>>>> pushes that registry into a place where it can be found by the global API 
>>>>> and 
>>>>> pops it off when the request is done.  The global registry is never 
>>>>> populated 
>>>>> or consumed.
>>>>>
>>>>>> Like, I managed to stash the
>>>>>> middleware created site manager in the environ, and get at it
>>>>>> successfully from bfg, but it means I'm manually querying adapters like
>>>>>> so:
>>>>>>
>>>>>> sm = environ['dram.sm']
>>>>>> sm.queryAdapter( yada yada )
>>>>> If you've got that far, good on ya.  Any solution you come up with will 
>>>>> smell a 
>>>>> lot like that, so you may have already won. FTR, this is what all 
>>>>> interaction 
>>>>> with any ZCA registry *should* look; the global API is for the birds. ;-)
>>>> Hmm, wondering about bfg's look up of views though. Would it be feasible
>>>> for me to replace the site manager that bfg uses to look up views, given
>>>> that they are named multi-adapters under the hood. ( see I've been
>>>> reading! ha ha )
>>> You can do this, it's just essentially replacing the "registry" attribute 
>>> of 
>>> the BFG "router" app that represents the application.  Sort of.  BFG 
>>> actually 
>>> uses a subclass of the registry (see registry.py).  So you have to replace 
>>> it 
>>> with one that has the same methods.  You can probably do this in a 
>>> subscriber 
>>> to the WSGIApplicationStartedEvent, which receives the router object as an 
>>> argument.  Thereafter, the registry placed on the stack will be the one you 
>>> placed there.
>>>
>>> I'd advise against it, though.  It smells real bad.
>> Hmm, I agree, but I feel like there is a smell either way. ;-)
>>
>> It seems to me I can either:
>>
>> A) - create a duplicate of the the same registry in my abstract model
>> middleware by using zope.configuration.xmlconfig( same_file_as_bfg ) and
>> then know that any utility/adapter queries will get the same things  
> 
> This seems like it might be the lesser of two evils.. although I'd be asking 
> myself these things:
> 
> a) Does the middleware really need a component registry?
> 
> b) If so, does the middleware really need to use the *same* registry as the 
> applications its in front of?
> 
> c) If so, why is this thing middleware and not part of the application? 
> (Answering my own question: because there's more than one app, I understand).
> 
>> 2 - find a way to make bfg use the same registry I make in the
>> middleware
>>
>> A) also smells bad to me because I am duplicating the registry, but
>> perhaps if I am only programatically *reading* from the registry the
>> rest of the time it's the lesser of the two evils? I intend for the
>> registry to get populated on startup and then stay static.
>>
>> In this context, the call chain is my model middleware, pylons, and bfg
>> at the end, the bfg app basically acting as a configurable crud thing. I
>> realize this is kind of a bent use of bfg, but on reading the bfg docs
>> it seemed like the bfg router and views accomplished a whole ton of
>> stuff I was just doing badly from scratch in my initial attempts.
>>  
>> I'd be interested in hearing your thoughts on pros/cons of each and why
>> in particular you think hijacking the bfg registry with one created in
>> middleware would be bad, but I appreciate you no doubt have your own
>> stuff to work on!
> 
> To be honest, if there's less than, say, 3K-4K lines of code in the Pylons 
> project, I'd be tempted port the Pylons code to BFG and just make it all one 
> BFG app.  I assume you've considered and rejected this idea.
> 
> Failing this, maybe you could proxy the Pylons app via the BFG @wsgi_app2 
> decorator on some very generic view.  At this point, the BFG registry will be 
> "current" wrt the global ZCA API, so calls in the Pylons apps will get the 
> "right" registry.

That's this, to be clear:

http://docs.repoze.org/bfg/current/api/wsgi.html#repoze.bfg.wsgi.wsgiapp2


> 
> - C
> 
> _______________________________________________
> Repoze-dev mailing list
> Repoze-dev@lists.repoze.org
> http://lists.repoze.org/listinfo/repoze-dev
> 

_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev

Reply via email to