[de] request.form MultiDict zum zweiten...

1 view
Skip to first unread message

jedie

unread,
Jul 6, 2006, 8:08:52 AM7/6/06
to colubrid-users
Ich hab mal wieder was Programmiert und wieder über das selbe komische
verhalten der MultiDict gestolpert, wie bei
http://groups.google.com/group/colubrid-users/browse_thread/thread/4296d69a97c30b25
beschrieben.

Ich finde es nicht gut, das repr {'delete_id': [u'6', u'15']} ausgibt.
Ich bekomme mit form['delete_id'] nunmal keine normale Liste, wie man
meinen könnte, sondern nur die letzte Position in der Liste :(

Ich finde das repr sollte unbedingt abgeändert werden! Sonst stolpert
man da immer wieder drüber!

Wie wäre es z.B. mit:
{'delete_id': MultiDict(u'6', u'15')}
oder sowas. Dann weiß man das es keine "normale" Liste ist. Ob man
dann aber weiß, das man mit .getlist() arbeiten muß ist eine andere
Sache. Aber zumindest kann man damit rechnen, das form['delete_id']
keine Liste ist.

Mfg.

Jens

armin.r...@active-4.com

unread,
Jul 6, 2006, 5:55:53 PM7/6/06
to colubrid-users
Hoi,

Vorschlag für einen besseren __repr__ der trotzdem alles anzeigt?

Regards,
Armin

jedie

unread,
Jul 7, 2006, 3:23:29 AM7/7/06
to colubrid-users
armin.r...@active-4.com wrote:
> Vorschlag für einen besseren __repr__ der trotzdem alles anzeigt?

Tja ich weiß nicht recht wie man es richtig umsetzten kann. Eine dumme
Lösung, aber wenigstens etwas, wäre das hier:

def __repr__(self):
return "MultiDict(%s)" % dict.__repr__(self)

Bringst statt das:

{'delete_id': [u'15', u'16'], 'make': [u'make'], 'disallow':
[u'disallow']}

halt das hier:

MultiDict({'delete_id': [u'15', u'16'], 'make': [u'make'], 'disallow':
[u'disallow']})

Schon ein wenig besser... Optimal wäre aber IMHO sowas:

{'delete_id': MultiDict(u'15', u'16'), 'make': [u'make'], 'disallow':
[u'disallow']}

Wobei es ja nicht so ganz richtig ist ;-/ Denn die Zahlen sind ja nicht
das MultiDict, sondern die gesammte Zeile... Hmmm... Vielleicht sowas:

MultiDict({'delete_id': MultiDictList(u'15', u'16'), 'make': [u'make'],
'disallow': [u'disallow']})

Was mir dabei noch einfällt... Colubrid's Debug müßte am besten auch
angepasst werden, damit man sehen kann, das es ein MultiDict ist und
kein normales... Ich hätte da einen Vorschlag:

-----------------------------------------------------------------------------------------------------------------
class DebugRender(object):

...

def var_table(self, var):

...

# dicts
if isinstance(var, dict):
# empty dict
if not var:
return ('<table class="vars"><tr><th>no data given'
'</th></tr></table>')

items = var.items()
items.sort()

result = ['<table class="vars"><tr><th>Name'
'</th><th>Value</th></tr>']
for key, value in items:

#++++++++++++++++
# MultiDict
if hasattr(var, "getlist"):
value_list = var.getlist(key)
if len(value_list)>1:
value = "MultiDict.getlist(%s)" % value_list
#++++++++++++++++

try:
val = saxutils.escape(pprint.pformat(value))
except:
val = '?'
result.append('<tr><td class="name">%s</td><td
class="value">%s'
'</td></tr>' %
(saxutils.escape(repr(key)), val))
result.append('</table>')
return '\n'.join(result)
-----------------------------------------------------------------------------------------------------------------

Reply all
Reply to author
Forward
0 new messages