From cf6b850de656e384cbeaf2fd58c7d507824b4563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 19 Dec 2016 15:19:10 +0100 Subject: [PATCH] server level files directly, don't try to render them on the fly --- src/c3nav/mapdata/render/compose.py | 40 ++++++----------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/src/c3nav/mapdata/render/compose.py b/src/c3nav/mapdata/render/compose.py index eb07cfe0..3c2b75be 100644 --- a/src/c3nav/mapdata/render/compose.py +++ b/src/c3nav/mapdata/render/compose.py @@ -1,46 +1,22 @@ -import os +import mimetypes from django.conf import settings +from django.core.files import File from django.http import HttpResponse -from PIL import Image from c3nav.mapdata.utils.misc import get_render_path class LevelComposer: - images = {} - images_mtimes = {} - - @classmethod - def _get_image(cls, filename, cached=True): - mtime = None - if cached: - mtime = os.path.getmtime(filename) - if filename in cls.images: - if cls.images_mtimes[filename] == mtime: - return cls.images[filename] - - img = Image.open(filename) - - if cached: - cls.images[filename] = img - cls.images_mtimes[filename] = mtime - - return img - - def _get_public_level_image(self, level): - return self._get_image(get_render_path('png', level.name, 'full', True)) - - def _get_complete_level_image(self, level): - return self._get_image(get_render_path('png', level.name, 'full', False)) - def get_level_image(self, request, level): if settings.DIRECT_EDITING: - img = self._get_complete_level_image(level) + img = get_render_path('png', level.name, 'full', True) else: - img = self._get_public_level_image(level) - response = HttpResponse(content_type="image/png") - img.save(response, 'PNG') + img = get_render_path('png', level.name, 'full', False) + + response = HttpResponse(content_type=mimetypes.guess_type(img)[0]) + for chunk in File(open(img, 'rb')).chunks(): + response.write(chunk) return response