From 23af4c60cd1dc3d5445ca2a39ede6955fc9e5de1 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Fri, 19 Jan 2024 13:47:46 +0100 Subject: [PATCH] chore: move UmapManifestStaticFilesStorage to a dedicated file --- umap/settings/base.py | 2 +- umap/storage.py | 77 ++++++++++++++++++++++++++ umap/tests/integration/test_statics.py | 2 +- umap/utils.py | 75 ------------------------- 4 files changed, 79 insertions(+), 77 deletions(-) create mode 100644 umap/storage.py diff --git a/umap/settings/base.py b/umap/settings/base.py index b890d7fc..08f3030d 100644 --- a/umap/settings/base.py +++ b/umap/settings/base.py @@ -169,7 +169,7 @@ STORAGES = { "BACKEND": "django.core.files.storage.FileSystemStorage", }, "staticfiles": { - "BACKEND": "umap.utils.UmapManifestStaticFilesStorage", + "BACKEND": "umap.storage.UmapManifestStaticFilesStorage", }, } diff --git a/umap/storage.py b/umap/storage.py new file mode 100644 index 00000000..a09bb871 --- /dev/null +++ b/umap/storage.py @@ -0,0 +1,77 @@ +from pathlib import Path + +from django.conf import settings +from django.contrib.staticfiles.storage import ManifestStaticFilesStorage +from rcssmin import cssmin +from rjsmin import jsmin + + +class UmapManifestStaticFilesStorage(ManifestStaticFilesStorage): + support_js_module_import_aggregation = True + + # We remove `;` at the end of all regexps to match our prettier config. + _js_module_import_aggregation_patterns = ( + "*.js", + ( + ( + ( + r"""(?Pimport(?s:(?P[\s\{].*?))""" + r"""\s*from\s*['"](?P[\.\/].*?)["']\s*)""" + ), + 'import%(import)s from "%(url)s"\n', + ), + ( + ( + r"""(?Pexport(?s:(?P[\s\{].*?))""" + r"""\s*from\s*["'](?P[\.\/].*?)["']\s*)""" + ), + 'export%(exports)s from "%(url)s"\n', + ), + ( + r"""(?Pimport\s*['"](?P[\.\/].*?)["']\s*)""", + 'import"%(url)s"\n', + ), + ( + r"""(?Pimport\(["'](?P.*?)["']\))""", + """import("%(url)s")""", + ), + ), + ) + + # https://github.com/django/django/blob/0fcee1676c7f14bb08e2cc662898dee56d9cf207↩ + # /django/contrib/staticfiles/storage.py#L78C5-L105C6 + patterns = ( + ( + "*.css", + ( + r"""(?Purl\(['"]{0,1}\s*(?P.*?)["']{0,1}\))""", + ( + r"""(?P@import\s*["']\s*(?P.*?)["'])""", + """@import url("%(url)s")""", + ), + # Remove CSS source map rewriting + ), + ), + # Remove JS source map rewriting + ) + + def post_process(self, paths, **options): + collected = super().post_process(paths, **options) + for original_path, processed_path, processed in collected: + if processed_path.endswith(".js"): + path = Path(settings.STATIC_ROOT) / processed_path + initial = path.read_text() + path_map = path.with_suffix(f"{path.suffix}.map") + minified = jsmin(initial) + minified += f"\n//# sourceMappingURL={path_map.name}" + path.write_text(minified) + path_map.write_text(initial) + if processed_path.endswith(".css"): + path = Path(settings.STATIC_ROOT) / processed_path + initial = path.read_text() + path_map = path.with_suffix(f"{path.suffix}.map") + minified = cssmin(initial) + minified += f"\n//# sourceMappingURL={path_map.name}" + path.write_text(minified) + path_map.write_text(initial) + yield original_path, processed_path, True diff --git a/umap/tests/integration/test_statics.py b/umap/tests/integration/test_statics.py index 657609b1..3f833425 100644 --- a/umap/tests/integration/test_statics.py +++ b/umap/tests/integration/test_statics.py @@ -24,7 +24,7 @@ def test_javascript_have_been_loaded( ): settings.STORAGES["staticfiles"][ "BACKEND" - ] = "umap.utils.UmapManifestStaticFilesStorage" + ] = "umap.storage.UmapManifestStaticFilesStorage" datalayer.settings["displayOnLoad"] = False datalayer.save() map.settings["properties"]["defaultView"] = "latest" diff --git a/umap/utils.py b/umap/utils.py index e61a882f..2a51fe4e 100644 --- a/umap/utils.py +++ b/umap/utils.py @@ -1,12 +1,8 @@ import gzip import os -from pathlib import Path from django.conf import settings -from django.contrib.staticfiles.storage import ManifestStaticFilesStorage from django.urls import URLPattern, URLResolver, get_resolver -from rcssmin import cssmin -from rjsmin import jsmin def _urls_for_js(urls=None): @@ -166,74 +162,3 @@ def merge_features(reference: list, latest: list, incoming: list): merged.append(item) return merged - - -class UmapManifestStaticFilesStorage(ManifestStaticFilesStorage): - support_js_module_import_aggregation = True - - # We remove `;` at the end of all regexps to match our prettier config. - _js_module_import_aggregation_patterns = ( - "*.js", - ( - ( - ( - r"""(?Pimport(?s:(?P[\s\{].*?))""" - r"""\s*from\s*['"](?P[\.\/].*?)["']\s*)""" - ), - 'import%(import)s from "%(url)s"\n', - ), - ( - ( - r"""(?Pexport(?s:(?P[\s\{].*?))""" - r"""\s*from\s*["'](?P[\.\/].*?)["']\s*)""" - ), - 'export%(exports)s from "%(url)s"\n', - ), - ( - r"""(?Pimport\s*['"](?P[\.\/].*?)["']\s*)""", - 'import"%(url)s"\n', - ), - ( - r"""(?Pimport\(["'](?P.*?)["']\))""", - """import("%(url)s")""", - ), - ), - ) - - # https://github.com/django/django/blob/0fcee1676c7f14bb08e2cc662898dee56d9cf207↩ - # /django/contrib/staticfiles/storage.py#L78C5-L105C6 - patterns = ( - ( - "*.css", - ( - r"""(?Purl\(['"]{0,1}\s*(?P.*?)["']{0,1}\))""", - ( - r"""(?P@import\s*["']\s*(?P.*?)["'])""", - """@import url("%(url)s")""", - ), - # Remove CSS source map rewriting - ), - ), - # Remove JS source map rewriting - ) - - def post_process(self, paths, **options): - collected = super().post_process(paths, **options) - for original_path, processed_path, processed in collected: - if processed_path.endswith(".js"): - path = Path(settings.STATIC_ROOT) / processed_path - initial = path.read_text() - path_map = path.with_suffix(f"{path.suffix}.map") - minified = jsmin(initial) - minified += f"\n//# sourceMappingURL={path_map.name}" - path.write_text(minified) - path_map.write_text(initial) - if processed_path.endswith(".css"): - path = Path(settings.STATIC_ROOT) / processed_path - initial = path.read_text() - path_map = path.with_suffix(f"{path.suffix}.map") - minified = cssmin(initial) - minified += f"\n//# sourceMappingURL={path_map.name}" - path.write_text(minified) - path_map.write_text(initial) - yield original_path, processed_path, True