
CherryPy Framework
******************

CherryPy framework is supported, it works but I'm sure there's room
for improvements. The implementation uses SQLAlchemy as ORM and
expects some values accessible on "cherrypy.request" for it to work.

At the moment the configuration is expected on "cherrypy.config" but
ideally it should be an application configuration instead.

Expected values are:

"cherrypy.request.user"
   Current logged in user, load it in your application on a
   "before_handler" handler.

"cherrypy.request.db"
   Current database session, again, load it in your application on a
   "before_handler".


Dependencies
============

The *CherryPy built-in application* depends on sqlalchemy, there's no
support for others ORMs yet but pull-requests are welcome.


Enabling the application
========================

The application is defined on
"social.apps.cherrypy_app.views.CherryPyPSAViews", register it in the
preferred way for your project.

Check the rest of the docs for the other settings like enabling
authentication backends and backends keys.


Models Setup
============

The models are located in "social.apps.cherrypy_app.models". A
reference to your "User" model is required to be defined in the
project settings, it should be an import path, for example:

   cherrypy.config.update({
       'SOCIAL_AUTH_USER_MODEL': 'models.User'
   })


Login mechanism
===============

By default the application sets the session value "user_id", this is a
simple solution and it should be improved, if you want to provider
your own login mechanism you can do it by defining the
"SOCIAL_AUTH_LOGIN_METHOD" setting, it should be an import path to a
callable, like this:

   SOCIAL_AUTH_USER_MODEL = 'app.login_user'

And an example of this function:

   def login_user(strategy, user):
       strategy.session_set('user_id', user.id)

Then, ensure to load the user in your application at
"cherrypy.request.user", for example:

   def load_user():
       user_id = cherrypy.session.get('user_id')
       if user_id:
           cherrypy.request.user = cherrypy.request.db.query(User).get(user_id)
       else:
           cherrypy.request.user = None


   cherrypy.tools.authenticate = cherrypy.Tool('before_handler', load_user)
