aio-libs / aio-libs/aiohttp

Accessing Response.text can fail with an AttributeError

Offen
#2,928 10 Kommentare 0 Reaktionen 1 zugewiesene Person Beansprucht von @myusko Auf GitHub ansehen
bug good first issue Hacktoberfest server
Vorherrschende Sprache
Python
Sterne
16.5k
Forks
2.4k
Ø Merge
17 Std. 22 Min.
Gemergte PRs (30 T.)
212

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.