mirror of https://github.com/scrapy/scrapy.git
Format change
This commit is contained in:
parent
5c256d5c5f
commit
180b457f77
|
|
@ -117,20 +117,20 @@ class ResponseTypes:
|
|||
else:
|
||||
return self.from_mimetype('text')
|
||||
|
||||
def __guess_content_type(self, content_disposition=None, url=None, filename=None):
|
||||
if content_disposition:
|
||||
filename = content_disposition.split(b';')
|
||||
if len(filename) != 1:
|
||||
filename = filename[-1].split(b'=')[1].strip(b'"\'')
|
||||
else:
|
||||
filename = filename[0]
|
||||
return self.mimetypes.guess_type(filename.decode())[0]
|
||||
def _guess_content_type(self, content_type=None, content_disposition=None, url=None, filename=None):
|
||||
if content_type:
|
||||
return tuple(content_type)
|
||||
|
||||
if url:
|
||||
return self.mimetypes.guess_type(url)[0]
|
||||
if content_disposition:
|
||||
filename = content_disposition.split(b';')[-1].split(b'=')[-1].strip(b'"\'').decode()
|
||||
|
||||
elif url:
|
||||
filename = url
|
||||
|
||||
if filename:
|
||||
return self.mimetypes.guess_type(filename)[0]
|
||||
return (self.mimetypes.guess_type(filename)[0].encode(),)
|
||||
|
||||
return None
|
||||
|
||||
def from_args(self, headers=None, url=None, filename=None, body=None):
|
||||
"""Guess the most appropriate Response class based on
|
||||
|
|
@ -146,14 +146,12 @@ class ResponseTypes:
|
|||
if url and urlparse(url).scheme not in ("http", "https"):
|
||||
http_origin = False
|
||||
|
||||
if headers and b'Content-Type' in headers:
|
||||
content_types = tuple(headers.getlist(b'Content-Type'))
|
||||
elif headers and b'Content-Disposition' in headers:
|
||||
content_types = (self.__guess_content_type(content_disposition=headers.get(b'Content-Disposition')).encode(),)
|
||||
elif url:
|
||||
content_types = (self.__guess_content_type(url=url).encode(),)
|
||||
elif filename:
|
||||
content_types = (self.__guess_content_type(filename=filename).encode(),)
|
||||
if headers:
|
||||
content_types = self._guess_content_type(content_type=headers.getlist(b'Content-Type'),
|
||||
content_disposition=headers.get(b'Content-Disposition'),
|
||||
url=url, filename=filename)
|
||||
else:
|
||||
content_types = self._guess_content_type(url=url, filename=filename)
|
||||
|
||||
mime_type = extract_mime(body, content_types=content_types, http_origin=http_origin)
|
||||
cls = self.from_mimetype(mime_type.decode())
|
||||
|
|
|
|||
|
|
@ -86,9 +86,7 @@ class ResponseTypesTest(unittest.TestCase):
|
|||
|
||||
def test_from_args_post_xtractmime(self):
|
||||
mappings = [
|
||||
({'body': b'Some plain text data with tabs and null bytes',
|
||||
'headers': Headers({'Content-Type': ['text/html; charset=utf-8'], })},
|
||||
TextResponse),
|
||||
({'body': b'Some plain text data with tabs and null bytes'}, TextResponse),
|
||||
({'body': b'\x03\x02\xdf\xdd\x23', 'headers': Headers({'Content-Encoding': 'UTF-8'})},
|
||||
Response),
|
||||
# different behaviour with http and non-http urls
|
||||
|
|
|
|||
Loading…
Reference in New Issue