Accessing Response.text can fail with an AttributeError
- Langage dominant
- Python
- Étoiles
- 16.5k
- Forks
- 2.4k
- Merge moyen
- 17 h 22 min
- PR mergées (30 j)
- 212
Description
## Long story short
Handling of payloads in the server response is not consistent and can lead to `AttributeError`s since code depends on methods that may not exist. I am willing to try and create a PR that fixes this issue but I'm unsure of what the intended behavior should be.
## Expected behaviour
We handle payload setting consistently and don't fail when `text` is called after setting a string payload using the `body` property setter.
## Actual behaviour
The setter for `Response.body` has support for automatic type detection via the `PayloadRegistry`. This means that in the above example, the body will be encoded as a `StringPayload`. When trying to access this via the `text` property we fail because `StringPayload` does not have a `decode` method.
When you set `text` directly any string is decoded to `bytes` and set to `_body` directly without passing through the `PayloadRegistry`.
## Steps to reproduce
```python
>>> from aiohttp.web_response import Response
>>> r = Response()
>>> r.body = 'asdf'
>>> r.text
Traceback (most recent call last):
File "", line 1, in
File "/private/tmp/.ve/lib/python3.6/site-packages/aiohttp/web_response.py", line 539, in text
return self._body.decode(self.charset or 'utf-8')
AttributeError: 'StringPayload' object has no attribute 'decode'
```
## Your environment
Reproduced on aiohttp 2.3.10 and 3.1.2
Guide de contribution
Ouvrir le guide de contribution
Évaluation
Cette issue n'a pas encore été évaluée.