OpenSlides/openslides/core/management/commands/collectstatic.py
Oskar Hahn 10b3bb6497 Update to channels 2
* geis does not work with channels2 and never will be (it has to be python now)
* pytest
* rewrote cache system
* use username instead of pk for admin user in tests
2018-08-22 06:30:11 +02:00

51 lines
1.7 KiB
Python

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]:
try:
destination_dir = os.path.join(settings.STATICFILES_DIRS[0], 'js')
except IndexError:
# If the user does not want do have staticfiles, he should not get
# the webclient files either.
pass
else:
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()