Combina dos decoradores de pitón en uno

Aquí hay dos decoradores que me gustaría combinar ya que son bastante similares, la diferencia es cómo se maneja un usuario no autenticado. Preferiría tener un solo decorador al que pueda llamar con una discusión.

# Authentication decorator for routes
# Will redirect to the login page if not authenticated
def requireAuthentication(fn):
    def decorator(**kwargs):
        # Is user logged on?
        if "user" in request.session:
            return fn(**kwargs)
        # No, redirect to login page
        else:
            redirect('/login?url={0}{1}'.format(request.path, ("?" + request.query_string if request.query_string else '')))
    return decorator

# Authentication decorator for routes
# Will return an error message (in JSON) if not authenticated
def requireAuthenticationJSON(fn):
    def decorator(**kwargs):
        # Is user logged on?
        if "user" in request.session:
            return fn(**kwargs)
        # No, return error
        else:
            return {
                "exception": "NotAuthorized",
                "error" : "You are not authorized, please log on"
            }
    return decorator

Y actualmente estoy usando estos decoradores para rutas específicas, por ej.

@get('/day/')
@helpers.requireAuthentication
def day():
    ...

@get('/night/')
@helpers.requireAuthenticationJSON
def night():
    ...

Yo preferiría mucho más esto:

@get('/day/')
@helpers.requireAuthentication()
def day():
    ...

@get('/night/')
@helpers.requireAuthentication(json = True)
def night():
    ...

Estoy en Python 3.3 utilizando el marco de la botella. ¿Es posible hacer lo que quiero? ¿Cómo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta