def METHOD_NAME(*args, **kwargs):
    if len(args) == 1 and callable(args[0]):  # Applied as a raw decorator
        decoratedFunction = args[0]
        # baseDecorator must wrap and return decoratedFunction
        return baseDecorator(decoratedFunction)
    else:   # Applied as a argument-containing decorator
        # Decoration will occur in two passes:
        #   * Now, the decorator arguments are passed, and a new decorator should be returned
        #   * Afterwards, the new decorator will be called to decorate the decorated function
        decoratorArgs = args
        decoratorKwargs = kwargs
        def partiallyAppliedDecorator(decoratedFunction):
            return baseDecorator(decoratedFunction, *decoratorArgs, **decoratorKwargs)
        return partiallyAppliedDecorator