def test_multi_dict(cgi_filed): mdict = MultiDict({'name': 'jack', 'age': 22}, country='US') assert len(mdict) == 3 mdict.add('name', 'rose') assert mdict['name'] == mdict.get('name') == 'rose' assert mdict.get('age') == 22 assert mdict.get('age', side_func=lambda v: v + 1) == 23 assert mdict.get('inexistence', default='default') == 'default' assert len(mdict.getall('name')) == 2 assert mdict.getall('inexistence') == [] items = mdict.allitems() assert len(items) == 4 assert len(MultiDict.from_lists(items)) == 3 mdict = MultiDict.from_cgi_filedStoreage(cgi_filed) assert mdict['cgi'].headers == {'k': 'v'}
def _read_post(self): """ Read All the variables from a form request and return a MultiDict. -- If your Pyhon version is below 3.4.4, you should note this issuse (https://bugs.python.org/issue23801) at cgi.FieldStorage.-- """ if self._post: return self._post if not (self.method in self.FORM_METHOD and self.mine_type in self.FORM_CTYPE): self._post = MultiDict() else: body = yield from self._get_body() fenv = self.env.copy() fenv["QUERY_STRING"] = "" fs = cgi.FieldStorage(fp=io.BytesIO(body), environ=fenv, keep_blank_values=True, encoding=self.charset) self._post = MultiDict.from_cgi_filedStoreage(fs) return self._post