55 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.8 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))
 | |
|         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):
 | |
|         logger.error("Failed to download file %s", url)
 | |
|     except OSError:
 | |
|         logger.error("Couldn't open font file %s for writing", destination)
 | |
|     except:  # pylint: disable=bare-except
 | |
|         logger.exception("Unknown error in file download")
 | |
| 
 | |
| 
 | |
| 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:
 | |
|             # pylint: disable=import-outside-toplevel
 | |
|             from bookwyrm.telemetry import open_telemetry
 | |
| 
 | |
|             open_telemetry.instrumentDjango()
 | |
| 
 | |
|         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)
 |