1
0
mirror of https://github.com/django/django.git synced 2025-03-29 02:30:48 +00:00
django/django/contrib/admin/bin/compress.py
Jon Dufresne f48a1990fb
Made compress.py script use the official google-closure-compiler release.
The script previously used the PyPI package closure, which is slightly
out of date and not maintained by Google.

The JavaScript contribution docs and the compress.py script now runs the
google-closure-compiler package in the recommended way. Google's
documentation on usage and installation can be found at:

https://github.com/google/closure-compiler-npm/tree/master/packages/google-closure-compiler#usage

This also makes the usage simpler as the package now runs through npm's
npx utility, which will automatically install google-closure-compiler to
a per-user cache.
2020-04-22 16:19:27 +02:00

52 lines
1.7 KiB
Python

#!/usr/bin/env python
import argparse
import subprocess
import sys
from pathlib import Path
js_path = Path(__file__).parents[1] / 'static' / 'admin' / 'js'
def main():
description = """With no file paths given this script will automatically
compress files of the admin app. Requires the Google Closure Compiler library
and Java version 7 or later."""
parser = argparse.ArgumentParser(description=description)
parser.add_argument('file', nargs='*')
parser.add_argument("-v", "--verbose", action="store_true", dest="verbose")
parser.add_argument("-q", "--quiet", action="store_false", dest="verbose")
options = parser.parse_args()
if not options.file:
if options.verbose:
sys.stdout.write("No filenames given; defaulting to admin scripts\n")
files = [
js_path / f
for f in ["actions.js", "collapse.js", "inlines.js", "prepopulate.js"]
]
else:
files = [Path(f) for f in options.file]
for file_path in files:
to_compress = file_path.expanduser()
if to_compress.exists():
to_compress_min = to_compress.with_suffix('.min.js')
cmd = ['npx']
if not options.verbose:
cmd.append('-q')
cmd.extend([
'google-closure-compiler',
'--rewrite_polyfills=false',
'--js', str(to_compress),
'--js_output_file', str(to_compress_min),
])
if options.verbose:
sys.stdout.write("Running: %s\n" % ' '.join(cmd))
subprocess.run(cmd)
else:
sys.stdout.write("File %s not found. Sure it exists?\n" % to_compress)
if __name__ == '__main__':
main()