aio-libs / aio-libs/aiohttp

Accessing Response.text can fail with an AttributeError

オープン
#2,928 コメント 10 件 リアクション 0 件 担当者 1 名 @myusko が担当を希望しています GitHub で見る
bug good first issue Hacktoberfest server
主要言語
Python
スター
16.5k
フォーク
2.4k
平均マージ
17時間 22分
マージ済み PR(30日)
212

説明

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

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。