Python relatorio - Odt Dateien erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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
skirnir
User
Beiträge: 33
Registriert: Sonntag 25. Januar 2015, 10:59

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.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Danke, werde ich mir mal anschauen.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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 :-)
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Ersetze mal source=None durch source="".
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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')
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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 !
Antworten