Seite 1 von 1

Python relatorio - Odt Dateien erstellen

Verfasst: Freitag 17. April 2015, 09:11
von martinjo
Hallo,

ich habe eine Liste, die ich gerne in ein LibreOffice / OpenOffice Dokument bringen möchte. Dazu habe ich mir relatorio angesehen (dazu python-relatorio und python-pycha installiert)

Dann habe ich mich an diese Anleitung bzw. dieses Quick Tutorial gehalten: https://code.google.com/p/python-relato ... ickExample.


Leider bekomme ich immer nur folgende Meldung beim ausführen des Skriptes:

Code: Alles auswählen

Traceback (most recent call last):
  File "relatorio_example.py", line 4, in <module>
    basic = Template(source=None, filepath='template.odt')
  File "/usr/lib/python2.7/dist-packages/relatorio/templates/opendocument.py", line 245, in __init__
    encoding, lookup, allow_exec)
  File "/usr/lib/python2.7/dist-packages/genshi/template/markup.py", line 67, in __init__
    allow_exec=allow_exec)
  File "/usr/lib/python2.7/dist-packages/genshi/template/base.py", line 417, in __init__
    source = BytesIO(source)
TypeError: must be string or buffer, not None
python-relatorio 0.6.0
python-pycha 0.7.0


Leider komme ich nicht weiter, evtl. hat ja einer ein funktionierendes Beispiel oder kann bestätigen ob das oben verlinkte Beispiel funktioniert oder nicht funktioniert.
Danke

Re: Python relatorio - Odt Dateien erstellen

Verfasst: Freitag 17. April 2015, 10:31
von skirnir
Ist das Version 0.6.1?
Ich hatte vor einigen Wochen dasselbe Problem.
Auch bei mir funktionierten die mitgelieferten Beispiele nicht out of the Box.

Mit einem Downgrade auf 0.5.6 funktionierte es dann.

Inzwischen benutze ich aber secretary.
Das benutzt unter der Haube Jinja2, so dass mir die Template-Syntax eher entgegen kommt und vor allem funktionierte es einfach.

Re: Python relatorio - Odt Dateien erstellen

Verfasst: Freitag 17. April 2015, 13:38
von martinjo
Danke, werde ich mir mal anschauen.

Re: Python relatorio - Odt Dateien erstellen

Verfasst: Dienstag 21. April 2015, 11:35
von martinjo
Habe es jetzt doch noch mal mit relatorio versucht. Auch mit Version 0.5.6 bekomme ich die selbe Fehlermeldung.
Er mag das "None" nicht bei

Code: Alles auswählen

basic = Template(source=None, filepath='basic.odt')
Ich finde es immer sehr schade, wenn man nicht mal den Beispielcode zum laufen bekommt.

Re: Python relatorio - Odt Dateien erstellen

Verfasst: Samstag 2. Mai 2015, 12:21
von martinjo
Auch nach ausgiebigem testen mit verschiedenen Versionen habe ich es leider nicht zum laufen bekommen. Hier noch Mal ein letzter verzweifelter Hilferuf nach einem Codebeispiel :-)

Re: Python relatorio - Odt Dateien erstellen

Verfasst: Samstag 2. Mai 2015, 13:06
von darktrym
Ersetze mal source=None durch source="".

Re: Python relatorio - Odt Dateien erstellen

Verfasst: Samstag 2. Mai 2015, 15:17
von martinjo
Danke! Das bringt mich schon mal gefühlt sehr viel weiter.

Es gibt eine neue Fehlermeldung:

Code: Alles auswählen

genshi.template.eval.UndefinedError: {'status': 'late', 'customer': {'name': 'John Bonham', 'address': {'city': 'Montreux', 'street': 'Smirnov street', 'zip': 1000}}, 'lines': [{'item': {'price': 10.34, 'name': 'Vodka 70cl', 'reference': 'VDKA-001'}, 'amount': 72.38, 'quantity': 7}, {'item': {'price': 13.46, 'name': 'Cognac 70cl', 'reference': 'CGNC-067'}, 'amount': 161.52, 'quantity': 12}, {'item': {'price': 0.4, 'name': 'Sparkling water 25cl', 'reference': 'WATR-007'}, 'amount': 0.4, 'quantity': 1}, {'item': {'price': -20, 'name': 'Good customer rebate', 'reference': 'BONM-001'}, 'amount': -20, 'quantity': 1}], 'id': 'MZY-20080703'} has no member named "CUSTOMER"
meine run.py
from relatorio.templates.opendocument import Template
from data import bonham_invoice
basic = Template(source="", filepath='basic.odt')
basic_generated = basic.generate(x=bonham_invoice).render()
file('bonham_basic.odt', 'wb').write(basic_generated.getvalue())
meine data.py

Code: Alles auswählen

class Invoice(dict):
    @property
    def total(self):
        return sum(l['amount'] for l in self['lines'])

    @property
    def vat(self):
        return self.total * 0.21

bonham_invoice = \
    Invoice(customer={'name': 'John Bonham',
                      'address': {'street': 'Smirnov street',
                                  'zip': 1000,
                                  'city': 'Montreux'}},
            lines=[{'item': {'name': 'Vodka 70cl',
                             'reference': 'VDKA-001',
                             'price': 10.34},
                    'quantity': 7,
                    'amount': 7*10.34},
                   {'item': {'name': 'Cognac 70cl',
                             'reference': 'CGNC-067',
                             'price': 13.46},
                    'quantity': 12,
                    'amount': 12*13.46},
                   {'item': {'name': 'Sparkling water 25cl',
                             'reference': 'WATR-007',
                             'price': 0.4},
                    'quantity': 1,
                    'amount': 0.4},
                   {'item': {'name': 'Good customer rebate',
                             'reference': 'BONM-001',
                             'price': -20},
                    'quantity': 1,
                    'amount': -20},
                  ],
            id='MZY-20080703',
            status='late')

Re: Python relatorio - Odt Dateien erstellen

Verfasst: Samstag 2. Mai 2015, 15:20
von martinjo
Nun lag es es nur noch daran, dass auch die Variablen in der Vorlagendatei auch korrekte Groß- und Kleinschreibung achten. Dies ist in der Beispieldatei leider auch falsch.

Danke für die Hilfe !