Thanks Alessandro,

I've seen your multisite.py file before and I think I can make the 
modifications needed.  I'm migrating to TG2.2 and it would not support 
repoze.what anymore, so how would you change your final lines.

# IMetadataProdiver    def add_metadata(self, environ, identity):        
identity['user'] = self.get_user(environ, identity['repoze.who.userid'])        
identity['groups'] = self.get_groups(environ, identity['user'])        
environ['repoze.what.credentials'] = {}        
environ['repoze.what.credentials']['groups'] = identity['groups']


Where do you set the credentials dict now?

Cheers


On Monday, September 10, 2012 11:59:08 AM UTC-5, Alessandro Molina wrote:
>
> The repoze.who auth layer gets called before turbogears has registered 
> request, probably for that reason you get the error when repoze.who 
> tries to fetch the user from database before the Session can decide 
> where to look for the user. 
>
> For that reason the load balancing session provided a default case 
> that always relied on the master node. 
>
> To make authentication requests go to different databases you must 
> write your own Authenticator which should set some thread local 
> variable that the get_bind method can use to force a database. 
> While it did it a lot of time ago by patching the engine instead of 
> using the session ACRCms did the same exact thing, you can probably 
> give a look at AcrAuthenticatorPlugin to get some help. 
>
> ArcAuthenticatorPlugin and AcrMultisiteEngine are available at: 
>
> https://bitbucket.org/axant/acrcms/src/1bb149ad9c0d/acr_cms/acr/lib/multisite.py
>  
>
> On Sun, Sep 9, 2012 at 6:53 PM, Juparave <[email protected] <javascript:>> 
> wrote: 
> > Hello TG Group, 
> > 
> > Examining TG2.2 I found that now it has an option to support load 
> balancing 
> > using SQLAlchemy Master Slave Load Balancing. 
> > 
> > What it does is to subclass sqlalchemy.orm.Session, overrides get_bind 
> > method, and sets it in the sessionmaker as class_; much like A. Molina 
> > explain in other post but now I kind of get it. 
> > 
> > I'm interested in beeing able to select a database depending from where 
> my 
> > app gets the request.  So I figure to copy the balanced session method 
> and 
> > adapt it to my needs. 
> > 
> > I have two scenarios, 
> > 
> > The request comes from: 
> > 
> > http://db_one.myapp.com I want to select the database db_one 
> >        ------ 
> > 
> > The request comes from: 
> > 
> > http://myapp.com/db_one 
> >                  ------ 
> > 
> > 
> > In the first one 
> > 
> > dbname = request.host.split('.myapp.com')[0] 
> > db_url = config['sqlalchemy.url'].replace('dbname', dbname) 
> > engine = create_engine(db_url, pool_recycle=3600) 
> > 
> > 
> > The second one I haven't realized yet, maybe I'll try with a parameter 
> like 
> > ac=db_one on the url. 
> > 
> > When I try to implement this for the first scenario I get 
> > 'TypeError: No object (name: request) has been registered for this 
> thread' 
> > 
> > When the method is called 'request' object is 'request: 
> > <paste.registry.StackedObjectProxy object at 0x90a4e0c>' meaning is not 
> yet 
> > defined. 
> > 
> > Looking at the TG stack 
> > WSGI Server 
> >   PasteCascade - serves one of a list of WSGI apps. 
> >     StaticFile Server - serves static files from /public 
> >  OR 
> >     TurboGears Application: - the TG stack 
> > 
> >     Registry Manager - sets up the request proxy, etc. 
> >       Error Middleware - if the path goes to _debug handle the request 
> >         Database Session Manager - setup the DBSession 
> >           Transaction Manager - 
> >             Authentication - add info to the environ if user is 
> > authenticated 
> >               Authorization - add more info to the environ for 
> > authorization. 
> >                 ToscaWidgets - nothing on the way in. 
> >                   Cache - sets up the cache 
> >                     Session - sets up the web session 
> >                       Routes - parses the URL and adds info to environ 
> >                         Custom Middleware - User defined middleware 
> >                           TurboGearsApp – calls WSGI style controller 
> >                             ObjectDispatchController – gets params, do 
> > validation, etc 
> >                                Your Controller Code – does anything! 
> >                             ObjectDispatchController – renders response, 
> > etc. 
> >                 ToscaWidgets - injects resources used by widgets 
> >           Transaction Manager - commits or rolls back transaction 
> >         Database Session Manager - cleans up the DBSession 
> >       Error Middleware - displays error pages, etc 
> > 
> > The request proxy is set before the db session manager so I don't know 
> why 
> > is request getting called before assignment. 
> > 
> > Any orientation will be appreciated. 
> > Thanks 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "TurboGears" group. 
> > To view this discussion on the web visit 
> > https://groups.google.com/d/msg/turbogears/-/jeP6Efo1afkJ. 
> > To post to this group, send email to 
> > [email protected]<javascript:>. 
>
> > To unsubscribe from this group, send email to 
> > [email protected] <javascript:>. 
> > For more options, visit this group at 
> > http://groups.google.com/group/turbogears?hl=en. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/turbogears/-/khb76WENV1wJ.
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/turbogears?hl=en.

Reply via email to