Changeset 18:432718b59587
- Timestamp:
- 07/17/08 00:11:51 (5 years ago)
- Branch:
- default
- Files:
-
- 6 modified
-
relatorio.egg-info/entry_points.txt (modified) (1 diff)
-
relatorio/reporting.py (modified) (2 diffs)
-
relatorio/templates/odt.py (modified) (3 diffs)
-
relatorio/tests/test.odt (modified) (previous)
-
relatorio/tests/test_api.py (modified) (5 diffs)
-
relatorio/tests/test_odt.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
relatorio.egg-info/entry_points.txt
r16 r18 1 1 [relatorio.templates.engines] 2 2 oo.org = relatorio.templates.odt:Template 3 trml = relatorio.templates.trml:Template4 3 pdf = relatorio.templates.pdf:Template 5 4 text = genshi.template:TextTemplate -
relatorio/reporting.py
r16 r18 19 19 ############################################################################### 20 20 21 __revision__ = "$Id: reporting.py 1 7 2008-07-15 10:26:58Z nicoe $"21 __revision__ = "$Id: reporting.py 19 2008-07-17 00:11:51Z nicoe $" 22 22 __metaclass__ = type 23 23 24 24 import os, sys 25 25 import warnings 26 import cStringIO26 from cStringIO import StringIO 27 27 28 28 import pkg_resources … … 104 104 self.data_factory = factory 105 105 self.tmpl_loader = loader 106 self.filters = [] 106 107 107 108 def __call__(self, obj, **kwargs): 108 109 template = self.tmpl_loader.load(self.fpath, self.mimetype) 109 110 data = self.data_factory(obj, **kwargs) 110 report = template.generate(**data) 111 if not isinstance(report, (cStringIO.InputType, cStringIO.OutputType)): 112 report = StringIO(str(report)) 113 return report 111 return template.generate(**data).filter(*self.filters) 114 112 115 113 def __repr__(self): -
relatorio/templates/odt.py
r13 r18 19 19 ############################################################################### 20 20 21 __revision__ = "$Id: odt.py 1 4 2008-07-14 22:09:55Z nicoe $"21 __revision__ = "$Id: odt.py 19 2008-07-17 00:11:51Z nicoe $" 22 22 __metaclass__ = type 23 23 … … 29 29 30 30 import lxml.etree 31 import genshi 31 32 from genshi.template import Template as GenshiTemplate, MarkupTemplate 32 33 … … 179 180 180 181 def generate(self, *args, **kwargs): 181 new_oo = StringIO() 182 inzip = zipfile.ZipFile(self.filepath) 183 outzip = zipfile.ZipFile(new_oo, 'w') 184 185 kwargs['make_href'] = ImageHref(outzip) 186 content = str(self.content_template.generate(*args, **kwargs)) 187 188 for f in inzip.infolist(): 182 serializer = OOSerializer(self.filepath) 183 kwargs['make_href'] = ImageHref(serializer.outzip) 184 content_stream = self.content_template.generate(*args, **kwargs) 185 186 return OOStream(content_stream, serializer) 187 188 189 class OOStream(genshi.core.Stream): 190 191 def __init__(self, content_stream, serializer): 192 self.events = content_stream 193 self.serializer = serializer 194 195 def render(self, method=None, encoding='utf-8', out=None, **kwargs): 196 return self.serializer(self.events) 197 198 def serialize(self, method, **kwargs): 199 return self.render(method, **kwargs) 200 201 def __or__(self, function): 202 return OOStream(self.events | function, self.serializer) 203 204 205 class OOSerializer: 206 207 def __init__(self, oo_path): 208 self.inzip = zipfile.ZipFile(oo_path) 209 self.new_oo = StringIO() 210 self.outzip = zipfile.ZipFile(self.new_oo, 'w') 211 212 def __call__(self, stream): 213 for f in self.inzip.infolist(): 189 214 if f.filename == 'content.xml': 190 215 s = StringIO() 191 s.write(str(content)) 192 outzip.writestr('content.xml', s.getvalue()) 193 else: 194 outzip.writestr(f, inzip.read(f.filename)) 195 inzip.close() 196 outzip.close() 197 198 return new_oo 199 216 s.write(str(stream)) 217 self.outzip.writestr('content.xml', s.getvalue()) 218 else: 219 self.outzip.writestr(f, self.inzip.read(f.filename)) 220 self.inzip.close() 221 self.outzip.close() 222 223 return self.new_oo -
relatorio/tests/test_api.py
r0 r18 19 19 ############################################################################### 20 20 21 __revision__ = "$Id: test_api.py 1 2008-07-04 14:31:52Z nicoe $"21 __revision__ = "$Id: test_api.py 19 2008-07-17 00:11:51Z nicoe $" 22 22 23 23 import os … … 27 27 DefaultFactory, _absolute) 28 28 29 29 30 class StubObject(object): 30 31 … … 32 33 for key, val in kwargs.iteritems(): 33 34 setattr(self, key, val) 35 36 def setup(): 37 MIMETemplateLoader.load_template_engines() 34 38 35 39 … … 74 78 "Testing the report generation" 75 79 a = StubObject(name='OpenHex') 76 eq_(self.report(a). getvalue(), 'Hello OpenHex.\n')80 eq_(self.report(a).render(), 'Hello OpenHex.\n') 77 81 78 82 def test_factory(self): … … 92 96 93 97 a = StubObject(name='Foo') 94 eq_(report(a, time="One o'clock"). getvalue(),98 eq_(report(a, time="One o'clock").render(), 95 99 "Hi Foo,\nIt's One o'clock to 2 !\n") 96 eq_(report(a, time="One o'clock", y=4). getvalue(),100 eq_(report(a, time="One o'clock", y=4).render(), 97 101 "Hi Foo,\nIt's One o'clock to 5 !\n") 98 102 assert_raises(TypeError, report, a) -
relatorio/tests/test_odt.py
r0 r18 1 # -*- encoding: utf-8 -*- 1 2 ############################################################################### 2 3 # … … 19 20 ############################################################################### 20 21 21 __revision__ = "$Id: test_odt.py 1 2008-07-04 14:31:52Z nicoe $"22 __revision__ = "$Id: test_odt.py 19 2008-07-17 00:11:51Z nicoe $" 22 23 23 24 import os … … 27 28 from nose.tools import * 28 29 from genshi.template import MarkupTemplate 30 from genshi.filters import Translator 29 31 30 from mimetypes.odt import OOTemplate, NS 32 from templates.odt import Template, NS 33 34 def pseudo_gettext(string): 35 catalog = {'Mes collègues sont:': 'My collegues are:', 36 'Bonjour,': 'Hello,', 37 'Je suis un test de templating en odt.': 38 'I am an odt templating test', 39 'Felix da housecat': unicode('Félix le chat de la maison', 40 'utf8'), 41 } 42 return catalog.get(string, string) 31 43 32 44 … … 36 48 thisdir = os.path.dirname(__file__) 37 49 filepath = os.path.join(thisdir, 'test.odt') 38 self.oot = OOTemplate(file(filepath), filepath) 50 self.oot = Template(file(filepath), filepath) 51 self.data = {'first_name': 'Trente', 52 'last_name': unicode('Møller', 'utf8'), 53 'ville': unicode('Liège', 'utf8'), 54 'friends': [{'first_name': 'Camille', 55 'last_name': 'Salauhpe'}, 56 {'first_name': 'Mathias', 57 'last_name': 'Lechat'}], 58 'hobbies': ['Music', 'Dancing', 'DJing'], 59 'animals': ['Felix da housecat', 'Dog eat Dog']} 39 60 40 61 def test_init(self): … … 50 71 eq_(root_parsed[0].attrib['{http://genshi.edgewall.org/}replace'], 51 72 'foo') 73 74 def test_generate(self): 75 stream = self.oot.generate(**self.data) 76 rendered = stream.events.render() 77 assert 'Bonjour,' in rendered 78 assert 'Trente' in rendered 79 assert 'Møller' in rendered 80 assert 'Dog eat Dog' in rendered 81 assert 'Felix da housecat' in rendered 82 83 def test_filters(self): 84 stream = self.oot.generate(**self.data) 85 translated = stream.filter(Translator(pseudo_gettext)) 86 content_xml = translated.events.render() 87 assert "Hello," in content_xml 88 assert "I am an odt templating test" in content_xml 89 assert 'Felix da housecat' not in content_xml 90 assert 'Félix le chat de la maison' in content_xml
