Files
deb-python-django-pyscss/django_pyscss/utils.py
2015-04-22 16:07:00 -06:00

48 lines
1.4 KiB
Python

import fnmatch
import os
from django.conf import settings
from django.contrib.staticfiles import finders
from django.contrib.staticfiles.storage import staticfiles_storage
def find_all_files(glob):
"""
Finds all files in the django finders for a given glob,
returns the file path, if available, and the django storage object.
storage objects must implement the File storage API:
https://docs.djangoproject.com/en/dev/ref/files/storage/
"""
for finder in finders.get_finders():
for path, storage in finder.list([]):
if fnmatch.fnmatchcase(os.path.join(getattr(storage, 'prefix', '')
or '', path),
glob):
yield path, storage
def get_file_from_storage(filename):
try:
filename = staticfiles_storage.path(filename)
except NotImplementedError:
# remote storages don't implement path
pass
if staticfiles_storage.exists(filename):
return filename, staticfiles_storage
else:
return None, None
def get_file_from_finders(filename):
for file_and_storage in find_all_files(filename):
return file_and_storage
return None, None
def get_file_and_storage(filename):
# TODO: the switch probably shouldn't be on DEBUG
if settings.DEBUG:
return get_file_from_finders(filename)
else:
return get_file_from_storage(filename)