Download fonts at app startup instead

We can't bake the font into the Docker image as such, because we mount
the volumes which blows away anything we have in the app tree
beforehand.

We could stash it somewhere in the image and then copy it from there on
app startup or something, but at that point we might as well just
download it as part of the app startup.
This commit is contained in:
Joel Bradshaw
2022-01-25 00:22:13 -08:00
parent 766a0cc652
commit 9e6390662b
4 changed files with 66 additions and 20 deletions

35
bookwyrm/apps.py Normal file
View File

@ -0,0 +1,35 @@
import os
import urllib
import logging
from django.apps import AppConfig
from bookwyrm import settings
logger = logging.getLogger(__name__)
def download_file(url, destination):
try:
stream = urllib.request.urlopen(url)
with open(destination, "b+w") as f:
f.write(stream.read())
except (urllib.error.HTTPError, urllib.error.URLError):
logger.error("Failed to download file %s", url)
class BookwyrmConfig(AppConfig):
name = "bookwyrm"
verbose_name = "BookWyrm"
def ready(self):
if settings.ENABLE_PREVIEW_IMAGES and settings.FONTS:
# Download any fonts that we don't have yet
logger.debug("Downloading fonts..")
for name, config in settings.FONTS.items():
font_path = os.path.join(
settings.FONT_DIR, config["directory"], config["filename"]
)
if "url" in config and not os.path.exists(font_path):
logger.info("Just a sec, downloading %s", name)
download_file(config["url"], font_path)