aio-libs / aio-libs/aiohttp

Accessing Response.text can fail with an AttributeError

Abierto
#2,928 10 comentarios 0 reacciones 1 asignado Reclamado por @myusko Ver en GitHub
bug good first issue Hacktoberfest server
Lenguaje dominante
Python
Estrellas
16.5k
Forks
2.4k
Merge medio
17 h 22 min
PR fusionados (30 d)
212

Descripción

## 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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.