"""The base Controller API

Provides the BaseController class for subclassing.
"""
from pylons.controllers import WSGIController
from pylons.controllers.util import abort, redirect
from pylons.templating import render_mako as render
from pylons import config, request, session, tmpl_context as c
from routes import request_config

from floof import model
from floof.model.users import User

class BaseController(WSGIController):

    # NOTE: This could have been implemented as a middleware =]
    def __before__(self):
        c.route = request_config().mapper_dict

        # Fetch current user object
        try:
            c.user = User.query.get(session['user_id'])
        except:
            c.user = None
            pass

    def __call__(self, environ, start_response):
        """Invoke the Controller"""
        # WSGIController.__call__ dispatches to the Controller method
        # the request is routed to. This routing information is
        # available in environ['pylons.routes_dict']

        # Insert any code to be run per request here.

        try:
            return WSGIController.__call__(self, environ, start_response)
        finally:
            model.Session.remove()


    def redirect_to_referrer(self):
        """Performs a redirect_to to wherever we came from.  Used for stuff
        like logging in.
        """
        referrer = request.headers.get('REFERER', '/')
        redirect(referrer, code=302)
