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.conf import settings
from .models import Termin
from contrib.media import media_path, serve_media, ensure_media_dir
import xlsxwriter
@ -16,6 +17,7 @@ class TerminAdmin(admin.ModelAdmin):
actions = ['make_overview']
def make_overview(self, request, queryset):
ensure_media_dir()
filename = 'termine.xlsx'
workbook = xlsxwriter.Workbook(media_path(filename))
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, 20, termin.email)
workbook.close()
with open(media_path(filename), 'rb') as xls:
response = HttpResponse(FileWrapper(xls))
response['Content-Type'] = 'application/xlsx'
response['Content-Disposition'] = 'attachment; filename='+filename
return response
return serve_media(filename, 'application/xlsx')
make_overview.short_description = "Termine in Excel Liste überführen"
# Register your models here.
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.http import HttpResponse, HttpResponseRedirect
from wsgiref.util import FileWrapper
from contrib.media import media_path, media_dir, serve_media, ensure_media_dir
from PIL import Image
@ -23,22 +24,8 @@ def 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):
# provide the user with the resulting pdf file
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
return serve_media(filename_pdf, 'application/pdf')
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)
res = tmpl.render(dict(context, creation_date=datetime.today().strftime('%d.%m.%Y')))
if not os.path.exists(media_dir()):
os.makedirs(media_dir())
ensure_media_dir()
with open(media_path(filename_tex), 'w', encoding='utf-8') as f:
f.write(res)
@ -88,8 +74,7 @@ def fill_pdf_form(name, template_path, fields, attachments=[], save_only=False):
path = find_template(template_path)
if not os.path.exists(media_dir()):
os.makedirs(media_dir())
ensure_media_dir()
reader = PdfReader(path)
writer = PdfWriter()

Loading…
Cancel
Save