summaryrefslogtreecommitdiff
path: root/main/storage.py
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2013-04-21 02:22:44 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2013-04-21 02:22:44 -0400
commit03fa7e4f27bdb39a8f8f5ed91a87d18bf8357b47 (patch)
treec67eafcbda55706f18400b3115a2b8a5be318394 /main/storage.py
parent91c451821ce7000cbc268cec8427d208a6cedd7e (diff)
parentb8ee7b1ee281b45b245fb454228b8ad847c56200 (diff)
Merge branch 'archweb' into archweb-generic2
Conflicts: devel/views.py feeds.py public/views.py settings.py sitestatic/archweb.js templates/base.html templates/devel/profile.html templates/mirrors/status.html templates/news/view.html templates/packages/flaghelp.html templates/packages/opensearch.xml templates/public/download.html templates/public/feeds.html templates/public/index.html templates/registration/login.html templates/releng/results.html templates/todolists/public_list.html
Diffstat (limited to 'main/storage.py')
-rw-r--r--main/storage.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/main/storage.py b/main/storage.py
new file mode 100644
index 00000000..62e94ef7
--- /dev/null
+++ b/main/storage.py
@@ -0,0 +1,36 @@
+import cssmin
+import jsmin
+
+from django.contrib.staticfiles.storage import CachedStaticFilesStorage
+from django.core.files.base import ContentFile
+from django.utils.encoding import smart_str
+
+
+class MinifiedStaticFilesStorage(CachedStaticFilesStorage):
+ """
+ A static file system storage backend which minifies the hashed
+ copies of the files it saves. It currently knows how to process
+ CSS and JS files. Files containing '.min' anywhere in the filename
+ are skipped as they are already assumed minified.
+ """
+ minifiers = (
+ ('.css', cssmin.cssmin),
+ ('.js', jsmin.jsmin),
+ )
+
+ def post_process(self, paths, dry_run=False, **options):
+ for original_path, processed_path, processed in super(
+ MinifiedStaticFilesStorage, self).post_process(
+ paths, dry_run, **options):
+ for ext, func in self.minifiers:
+ if '.min' in original_path:
+ continue
+ if original_path.endswith(ext):
+ with self._open(processed_path) as processed_file:
+ minified = func(processed_file.read())
+ minified_file = ContentFile(smart_str(minified))
+ self.delete(processed_path)
+ self._save(processed_path, minified_file)
+ processed = True
+
+ yield original_path, processed_path, processed