コード例 #1
0
    def _gen_request(self,
                     method,
                     url,
                     params=utils.NoDefault,
                     headers=None,
                     extra_environ=None,
                     status=None,
                     upload_files=None,
                     expect_errors=False,
                     content_type=None):
        """
        Do a generic request.
        """

        environ = self._make_environ(extra_environ)

        inline_uploads = []

        # this supports OrderedDict
        if isinstance(params, dict) or hasattr(params, 'items'):
            params = list(params.items())

        if isinstance(params, (list, tuple)):
            inline_uploads = [
                v for (k, v) in params
                if isinstance(v, (forms.File, forms.Upload))
            ]

        if len(inline_uploads) > 0:
            content_type, params = self.encode_multipart(
                params, upload_files or ())
            environ['CONTENT_TYPE'] = content_type
        else:
            params = utils.encode_params(params, content_type)
            if upload_files or \
                (content_type and
                 to_bytes(content_type).startswith(b'multipart')):
                params = urlparse.parse_qsl(params, keep_blank_values=True)
                content_type, params = self.encode_multipart(
                    params, upload_files or ())
                environ['CONTENT_TYPE'] = content_type
            elif params:
                environ.setdefault('CONTENT_TYPE',
                                   str('application/x-www-form-urlencoded'))

        if content_type is not None:
            environ['CONTENT_TYPE'] = content_type
        environ['REQUEST_METHOD'] = str(method)
        url = str(url)
        url = self._remove_fragment(url)
        req = self.RequestClass.blank(url, environ)
        if isinstance(params, text_type):
            params = params.encode(req.charset or 'utf8')
        req.environ['wsgi.input'] = BytesIO(params)
        req.content_length = len(params)
        if headers:
            req.headers.update(headers)
        return self.do_request(req, status=status, expect_errors=expect_errors)
コード例 #2
0
ファイル: app.py プロジェクト: arthru/webtest
    def _gen_request(self, method, url, params=utils.NoDefault, headers=None,
                     extra_environ=None, status=None, upload_files=None,
                     expect_errors=False, content_type=None):
        """
        Do a generic request.
        """

        if method == 'DELETE' and params is not utils.NoDefault:
            warnings.warn(('You are not supposed to send a body in a '
                           'DELETE request. Most web servers will ignore it'),
                           lint.WSGIWarning)

        environ = self._make_environ(extra_environ)

        inline_uploads = []

        # this supports OrderedDict
        if isinstance(params, dict) or hasattr(params, 'items'):
            params = list(params.items())

        if isinstance(params, (list, tuple)):
            inline_uploads = [v for (k, v) in params
                              if isinstance(v, (forms.File, forms.Upload))]

        if len(inline_uploads) > 0:
            content_type, params = self.encode_multipart(
                params, upload_files or ())
            environ['CONTENT_TYPE'] = content_type
        else:
            params = utils.encode_params(params, content_type)
            if upload_files or \
                (content_type and
                 to_bytes(content_type).startswith(b'multipart')):
                params = cgi.parse_qsl(params, keep_blank_values=True)
                content_type, params = self.encode_multipart(
                    params, upload_files or ())
                environ['CONTENT_TYPE'] = content_type
            elif params:
                environ.setdefault('CONTENT_TYPE',
                                   str('application/x-www-form-urlencoded'))

        if content_type is not None:
            environ['CONTENT_TYPE'] = content_type
        environ['REQUEST_METHOD'] = str(method)
        url = str(url)
        url = self._remove_fragment(url)
        req = self.RequestClass.blank(url, environ)
        if isinstance(params, text_type):
            params = params.encode(req.charset or 'utf8')
        req.environ['wsgi.input'] = BytesIO(params)
        req.content_length = len(params)
        if headers:
            req.headers.update(headers)
        return self.do_request(req, status=status,
                               expect_errors=expect_errors)
コード例 #3
0
ファイル: test_utils.py プロジェクト: arthru/webtest
 def test_encode_params_charset_utf8(self):
     # charset is using inconsistent casing on purpose, it should still work
     self.assertEquals(utils.encode_params({'f': '€'}, ' CHARset=uTF-8; '),
                       'f=%E2%82%AC')
コード例 #4
0
ファイル: test_utils.py プロジェクト: arthru/webtest
 def test_encode_params_no_charset(self):
     # no content_type at all
     self.assertEquals(utils.encode_params({'foo': 'bar'}, None), 'foo=bar')
     # content_type without "charset=xxxx"
     self.assertEquals(utils.encode_params({'foo': 'bar'}, 'ba'), 'foo=bar')
コード例 #5
0
ファイル: test_utils.py プロジェクト: arthru/webtest
 def test_encode_params_dict_or_list(self):
     self.assertEquals(utils.encode_params({'foo': 'bar'}, None),
                       utils.encode_params([('foo', 'bar')], None))
コード例 #6
0
ファイル: test_utils.py プロジェクト: arthru/webtest
 def test_encode_params_NoDefault(self):
     self.assertEquals(utils.encode_params(utils.NoDefault, None), '')
コード例 #7
0
ファイル: test_utils.py プロジェクト: arthru/webtest
 def test_encode_params_None(self):
     self.assertEquals(utils.encode_params(None, None), None)
コード例 #8
0
 def test_encode_params_charset_utf8(self):
     # charset is using inconsistent casing on purpose, it should still work
     self.assertEquals(utils.encode_params({'f': '€'}, ' CHARset=uTF-8; '),
                       'f=%E2%82%AC')
コード例 #9
0
 def test_encode_params_no_charset(self):
     # no content_type at all
     self.assertEquals(utils.encode_params({'foo': 'bar'}, None), 'foo=bar')
     # content_type without "charset=xxxx"
     self.assertEquals(utils.encode_params({'foo': 'bar'}, 'ba'), 'foo=bar')
コード例 #10
0
 def test_encode_params_dict_or_list(self):
     self.assertEquals(utils.encode_params({'foo': 'bar'}, None),
                       utils.encode_params([('foo', 'bar')], None))
コード例 #11
0
 def test_encode_params_NoDefault(self):
     self.assertEquals(utils.encode_params(utils.NoDefault, None), '')
コード例 #12
0
 def test_encode_params_None(self):
     self.assertEquals(utils.encode_params(None, None), None)