generalize paths to media root and add encoding

docker
Christian Merten 9 years ago
parent 53d0ee02be
commit 8ad78d11cb

@ -17,6 +17,7 @@ from django.shortcuts import render
from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, from .models import (Member, Group, MemberList, MemberOnList, Klettertreff,
KlettertreffAttendee, ActivityCategory) KlettertreffAttendee, ActivityCategory)
from django.conf import settings
# Register your models here. # Register your models here.
@ -97,7 +98,7 @@ class MemberListAdmin(admin.ModelAdmin):
filename_pdf = filename + '.pdf' filename_pdf = filename + '.pdf'
# open temporary file for table # open temporary file for table
with open('media/memberlists/'+filename_table, 'w+') as f: with open(media_path(filename_table), 'w+', encoding='utf-8') as f:
for memberonlist in memberlist.memberonlist_set.all(): for memberonlist in memberlist.memberonlist_set.all():
# write table of members in latex compatible format # write table of members in latex compatible format
line = '{0} {1} & {2}, {3} & {4} & {5} \\\\ \n'.format(memberonlist.member.prename, line = '{0} {1} & {2}, {3} & {4} & {5} \\\\ \n'.format(memberonlist.member.prename,
@ -106,11 +107,11 @@ class MemberListAdmin(admin.ModelAdmin):
f.write(line) f.write(line)
# copy and adapt latex memberlist template # copy and adapt latex memberlist template
shutil.copy('media/memberlists/memberlist_template.tex', shutil.copy(media_path('memberlist_template.tex'),
'media/memberlists/'+filename_tex) media_path(filename_tex))
# read in template # read in template
with open('media/memberlists/'+filename_tex, 'r') as f: with open(media_path(filename_tex), 'r', encoding='utf-8') as f:
template_content = f.read() template_content = f.read()
# adapt template # adapt template
@ -145,12 +146,12 @@ class MemberListAdmin(admin.ModelAdmin):
filename_table) filename_table)
# write adapted template to file # write adapted template to file
with open('media/memberlists/' + filename_tex, 'w') as f: with open(media_path(filename_tex), 'w', encoding='utf-8') as f:
f.write(template_content) f.write(template_content)
# compile using pdflatex # compile using pdflatex
oldwd = os.getcwd() oldwd = os.getcwd()
os.chdir('media/memberlists') os.chdir(media_dir())
subprocess.call(['pdflatex', filename_tex]) subprocess.call(['pdflatex', filename_tex])
time.sleep(1) time.sleep(1)
@ -165,7 +166,7 @@ class MemberListAdmin(admin.ModelAdmin):
os.chdir(oldwd) os.chdir(oldwd)
# provide the user with the resulting pdf file # provide the user with the resulting pdf file
with open('media/memberlists/'+filename_pdf, 'rb') as pdf: with open(media_path(filename_pdf), 'rb') as pdf:
response = HttpResponse(FileWrapper(pdf))#, content='application/pdf') response = HttpResponse(FileWrapper(pdf))#, content='application/pdf')
response['Content-Type'] = 'application/pdf' response['Content-Type'] = 'application/pdf'
response['Content-Disposition'] = 'attachment; filename='+filename_pdf response['Content-Disposition'] = 'attachment; filename='+filename_pdf
@ -176,8 +177,7 @@ class MemberListAdmin(admin.ModelAdmin):
"""Generates a short note for the jugendleiter""" """Generates a short note for the jugendleiter"""
for memberlist in queryset: for memberlist in queryset:
# unique filename # unique filename
filename = memberlist.name + "_note_" +\ filename = memberlist.name + "_note_" + datetime.today().strftime("%d_%m_%Y")
datetime.today().strftime("%d_%m_%Y")
filename = filename.replace(' ', '_') filename = filename.replace(' ', '_')
filename_tex = filename + '.tex' filename_tex = filename + '.tex'
filename_pdf = filename + '.pdf' filename_pdf = filename + '.pdf'
@ -215,11 +215,11 @@ class MemberListAdmin(admin.ModelAdmin):
table_qualities += line table_qualities += line
# copy template # copy template
shutil.copy('media/memberlists/membernote_template.tex', shutil.copy(media_path('membernote_template.tex'),
'media/memberlists/' + filename_tex) media_path(filename_tex))
# read in template # read in template
with open('media/memberlists/' + filename_tex, 'r') as f: with open(media_path(filename_tex), 'r', encoding='utf-8') as f:
template_content = f.read() template_content = f.read()
# adapt template # adapt template
@ -242,12 +242,12 @@ class MemberListAdmin(admin.ModelAdmin):
template_content = template_content.replace('TABLE', table) template_content = template_content.replace('TABLE', table)
# write adapted template to file # write adapted template to file
with open('media/memberlists/' + filename_tex, 'w') as f: with open(media_path(filename_tex), 'w', encoding='utf-8') as f:
f.write(template_content) f.write(template_content)
# compile using pdflatex # compile using pdflatex
oldwd = os.getcwd() oldwd = os.getcwd()
os.chdir('media/memberlists') os.chdir(media_dir())
subprocess.call(['pdflatex', filename_tex]) subprocess.call(['pdflatex', filename_tex])
time.sleep(1) time.sleep(1)
@ -261,7 +261,7 @@ class MemberListAdmin(admin.ModelAdmin):
os.chdir(oldwd) os.chdir(oldwd)
# provide the user with the resulting pdf file # provide the user with the resulting pdf file
with open('media/memberlists/'+filename_pdf, 'rb') as pdf: with open(media_path(filename_pdf), 'rb') as pdf:
response = HttpResponse(FileWrapper(pdf)) response = HttpResponse(FileWrapper(pdf))
response['Content-Type'] = 'application/pdf' response['Content-Type'] = 'application/pdf'
response['Content-Disposition'] = 'attachment; filename=' + filename_pdf response['Content-Disposition'] = 'attachment; filename=' + filename_pdf
@ -331,3 +331,11 @@ admin.site.register(Group, GroupAdmin)
admin.site.register(MemberList, MemberListAdmin) admin.site.register(MemberList, MemberListAdmin)
admin.site.register(Klettertreff, KlettertreffAdmin) admin.site.register(Klettertreff, KlettertreffAdmin)
admin.site.register(ActivityCategory, ActivityCategoryAdmin) admin.site.register(ActivityCategory, ActivityCategoryAdmin)
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")

Loading…
Cancel
Save