Combine dois decoradores python em um

Aqui estão dois decoradores que eu gostaria de combinar, pois eles são bem parecidos, a diferença é como um usuário não autenticado é manipulado. Eu prefiro ter um único decorador que eu possa chamar com um argumento.

# 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

E atualmente estou usando esses decoradores para rotas específicas, por exemplo

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

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

Eu preferiria muito mais isso:

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

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

Eu estou no python 3.3 usando o framework Bottle. É possível fazer o que eu quero? Como?

questionAnswers(2)

yourAnswerToTheQuestion