mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	There’s no reason to monkey-patch something that we were already subclassing. Removing the PRODUCTION conditional causes us to generate staticfiles.json in the right place to begin with so we don’t need to move it later. It also allows Django to find staticfiles.json if running the dev server with PIPELINE_ENABLED. Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
		
			
				
	
	
		
			51 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Useful reading is https://zulip.readthedocs.io/en/latest/subsystems/front-end-build-process.html
 | 
						|
 | 
						|
import os
 | 
						|
from typing import Optional
 | 
						|
 | 
						|
from django.conf import settings
 | 
						|
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
 | 
						|
from pipeline.storage import PipelineMixin
 | 
						|
 | 
						|
class IgnoreBundlesManifestStaticFilesStorage(ManifestStaticFilesStorage):
 | 
						|
    def hashed_name(self, name: str, content: Optional[str]=None, filename: Optional[str]=None) -> str:
 | 
						|
        ext = os.path.splitext(name)[1]
 | 
						|
        if name.startswith("webpack-bundles"):
 | 
						|
            # Hack to avoid renaming already-hashnamed webpack bundles
 | 
						|
            # when minifying; this was causing every bundle to have
 | 
						|
            # two hashes appended to its name, one by webpack and one
 | 
						|
            # here.  We can't just skip processing of these bundles,
 | 
						|
            # since we do need the Django storage to add these to the
 | 
						|
            # manifest for django_webpack_loader to work.  So, we just
 | 
						|
            # use a no-op hash function for these already-hashed
 | 
						|
            # assets.
 | 
						|
            return name
 | 
						|
        if ext in ['.png', '.gif', '.jpg', '.svg']:
 | 
						|
            # Similarly, don't hash-rename image files; we only serve
 | 
						|
            # the original file paths (not the hashed file paths), and
 | 
						|
            # so the only effect of hash-renaming these is to increase
 | 
						|
            # the size of release tarballs with duplicate copies of thesex.
 | 
						|
            #
 | 
						|
            # One could imagine a future world in which we instead
 | 
						|
            # used the hashed paths for these; in that case, though,
 | 
						|
            # we should instead be removing the non-hashed paths.
 | 
						|
            return name
 | 
						|
        if ext in ['json', 'po', 'mo', 'mp3', 'ogg', 'html']:
 | 
						|
            # And same story for translation files, sound files, etc.
 | 
						|
            return name
 | 
						|
        return super().hashed_name(name, content, filename)
 | 
						|
 | 
						|
class ZulipStorage(PipelineMixin,
 | 
						|
                   IgnoreBundlesManifestStaticFilesStorage):
 | 
						|
    # This is a hack to use staticfiles.json from within the
 | 
						|
    # deployment, rather than a directory under STATIC_ROOT.  By doing
 | 
						|
    # so, we can use a different copy of staticfiles.json for each
 | 
						|
    # deployment, which ensures that we always use the correct static
 | 
						|
    # assets for each deployment.
 | 
						|
    manifest_name = os.path.join(settings.DEPLOY_ROOT, "staticfiles.json")
 | 
						|
 | 
						|
    def path(self, name: str) -> str:
 | 
						|
        if name == self.manifest_name:
 | 
						|
            return name
 | 
						|
        return super().path(name)
 |