danielgtaylor / danielgtaylor/python-betterproto
Unexpected behaviour with explicitly setting seconds = 0 with timedelta and using to_dict
- 主要言語
- Python
- スター
- 1.8k
- フォーク
- 234
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
### Summary
When using timedelta with explicitly setting the seconds to 0 the output is empty instead of being explicitly set
### Reproduction Steps
```python3
>>> from datetime import timedelta
>>> from dataclasses import dataclass
>>> import betterproto
>>>
>>> @dataclass(eq=False, repr=False)
... class TestTimeout(betterproto.Message):
... timeout: timedelta = betterproto.message_field(1)
...
>>> TestTimeout(timeout=timedelta(seconds=0)).to_dict()
{}
>>> from datetime import timedelta
>>> from dataclasses import dataclass
>>> import betterproto
>>>
>>> @dataclass(eq=False, repr=False)
... class TestTimeout(betterproto.Message):
... timeout: timedelta = betterproto.message_field(1)
...
>>> TestTimeout(timeout=timedelta(seconds=1)).to_dict()
{'timeout': '1.000s'}
```
### Expected Results
Output expected to be `{'timeout': '0s'}`
### Actual Results
Output is an empty dict {}
### System Information
betterproto==2.0.0b6
python 3.11
### Checklist
- [X] I have searched the issues for duplicates.
- [X] I have shown the entire traceback, if possible.
- [X] I have verified this issue occurs on the latest prelease of betterproto which can be installed using `pip install -U --pre betterproto`, if possible.
コントリビューションガイド
調査の方向性
まず、Message.to_dictで使用されているtimedeltaの処理を見つけ、Python 3.11でissueの2つの例を再現します。明示的に指定された0秒のtimedeltaが辞書に保持され、出力が期待される{'timeout': '0s'}のケースと一致することを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- api
- issue の種類
- バグ
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 45/100