def GET(self): """ All the variables from the query_string, wrapped by MultiDict. """ h = MultiDict() for k, v in parse_qs(self.query_string).items(): for val in v: h.add(k, val) return h
def files(self): """ The User upload file(is a UserFile object), wrapped by MultiDict. It should note that this attribute should be called with `yield from` syntax, such as: request_files = yield from request.files """ if not self._files: post = yield from self._read_post() self._files = MultiDict.from_lists(filter(lambda x: isinstance(x[1], UserFile), post.allitems())) return self._files
def forms(self): """ All the variables except the user upload file, wrapped by MultiDict. It should note that this attribute should be called with `yield from` syntax, such as: request_forms = yield from request.forms """ if not self._forms: post = yield from self._read_post() self._forms = MultiDict.from_lists(filter(lambda x: not isinstance(x[1], UserFile), post.allitems())) return self._forms
def params(self): """ All variables from query_string and request form, wrapped by MultiDict. It should note that this attribute should be called with `yield from` syntax, such as: request_params = yield from request.params """ if not self._params: params = MultiDict.from_lists(self.GET.allitems()) post = yield from self._read_post() for k, v in post.allitems(): params.add(k, v) self._params = params return self._params
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
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'}