contrib: factor common media path manipulations out

pull/118/head
Christian Merten 11 months ago
parent 49c4e4c548
commit 530aea3244
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -0,0 +1,29 @@
import os
from django.conf import settings
from django.http import HttpResponse
from wsgiref.util import FileWrapper
def media_path(fp):
return os.path.join(os.path.join(settings.MEDIA_ROOT, "memberlists"), fp)
def media_dir():
return os.path.join(settings.MEDIA_ROOT, "memberlists")
def serve_media(filename, content_type):
"""
Serve the media file with the given `filename` as an HTTP response.
"""
with open(media_path(filename), 'rb') as f:
response = HttpResponse(FileWrapper(f))
response['Content-Type'] = content_type
response['Content-Disposition'] = 'attachment; filename='+filename
return response
def ensure_media_dir():
if not os.path.exists(media_dir()):
os.makedirs(media_dir())

@ -5,6 +5,7 @@ from wsgiref.util import FileWrapper
from django.http import HttpResponse from django.http import HttpResponse
from django.conf import settings from django.conf import settings
from .models import Termin from .models import Termin
from contrib.media import media_path, serve_media, ensure_media_dir
import xlsxwriter import xlsxwriter
@ -16,6 +17,7 @@ class TerminAdmin(admin.ModelAdmin):
actions = ['make_overview'] actions = ['make_overview']
def make_overview(self, request, queryset): def make_overview(self, request, queryset):
ensure_media_dir()
filename = 'termine.xlsx' filename = 'termine.xlsx'
workbook = xlsxwriter.Workbook(media_path(filename)) workbook = xlsxwriter.Workbook(media_path(filename))
bold = workbook.add_format({'bold': True}) bold = workbook.add_format({'bold': True})
@ -64,17 +66,8 @@ class TerminAdmin(admin.ModelAdmin):
worksheet.write(row+2, 19, termin.phone) worksheet.write(row+2, 19, termin.phone)
worksheet.write(row+2, 20, termin.email) worksheet.write(row+2, 20, termin.email)
workbook.close() workbook.close()
with open(media_path(filename), 'rb') as xls: return serve_media(filename, 'application/xlsx')
response = HttpResponse(FileWrapper(xls))
response['Content-Type'] = 'application/xlsx'
response['Content-Disposition'] = 'attachment; filename='+filename
return response
make_overview.short_description = "Termine in Excel Liste überführen" make_overview.short_description = "Termine in Excel Liste überführen"
# Register your models here. # Register your models here.
admin.site.register(Termin, TerminAdmin) admin.site.register(Termin, TerminAdmin)
def media_path(fp):
return os.path.join(os.path.join(settings.MEDIA_ROOT, "memberlists"), fp)

@ -11,6 +11,7 @@ from django.template.loader import get_template
from django.conf import settings from django.conf import settings
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from wsgiref.util import FileWrapper from wsgiref.util import FileWrapper
from contrib.media import media_path, media_dir, serve_media, ensure_media_dir
from PIL import Image from PIL import Image
@ -23,22 +24,8 @@ def find_template(template_name):
raise template.TemplateDoesNotExist(f"Could not find template: {template_name}") raise template.TemplateDoesNotExist(f"Could not find template: {template_name}")
def media_path(fp):
return os.path.join(os.path.join(settings.MEDIA_ROOT, "memberlists"), fp)
def media_dir():
return os.path.join(settings.MEDIA_ROOT, "memberlists")
def serve_pdf(filename_pdf): def serve_pdf(filename_pdf):
# provide the user with the resulting pdf file return serve_media(filename_pdf, 'application/pdf')
with open(media_path(filename_pdf), 'rb') as pdf:
response = HttpResponse(FileWrapper(pdf))#, content='application/pdf')
response['Content-Type'] = 'application/pdf'
response['Content-Disposition'] = 'attachment; filename='+filename_pdf
return response
def render_tex(name, template_path, context, save_only=False): def render_tex(name, template_path, context, save_only=False):
@ -52,8 +39,7 @@ def render_tex(name, template_path, context, save_only=False):
tmpl = get_template(template_path) tmpl = get_template(template_path)
res = tmpl.render(dict(context, creation_date=datetime.today().strftime('%d.%m.%Y'))) res = tmpl.render(dict(context, creation_date=datetime.today().strftime('%d.%m.%Y')))
if not os.path.exists(media_dir()): ensure_media_dir()
os.makedirs(media_dir())
with open(media_path(filename_tex), 'w', encoding='utf-8') as f: with open(media_path(filename_tex), 'w', encoding='utf-8') as f:
f.write(res) f.write(res)
@ -88,8 +74,7 @@ def fill_pdf_form(name, template_path, fields, attachments=[], save_only=False):
path = find_template(template_path) path = find_template(template_path)
if not os.path.exists(media_dir()): ensure_media_dir()
os.makedirs(media_dir())
reader = PdfReader(path) reader = PdfReader(path)
writer = PdfWriter() writer = PdfWriter()

Loading…
Cancel
Save