mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-29 04:51:11 +00:00
56 lines
2 KiB
Python
56 lines
2 KiB
Python
"""Do further startup configuration and initialization"""
|
|
|
|
import os
|
|
import urllib
|
|
import logging
|
|
|
|
from django.apps import AppConfig
|
|
|
|
from bookwyrm import settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def download_file(url, destination):
|
|
"""Downloads a file to the given path"""
|
|
try:
|
|
# Ensure our destination directory exists
|
|
os.makedirs(os.path.dirname(destination), exist_ok=True)
|
|
with urllib.request.urlopen(url) as stream:
|
|
with open(destination, "b+w") as outfile:
|
|
outfile.write(stream.read())
|
|
except (urllib.error.HTTPError, urllib.error.URLError) as err:
|
|
logger.error("Failed to download file %s: %s", url, err)
|
|
except OSError as err:
|
|
logger.error("Couldn't open font file %s for writing: %s", destination, err)
|
|
except Exception as err: # pylint:disable=broad-except
|
|
logger.error("Unknown error in file download: %s", err)
|
|
|
|
|
|
class BookwyrmConfig(AppConfig):
|
|
"""Handles additional configuration"""
|
|
|
|
name = "bookwyrm"
|
|
verbose_name = "BookWyrm"
|
|
|
|
# pylint: disable=no-self-use
|
|
def ready(self):
|
|
"""set up OTLP and preview image files, if desired"""
|
|
if settings.OTEL_EXPORTER_OTLP_ENDPOINT or settings.OTEL_EXPORTER_CONSOLE:
|
|
# pylint: disable=import-outside-toplevel
|
|
from bookwyrm.telemetry import open_telemetry
|
|
|
|
open_telemetry.instrumentDjango()
|
|
open_telemetry.instrumentPostgres()
|
|
|
|
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)
|