@classmethod
def _preprocessSource(klass, source, file, preprocessors):
    """Iterates through the .compile() classmethod's preprocessors argument
        and pipes the source code through each each preprocessor.

        It returns the tuple (source, file) which is then used by
        Template.compile to finish the compilation.
        """
    if not isinstance(preprocessors, (list, tuple)):
        preprocessors = [preprocessors]
    for preprocessor in preprocessors:
        preprocessor = klass._normalizePreprocessorArg(preprocessor)
        source, file = preprocessor.preprocess(source, file)
    return source, file
