diff -r 000000000000 -r 40c8f766c9b8 src/cm/views/export.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/views/export.py Mon Nov 23 15:14:29 2009 +0100 @@ -0,0 +1,186 @@ +from django import forms +from django.core.urlresolvers import reverse +from django.http import HttpResponse, HttpResponseRedirect, Http404 +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.utils.translation import ugettext as _, ugettext_lazy +from cm.converters.pandoc_converters import pandoc_convert +from cm.converters.oo_converters import convert_html as oo_convert +from cm.converters.oo_converters import combine_css_body +from cm.models import Text, TextVersion, Attachment, Comment +import mimetypes +import simplejson +EXPORT2_INFOS = { +# key -> { mimetype, extension} +'s5' : {}, +'pdf' : {'mimetype': 'application/pdf', 'extension':'pdf'}, +'markdown' : {'mimetype': 'text/plain', 'extension':'mkd'}, +'odt' : {'mimetype': 'application/vnd.oasis.opendocument.text', 'extension':'odt'}, +'latex' :{'mimetype': 'text/x-tex', 'extension':'tex'}, +'html' :{'mimetype': 'text/html', 'extension':'html'}, +# raw export +'raw' : {'mimetype': 'text/plain', 'extension':'txt'} +} +def content_export2(request, content, title, content_format, format, use_pandoc, download_response): + # TODO : formats must be imported from converters + #import pdb;pdb.set_trace() + if format == 'raw' : + export_content = content + elif content_format == 'html' and format == 'html': + export_content = HTML_HEADER % content + elif content_format == 'markdown' and format == 'markdown': + export_content = content + else: + if use_pandoc : + export_content = pandoc_convert(content, content_format, format, full=True) + else : + fix_content = content + if content_format == 'html': + fix_content = combine_css_body(content, '') + export_content = oo_convert(fix_content, format) + + export_infos = EXPORT2_INFOS[format] + + if download_response: + return _response_download(export_content, title, export_infos['mimetype'], export_infos['extension']) ; + else: + return _response_write(export_content) + +def content_export_new(request, content, title, src_format, format, use_pandoc, download_response): + # TODO : formats must be imported from converters + if format == 'raw' : + export_content = content + elif src_format == format and format == 'html': + export_content = HTML_HEADER % content + else: + if use_pandoc : + export_content = pandoc_convert(content, src_format, format, full=True) + else : + fix_content = content + if src_format == 'html': + fix_content = combine_css_body(content, '') + export_content = oo_convert(fix_content, format) + + export_infos = EXPORT_INFOS[format] + format_download = export_infos[0] + + if download_response: + return _response_download(export_content, export_infos[1], export_infos[2]) ; + else: + return _response_write(export_content) + + +# read conversion chain +# execute chain +# ready to send response +# # TODO : formats must be imported from converters +# if format == 'raw' : +# export_content = content +# elif src_format == format and format == 'html': +# export_content = HTML_HEADER % content +# else: +# if use_pandoc : +# export_content = pandoc_convert(content, src_format, format, full=True) +# else : +# fix_content = content +# if src_format == 'html': +# fix_content = combine_css_body(content, '') +# export_content = oo_convert(fix_content, format) +# +## send response +# export_infos = EXPORT_INFOS[format] +# mimetype = export_infos['mimetype'] +# extension = export_infos['extension'] +# +# if download: +# return _response_download(export_content, mimetype, extension) +# else : +# return _response_write(export_content) +# +def _response_download(content, title, mimetype, extension): + response = HttpResponse(mimetype=mimetype) + file_title = title + '.' + extension + from email.header import Header + encoded_name = str(Header(file_title.encode('utf8'), charset='utf8', maxlinelen=500)) + response['Content-Disposition'] = u'attachment; filename=%s' % encoded_name + response.write(content) + return response + +def _response_write(content): + response = HttpResponse() + response.write(content) + return response + + +EXPORT_INFOS = { +# key -> [ download?, mimetype, extension] +'s5' : [False , ], +'pdf' : [True , 'application/pdf' , 'pdf'], +'markdown' : [True , 'text/plain' , 'mkd'], +'odt' : [True , 'application/vnd.oasis.opendocument.text', 'odt'], +'latex' :[True , 'text/x-tex', 'tex'], +'html' :[True , 'text/html', 'html'], +# raw export +'raw' : [True, 'text/plain', 'txt'] +} +HTML_HEADER = u""" + +
+ + +%s + +""" +EXPORT_FORMATS = EXPORT_INFOS.keys() + +def content_export(request, content, title, src_format, format, use_pandoc): + # TODO : formats must be imported from converters + if format == 'raw' : + export_content = content + elif src_format == format and format == 'html': + export_content = HTML_HEADER % content + else: + if use_pandoc : + export_content = pandoc_convert(content, src_format, format, full=True) + else : + fix_content = content + if src_format == 'html': + fix_content = combine_css_body(content, '') + export_content = oo_convert(fix_content, format) + + export_infos = EXPORT_INFOS[format] + format_download = export_infos[0] + + if format_download: + format_mimetype = export_infos[1] + format_extension = export_infos[2] + + response = HttpResponse(mimetype=format_mimetype) + file_title = title + '.' + format_extension + from email.header import Header + encoded_name = str(Header(file_title.encode('utf8'), charset='utf8', maxlinelen=500)) + response['Content-Disposition'] = u'attachment; filename=%s' % encoded_name + response.write(export_content) + return response + else: + response = HttpResponse() + response.write(export_content) + return response + + +def text_export(request, key, format): + # TODO : formats must be imported from converters + format = format.lower() + if format not in EXPORT_FORMATS: + raise Exception("Unsupported format %s (supported formats %s)" % (format, ' '.join(EXPORT_FORMATS))) + text = Text.objects.get(key=key) + text_version = text.get_latest_version() + + return content_export(request, text_version.content, text_version.title, text_version.format, format) + +def text_feed(request, key): + return "" \ No newline at end of file