コード例 #1
0
def guess_file_name_stream_type_header(args):
    """
    Guess filename, file stream, file type, file header from args.

    :param args: may be string (filepath), 2-tuples (filename, fileobj), 3-tuples (filename, fileobj,
    contentype) or 4-tuples (filename, fileobj, contentype, custom_headers).
    :return: filename, file stream, file type, file header
    """
    ftype = None
    fheader = None
    if isinstance(args, (tuple, list)):
        if len(args) == 2:
            fname, fstream = args
        elif len(args) == 3:
            fname, fstream, ftype = args
        else:
            fname, fstream, ftype, fheader = args
    else:
        fname, fstream = guess_filename_stream(args)
        ftype = guess_content_type(fname)

    if isinstance(fstream, (str, bytes, bytearray)):
        fdata = fstream
    else:
        fdata = fstream.read()
    return fname, fdata, ftype, fheader
コード例 #2
0
ファイル: test_fields.py プロジェクト: Altynai/urllib3
 def test_guess_content_type(self):
     self.assertTrue(guess_content_type('image.jpg') in
                     ['image/jpeg', 'image/pjpeg'])
     self.assertEqual(guess_content_type('notsure'),
                      'application/octet-stream')
     self.assertEqual(guess_content_type(None), 'application/octet-stream')
コード例 #3
0
ファイル: test_fields.py プロジェクト: Nnamso/fjord
 def test_guess_content_type(self):
     self.assertTrue(guess_content_type("image.jpg") in ["image/jpeg", "image/pjpeg"])
     self.assertEqual(guess_content_type("notsure"), "application/octet-stream")
     self.assertEqual(guess_content_type(None), "application/octet-stream")
コード例 #4
0
 def test_guess_content_type(self, filename, content_types):
     assert guess_content_type(filename) in content_types
コード例 #5
0
 def test_guess_content_type(self, filename, content_types):
     assert guess_content_type(filename) in content_types
コード例 #6
0
ファイル: test_fields.py プロジェクト: zirben0/extpkgs
 def test_guess_content_type(self):
     self.assertTrue(
         guess_content_type('image.jpg') in ['image/jpeg', 'image/pjpeg'])
     self.assertEqual(guess_content_type('notsure'),
                      'application/octet-stream')
     self.assertEqual(guess_content_type(None), 'application/octet-stream')
コード例 #7
0
 def test_guess_content_type(
     self, filename: Optional[str], content_types: List[str]
 ) -> None:
     assert guess_content_type(filename) in content_types
コード例 #8
0
ファイル: renderers.py プロジェクト: ivanprjcts/sdklib
    def encode_params(self, data=None, files=None, **kwargs):
        """
        Build the body for a multipart/form-data request.
        Will successfully encode files when passed as a dict or a list of
        tuples. Order is retained if data is a list of tuples but arbitrary
        if parameters are supplied as a dict.
        The tuples may be string (filepath), 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype)
        or 4-tuples (filename, fileobj, contentype, custom_headers).
        """
        if isinstance(data, basestring):
            raise ValueError("Data must not be a string.")

        # optional args
        boundary = kwargs.get("boundary", None)
        output_str = kwargs.get("output_str", self.output_str)

        new_fields = []
        fields = to_key_val_list(data or {})
        files = to_key_val_list(files or {})

        for field, value in fields:
            ctype = None
            if isinstance(value, (tuple, list)) and len(value) == 2:
                val, ctype = value
            else:
                val = value

            if isinstance(val, basestring) or not hasattr(val, '__iter__'):
                val = [val]
            for v in val:
                # Don't call str() on bytestrings: in Py3 it all goes wrong.
                if not isinstance(v, bytes):
                    v = to_string(v, lang=output_str)

                field = field.decode('utf-8') if isinstance(field, bytes) else field
                v = v.encode('utf-8') if isinstance(v, str) else v

                rf = RequestField(name=field, data=v)
                rf.make_multipart(content_type=ctype)
                new_fields.append(rf)

        for (k, v) in files:
            # support for explicit filename
            ft = None
            fh = None
            if isinstance(v, (tuple, list)):
                if len(v) == 2:
                    fn, fp = v
                elif len(v) == 3:
                    fn, fp, ft = v
                else:
                    fn, fp, ft, fh = v
            else:
                fn, fp = guess_filename_stream(v)
                ft = guess_content_type(fn)

            if isinstance(fp, (str, bytes, bytearray)):
                fdata = fp
            else:
                fdata = fp.read()

            rf = RequestField(name=k, data=fdata, filename=fn, headers=fh)
            rf.make_multipart(content_type=ft)
            new_fields.append(rf)

        if boundary is None:
            boundary = self.boundary
        body, content_type = encode_multipart_formdata(new_fields, boundary=boundary)

        return body, content_type