38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
import os
|
|
import socket
|
|
|
|
from django.core.cache import get_cache
|
|
from django.utils.encoding import smart_str
|
|
from django.utils.hashcompat import sha_constructor
|
|
|
|
from compressor.conf import settings
|
|
|
|
def get_hexdigest(plaintext):
|
|
return sha_constructor(plaintext).hexdigest()
|
|
|
|
def get_mtime_cachekey(filename):
|
|
return "django_compressor.mtime.%s.%s" % (socket.gethostname(),
|
|
get_hexdigest(filename))
|
|
|
|
def get_offline_cachekey(source):
|
|
return ("django_compressor.offline.%s.%s" %
|
|
(socket.gethostname(),
|
|
get_hexdigest("".join(smart_str(s) for s in source))))
|
|
|
|
def get_mtime(filename):
|
|
if settings.COMPRESS_MTIME_DELAY:
|
|
key = get_mtime_cachekey(filename)
|
|
mtime = cache.get(key)
|
|
if mtime is None:
|
|
mtime = os.path.getmtime(filename)
|
|
cache.set(key, mtime, settings.COMPRESS_MTIME_DELAY)
|
|
return mtime
|
|
return os.path.getmtime(filename)
|
|
|
|
def get_hashed_mtime(filename, length=12):
|
|
filename = os.path.realpath(filename)
|
|
mtime = str(int(get_mtime(filename)))
|
|
return get_hexdigest(mtime)[:length]
|
|
|
|
cache = get_cache(settings.COMPRESS_CACHE_BACKEND)
|