Sith/core/management/commands/compilestatic.py

70 lines
2.5 KiB
Python
Raw Normal View History

2017-05-01 22:31:21 +00:00
#!/usr/bin/env python3
#
2017-05-05 12:59:39 +00:00
# Copyright 2017
2017-05-01 22:31:21 +00:00
# - Sli <antoine@bartuccio.fr>
#
# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM,
# http://ae.utbm.fr.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License a published by the Free Software
# Foundation; either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple
# Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
2024-07-23 16:44:45 +00:00
import sys
2024-06-24 11:07:36 +00:00
2017-05-01 22:31:21 +00:00
import sass
2017-05-05 12:26:46 +00:00
from django.conf import settings
2024-06-24 11:07:36 +00:00
from django.core.management.base import BaseCommand
2017-05-05 12:26:46 +00:00
2017-05-01 22:31:21 +00:00
class Command(BaseCommand):
2024-07-12 07:34:16 +00:00
"""Compiles scss in static folder for production."""
2018-10-04 19:29:19 +00:00
2017-05-01 22:51:43 +00:00
help = "Compile scss files from static folder"
2017-05-01 22:31:21 +00:00
2024-07-23 16:44:45 +00:00
def compile(self, filename: str):
args = {
"filename": filename,
"include_paths": settings.STATIC_ROOT.name,
"output_style": "compressed",
}
2017-05-05 12:26:46 +00:00
if settings.SASS_PRECISION:
2018-10-04 19:29:19 +00:00
args["precision"] = settings.SASS_PRECISION
2017-05-05 12:26:46 +00:00
return sass.compile(**args)
2017-05-01 22:31:21 +00:00
def handle(self, *args, **options):
2024-07-23 16:44:45 +00:00
if not settings.STATIC_ROOT.is_dir():
raise Exception(
"No static folder availaible, please use collectstatic before compiling scss"
2018-10-04 19:29:19 +00:00
)
2024-07-23 16:44:45 +00:00
to_exec = list(settings.STATIC_ROOT.rglob("*.scss"))
if len(to_exec) == 0:
self.stdout.write("Nothing to compile.")
sys.exit(0)
self.stdout.write("---- Compiling scss files ---")
for file in to_exec:
# remove existing css files that will be replaced
# keeping them while compiling the scss would break
# import statements resolution
css_file = file.with_suffix(".css")
if css_file.exists():
css_file.unlink()
compiled_files = {file: self.compile(str(file.resolve())) for file in to_exec}
for file, scss in compiled_files.items():
file.replace(file.with_suffix(".css")).write_text(scss)
self.stdout.write(
"Files compiled : \n" + "\n- ".join(str(f) for f in compiled_files)
)