def _compile_css_files(hash, media_files):
    from template_preprocessor.core.css_processor import compile_css_string

    if hash in __css_compiled:
        compiled_path = __css_compiled[hash]
    else:
        print "Compiling media: ", ", ".join(media_files)
        # Compile CSS
        # 1. concatenate and compile all css files
        source = u"\n".join(
            [
                compile_css_string(
                    codecs.open(os.path.join(MEDIA_ROOT, p), "r", "utf-8").read(),
                    os.path.join(MEDIA_ROOT, p),
                    url=os.path.join(MEDIA_URL, p),
                )
                for p in media_files
            ]
        )

        # 2. Store in media dir
        compiled_path = "%s.css" % hash
        _create_directory_if_not_exists(MEDIA_CACHE_DIR)
        codecs.open(os.path.join(MEDIA_CACHE_DIR, compiled_path), "w", "utf-8").write(source)

        # Save
        __css_compiled[hash] = compiled_path

    return os.path.join(MEDIA_CACHE_URL, compiled_path)
        def compile_part(media_file):
            progress[0] += 1
            media_content = read_media(media_file)

            context.compile_media_progress_callback(compress_tag, simplify_media_url(media_file),
                        progress[0], len(media_files), len(media_content))

            if (not is_remote_url(media_file) or context.options.compile_remote_css):
                return compile_css_string(media_content, context, get_media_source_from_url(media_file), media_file)
            elif is_static_url(media_file):
                # STATIC_URL is an absolute url, and will be placed with the css . so we remove the fullpath.
                url = media_file[len(STATIC_URL) - 1:]
                return compile_css_string(media_content, context, get_media_source_from_url(media_file), url)
            elif is_media_url(media_file):
                # MEDIA_URL is an absolute url, and will be placed with the css . so we remove the fullpath.
                url = media_file[len(MEDIA_URL) - 1:]
                return compile_css_string(media_content, context, get_media_source_from_url(media_file), url)
            else:
                return media_content
        def compile_part(media_file):
            progress[0] += 1
            media_content = read_media(media_file)

            context.compile_media_progress_callback(compress_tag, simplify_media_url(media_file),
                        progress[0], len(media_files), len(media_content))

            if not is_remote_url(media_file) or context.options.compile_remote_css:
                return compile_css_string(media_content, context, get_media_source_from_url(media_file), media_file)
            else:
                return media_content
        def compile_part(media_file):
            progress[0] += 1
            media_content = read_media(media_file)

            context.compile_media_progress_callback(
                compress_tag, simplify_media_url(media_file), progress[0],
                len(media_files), len(media_content))

            if not is_remote_url(
                    media_file) or context.options.compile_remote_css:
                return compile_css_string(
                    media_content, context,
                    get_media_source_from_url(media_file), media_file)
            else:
                return media_content