444
456
(context, request), name=self.view_name)
447
def renderToFile(self, renderer, *args, **kwargs):
448
raise NotImplemented()
450
def makeReportFile(self, filename, data):
451
raise NotImplemented()
459
def renderReport(self, renderer, stream, *args, **kw):
463
def updateReport(self, renderer, report):
464
if not report.mimeType:
465
report.mimeType = getattr(renderer, 'mimetype', None)
466
if not report.mimeType:
467
report.mimeType = self.default_mimetype
468
if not report.__name__ or not report.__name__.strip():
469
report.__name__ = getattr(renderer, 'filename', None)
470
if not report.__name__ or not report.__name__.strip():
471
report.__name__ = self.default_filename
473
def renderToFile(self, renderer, *args, **kw):
474
report = ReportFile()
475
stream = report.open('w')
477
self.renderReport(renderer, stream, *args, **kw)
478
except NoReportException:
482
self.updateReport(renderer, report)
454
486
def factory(self):
480
512
class ReportTask(AbstractReportTask):
482
def renderToFile(self, renderer, *args, **kwargs):
484
#if not schooltool.app.pdf.isEnabled():
485
# return translate(renderer.pdf_disabled_text,
486
# context=renderer.request)
514
default_filename = 'report.pdf'
515
default_mimetype = 'application/pdf'
517
def renderReport(self, renderer, stream, *args, **kw):
487
518
renderer.update()
488
519
rml = renderer.render()
489
520
filename = renderer.filename
490
stream = rml2pdf.parseString(rml, filename=filename or None)
491
data = stream.getvalue()
492
pdf = self.makeReportFile(filename, data)
495
def makeReportFile(self, filename, data):
496
if not filename or not filename.strip():
497
filename = 'report.pdf'
499
pdf.mimeType = 'application/pdf'
500
pdf.__name__ = filename
501
stream = pdf.open('w')
521
pdf = rml2pdf.parseString(rml, filename=filename or None)
522
stream.write(pdf.getvalue())
507
525
class OldReportTask(ReportTask):
509
def renderToFile(self, renderer, *args, **kwargs):
511
#if not schooltool.app.pdf.isEnabled():
512
# return translate(renderer.pdf_disabled_text,
513
# context=renderer.request)
529
def renderReport(self, renderer, stream, *args, **kw):
514
530
filename, data = renderer.renderToFile()
517
pdf = self.makeReportFile(filename, data)
532
raise NoReportException()
533
self.filename = filename
536
def updateReport(self, renderer, report):
537
if not report.__name__ or not report.__name__.strip():
538
report.__name__ = self.filename
539
if not report.__name__ or not report.__name__.strip():
540
report.__name__ = self.default_filename
541
return ReportTask.updateReport(renderer, report)
544
class ArchiveReportTask(AbstractReportTask):
546
default_filename = 'report.zip'
547
default_mimetype = 'application/zip'
549
def renderReport(self, renderer, stream, *args, **kw):
551
written = renderer.render(stream, *args, **kw)
553
raise NoReportException()
521
556
class ReportDetails(object):