title: Unpacking Argument Lists and Instantiating WTForms objects from web.py
body: <p>After a bit of searching, I've found that it's possible to instantiate a WTForms object in web.py using the following code:</p>
  
  <pre><code>form = my_form(**web.input())
  </code></pre>
  
  <p>web.input() returns a "dictionary-like" web.storage object, but without the double asterisks WTForms will raise an exception:</p>
  
  <pre><code>TypeError: formdata should be a multidict-type wrapper that supports the 'getlist' method
  </code></pre>
  
  <p>From the Python documentation I understand that the two asterisks are used to unpack a dictionary of named arguments. That said, I'm still a bit confused about exactly what is going on. What makes the web.storage object returned by web.input() "dictionary-like" enough that it can be unpacked by ** but <em>not</em> "dictionary-like" enough that it can be passed as-is to the WTForms constructor?</p>
  
  <p>I know that this is an extremely basic question, but any advice to help a novice programmer would be greatly appreciated!</p>