Seite 1 von 1

bottle vs. wtforms

Verfasst: Donnerstag 25. März 2010, 18:43
von .robert
Hi,

ich habe hier folgenden Beispielcode:

Code: Alles auswählen

#!/usr/bin/env python

from bottle import request, route, run
from wtforms import Form, TextField, SubmitField

class TestForm(Form):
    content = TextField('Name')
    submit = SubmitField('Los')

@route('/')
def index():
    form = TestForm()
    return "<form action='/' method='POST'>"+form.content()+form.submit()+"</form>"

@route('/', method='POST')
def add():
    form = TestForm(request.POST)
    return "Sieg!"

run(reloader=True)
Allerdings bekomme ich immer die Fehlermeldung
Unhandled Exception: TypeError("formdata should be a multidict-type wrapper that supports the 'getlist' method",)
wenn ich das Formular absende.

Python 2.6.4, bottle 0.6.4, wtforms 0.5

Kann mir das jemand erklären? Und vor allem helfen dass zu beheben?

Schon mal grüße,
r.

Verfasst: Donnerstag 25. März 2010, 18:58
von Hyperion
Also bei mir funzt es!

Versuche doch mal bottle in Version 0.7.

Wobei ich es mit einer rel. aktuellen git Version getestet habe.

Edit: ein debug(True) wäre sinnvoll gewesen... dann hätte man sehen können, wo genau der Fehler geworfen wird.

Verfasst: Donnerstag 25. März 2010, 19:05
von .robert
Jau, mit 0.7 funzt es. Danke!

Aber der Vollständigkeit halber

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/robert/Projects/lab/formtest/lib/python2.6/site-packages/bottle-0.6.4-py2.6.egg/bottle.py", line 309, in __call__
    output = handler(**args)
  File "app.py", line 17, in add
    form = TestForm(request.POST)
  File "build/bdist.linux-x86_64/egg/wtforms/form.py", line 161, in __call__
    return type.__call__(cls, *args, **kwargs)
  File "build/bdist.linux-x86_64/egg/wtforms/form.py", line 214, in __init__
    self.process(formdata, obj, **kwargs)
  File "build/bdist.linux-x86_64/egg/wtforms/form.py", line 85, in process
    raise TypeError("formdata should be a multidict-type wrapper that supports the 'getlist' method")
TypeError: formdata should be a multidict-type wrapper that supports the 'getlist' method

Verfasst: Donnerstag 25. März 2010, 19:08
von Hyperion
Na also ;-)

Vermutlich fehlte dem MultiDict Datentypen bei bottle eben eine Funktionalität...

@all: Was genau meint denn diese Meldung? Wo findet man eine Referenz zu dieser "getlist"-Funktionalität?

Verfasst: Donnerstag 25. März 2010, 19:45
von jbs
http://bitbucket.org/simplecodes/wtform ... ms/form.py

Code: Alles auswählen

 if formdata is not None and not hasattr(formdata, 'getlist'):
            if hasattr(formdata, 'getall'):
                formdata = WebobInputWrapper(formdata)
            else:
                raise TypeError("formdata should be a multidict-type wrapper that supports the 'getlist' method")
Das sieht nach dem Übeltäter aus. Bottles Mutlidict hat ein getall ;)

Verfasst: Donnerstag 25. März 2010, 19:55
von Hyperion
jbs hat geschrieben: Das sieht nach dem Übeltäter aus. Bottles Mutlidict hat ein getall ;)
Danke Dir für die Mühe. Aber in Version 0.6.4 gab es das noch nicht - also war bottle hier der Übeltäter :-)

Verfasst: Donnerstag 25. März 2010, 20:03
von jbs
Ich meinte mit Übeltäter eher exception-Werfer :)

Verfasst: Donnerstag 25. März 2010, 20:41
von .robert
das "raise ..." hatte ich auch gefunden, aber ich dachte der Fehler liegt bei mir ;)

Dann halt Bottle 0.7...