danielgtaylor / danielgtaylor/python-betterproto

Unexpected behaviour with explicitly setting seconds = 0 with timedelta and using to_dict

オープン
#649 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
bug investigation needed
主要言語
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

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

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