import os
from fnmatch import fnmatch
import yaml
from django.conf import settings
DATA_URI_START = ""
DATA_URI_END = ""
MHTML_START = ""
class JammitAssets:
ASSET_FILENAME = "assets.yml"
def __init__(self, assets_dir):
"""
Initializes the Jammit object by reading the assets.yml file and
stores all javascripts and stylesheets in memory for easy lookup
in templates.
"""
self.assets_dir = assets_dir
self.assets = self.read_assets()
def read_assets(self):
"""
Read the assets from the YAML and store it as a lookup dictionary.
"""
filepath = os.path.join(self.assets_dir, self.ASSET_FILENAME)
with open(filepath, "r") as yaml_file:
return yaml.safe_load(yaml_file)
def render_tags(self, asset_type, asset_package):
"""
Returns rendered ' % path
def javascript_tag_compressed(self, asset_package, asset_type_ext):
filename = "static/%s.%s" % (asset_package, asset_type_ext)
asset_mtime = int(os.path.getmtime(filename))
path = "%s?%s" % (filename, asset_mtime)
return self.javascript_tag(path)
def stylesheet_tag(self, path):
return '' % path
def stylesheet_tag_compressed(self, asset_package, asset_type_ext):
datauri_filename = "static/%s-datauri.%s" % (asset_package, asset_type_ext)
original_filename = "static/%s.%s" % (asset_package, asset_type_ext)
asset_mtime = int(os.path.getmtime(datauri_filename))
datauri_path = "%s?%s" % (datauri_filename, asset_mtime)
original_path = "%s?%s" % (original_filename, asset_mtime)
return "\n".join(
[
DATA_URI_START,
self.stylesheet_tag(datauri_path),
DATA_URI_END,
MHTML_START,
self.stylesheet_tag(original_path),
MHTML_END,
]
)
class FileFinder:
@classmethod
def filefinder(cls, pattern):
paths = []
if "**" in pattern:
folder, wild, pattern = pattern.partition("/**/")
for f in cls.recursive_find_files(folder, pattern):
paths.append(f)
else:
folder, pattern = os.path.split(pattern)
for f in cls.find_files(folder, pattern):
# print f, paths
paths.append(f)
return paths
@classmethod
def recursive_find_files(cls, folder, pattern):
for root, dirs, files in os.walk(folder):
for f in files:
if fnmatch(f, pattern):
yield os.path.join(root, f)
@classmethod
def find_files(cls, folder, pattern):
listdir = os.listdir(folder)
listdir.sort()
for entry in listdir:
if not os.path.isdir(entry) and fnmatch(entry, pattern):
yield os.path.join(folder, entry)