Merge pull request #3424 from FinnStutzenstein/Issue3422

Generate webclient-realm.js while collecting staticfiles (fixes #3422)
This commit is contained in:
Emanuel Schütze 2017-10-05 12:53:28 +02:00 committed by GitHub
commit 188f29a6c3
4 changed files with 48 additions and 3 deletions

View File

@ -85,7 +85,7 @@ Core:
- Added custom translations in config [#3383]. - Added custom translations in config [#3383].
- Added dynamic webpage title [#3404]. - Added dynamic webpage title [#3404].
- Added 'go to top'-link [#3404]. - Added 'go to top'-link [#3404].
- Added caching for the index views [#3419]. - Added caching for the index views [#3419, #3424].
- Added projector prioritization [#3425]. - Added projector prioritization [#3425].
Mediafiles: Mediafiles:

View File

@ -0,0 +1,43 @@
import os
from typing import Any, Dict
from django.conf import settings
from django.contrib.staticfiles.management.commands.collectstatic import \
Command as CollectStatic
from django.core.management.base import CommandError
from django.db.utils import OperationalError
from ...views import WebclientJavaScriptView
class Command(CollectStatic):
"""
Custom collectstatic command.
"""
realms = ['site', 'projector']
js_filename = 'webclient-{}.js'
def handle(self, **options: Any) -> str:
try:
self.view = WebclientJavaScriptView()
except OperationalError:
raise CommandError('You have to run OpenSlides first to create a ' +
'database before collecting staticfiles.')
return super().handle(**options)
def collect(self) -> Dict[str, Any]:
destination_dir = os.path.join(settings.OS_STATICFILES_DIR, 'js')
if not os.path.exists(destination_dir):
os.makedirs(destination_dir)
for realm in self.realms:
filename = self.js_filename.format(realm)
content = self.view.get(realm=realm).content
path = os.path.join(destination_dir, filename)
with open(path, 'wb+') as f:
f.write(content)
self.stdout.write("Written WebclientJavaScriptView for realm {} to '{}'".format(
realm,
path))
return super().collect()

View File

@ -178,7 +178,7 @@ class WebclientJavaScriptView(utils_views.View):
""".format(realm=realm, angular_modules=angular_modules, angular_constants=angular_constants, js_files=js_files) + """.format(realm=realm, angular_modules=angular_modules, angular_constants=angular_constants, js_files=js_files) +
""" """
}()); }());
""") """).replace('\n', '')
self.cache[realm] = content self.cache[realm] = content
def get(self, *args: Any, **kwargs: Any) -> HttpResponse: def get(self, *args: Any, **kwargs: Any) -> HttpResponse:

View File

@ -81,8 +81,10 @@ LOCALE_PATHS = [
STATIC_URL = '/static/' STATIC_URL = '/static/'
OS_STATICFILES_DIR = os.path.join(MODULE_DIR, 'static')
STATICFILES_DIRS = [ STATICFILES_DIRS = [
os.path.join(MODULE_DIR, 'static'), OS_STATICFILES_DIR,
] ]