def from_postdata(cls, headers, post_data): if not MultipartContainer.is_multipart(headers): raise ValueError('No multipart content-type header.') environ = {'REQUEST_METHOD': 'POST'} try: fs = cgi.FieldStorage(fp=StringIO.StringIO(post_data), headers=headers.to_dict(), environ=environ) except ValueError: raise ValueError('Failed to create MultipartContainer.') else: # Please note that the FormParameters is just a container for # the information. # # When the FuzzableRequest is sent the framework calls get_data() # which returns a string version of this object, properly encoded # using multipart/form-data # # To make sure the web application properly decodes the request, we # also include the headers in get_headers() which include the # boundary form_params = FormParameters() for key in fs.list: if key.filename is None: form_params.add_input([('name', key.name), ('type', 'text'), ('value', key.file.read())]) else: form_params.set_file_name(key.name, key.filename) form_params.add_file_input([('name', key.name)]) return cls(form_params)
def from_postdata(cls, headers, post_data): if not MultipartContainer.is_multipart(headers): raise ValueError('No multipart content-type header.') environ = {'REQUEST_METHOD': 'POST'} try: fs = cgi.FieldStorage(fp=StringIO.StringIO(post_data), headers=headers.to_dict(), environ=environ) except ValueError: raise ValueError('Failed to create MultipartContainer.') else: # Please note that the FormParameters is just a container for # the information. # # When the FuzzableRequest is sent the framework calls get_data() # which returns a string version of this object, properly encoded # using multipart/form-data # # To make sure the web application properly decodes the request, we # also include the headers in get_headers() which include the # boundary form_params = FormParameters() for key in fs.list: if key.filename is None: form_params.add_input([('name', key.name), ('type', 'text'), ('value', key.file.read())]) else: form_params.set_file_name(key.name, key.filename) form_params.add_file_input([('name', key.name)]) return cls(form_params)
def test_dc_from_form_params_with_files(self): form_params = FormParameters() form_params.add_field_by_attr_items([('name', 'b'), ('type', 'file')]) form_params.add_field_by_attr_items([('name', 'a'), ('type', 'text'), ('value', 'bcd')]) form_params.set_file_name('b', 'hello.txt') mpdc = dc_from_form_params(form_params) self.assertIsInstance(mpdc, MultipartContainer) self.assertEqual(mpdc.get_file_vars(), ['b']) self.assertEqual(mpdc['a'], ['bcd'])
def test_dc_from_form_params_with_files(self): form_params = FormParameters() form_params.set_file_name('b', 'hello.txt') form_params.add_file_input([('name', 'b')]) form_params.add_input([('name', 'a'), ('type', 'text'), ('value', 'bcd')]) mpdc = dc_from_form_params(form_params) self.assertIsInstance(mpdc, MultipartContainer) self.assertEqual(mpdc.get_file_vars(), ['b']) self.assertEqual(mpdc['a'], ['bcd'])
def test_multipart_from_form_params(self): form_params = FormParameters() form_params.set_file_name('b', 'hello.txt') form_params.add_file_input([('name', 'b')]) form_params.add_input([('name', 'a'), ('type', 'text'), ('value', 'bcd')]) mpc = MultipartContainer(form_params) self.assertIsInstance(mpc, MultipartContainer) self.assertEqual(mpc['a'], ['bcd']) self.assertEqual(mpc.get_file_vars(), ['b']) self.assertEqual(mpc.get_parameter_type('a'), 'text') self.assertEqual(mpc.get_parameter_type('b'), 'file') self.assertEqual(mpc.get_file_name('b'), 'hello.txt')
def test_multipart_from_form_params(self): form_params = FormParameters() form_params.add_field_by_attr_items([('name', 'b'), ('type', 'file')]) form_params.add_field_by_attr_items([('name', 'a'), ('type', 'text'), ('value', 'bcd')]) form_params.set_file_name('b', 'hello.txt') mpc = MultipartContainer(form_params) self.assertIsInstance(mpc, MultipartContainer) self.assertEqual(mpc['a'], ['bcd']) self.assertEqual(mpc.get_file_vars(), ['b']) self.assertEqual(mpc.get_parameter_type('a'), 'text') self.assertEqual(mpc.get_parameter_type('b'), 'file') self.assertEqual(mpc.get_file_name('b'), 'hello.txt')