| 33 | | self.content_template = MarkupTemplate(source, filepath, filename, |
| 34 | | loader, encoding, lookup, |
| 35 | | allow_exec) |
| | 40 | if source is None: |
| | 41 | source = open(filepath, 'r').read() |
| | 42 | super(Template, self).__init__(source, filepath, filename, loader, |
| | 43 | encoding, lookup, allow_exec) |
| | 44 | def generate(self, *args, **kwargs): |
| | 45 | generated = super(Template, self).generate(*args, **kwargs) |
| | 46 | return PDFStream(generated, PDFSerializer()) |
| 43 | | def generate(self, *args, **kwargs): |
| | 49 | class PDFStream(genshi.core.Stream): |
| | 50 | |
| | 51 | def __init__(self, content_stream, serializer): |
| | 52 | self.events = content_stream |
| | 53 | self.serializer = serializer |
| | 54 | |
| | 55 | def render(self, method=None, encoding='utf-8', out=None, **kwargs): |
| | 56 | return self.serializer(self.events) |
| | 57 | |
| | 58 | def serialize(self, method, **kwargs): |
| | 59 | return self.render(method, **kwargs) |
| | 60 | |
| | 61 | def __or__(self, function): |
| | 62 | return PDFStream(self.events | function, self.serializer) |
| | 63 | |
| | 64 | |
| | 65 | class PDFSerializer: |
| | 66 | |
| | 67 | def __init__(self): |
| | 68 | self.working_dir = tempfile.mkdtemp(prefix='relatorio') |
| | 69 | self.tex_file = os.path.join(self.working_dir, 'report.tex') |
| | 70 | self.pdf_file = os.path.join(self.working_dir, 'report.pdf') |
| | 71 | self.text_serializer = genshi.output.TextSerializer() |
| | 72 | |
| | 73 | def __call__(self, stream): |
| | 74 | tex_file = open(self.tex_file, 'w') |
| | 75 | tex_file.write(_encode(self.text_serializer(stream))) |
| | 76 | tex_file.close() |
| | 77 | |
| | 78 | p = subprocess.check_call([TEXEXEC_PATH, '--purge', 'report.tex'], |
| | 79 | cwd=self.working_dir) |
| | 80 | |