Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GMOCoinDataStoreがTypeErrorで落ちる。 #122

Closed
1 task done
kohilin opened this issue Jan 14, 2022 · 4 comments
Closed
1 task done

GMOCoinDataStoreがTypeErrorで落ちる。 #122

kohilin opened this issue Jan 14, 2022 · 4 comments
Assignees
Labels
bug Something isn't working

Comments

@kohilin
Copy link

kohilin commented Jan 14, 2022

課題

下記のエラーでGMOCoinDataStoreが落ちてしまいます。

cast(list[Item], data)cast(list, data)の間違いではないでしょうか。

Traceback (most recent call last):
    ...
    self._insert(cast(list[Item], data))
TypeError: 'type' object is not subscriptable

再現コードと当該箇所(cast(list[Item], data)となっている箇所は他にもいくつかありました)です。

async def main():
    async with pybotters.Client(base_url="https://api.coin.z.com") as client:
        store = pybotters.GMOCoinDataStore()
        await store.initialize(
            client.get("/private/v1/positionSummary"),
        )

https://github.com/MtkN1/pybotters/blob/5f3558a50e93dbb33597579b240e967a40630bc3/pybotters/models/gmocoin.py#L378

チェックリスト

  • Fix
@kohilin
Copy link
Author

kohilin commented Jan 14, 2022

python 3.9.7にあげると正常に動くようになりました。

以下当方で試した環境です。

  • 正常に動いたもの:python 3.9.7・typing-extensions==3.10.0.0
  • 上記のエラーが出たもの:python 3.8.8・typing-extensions=3.10.0.0

typing-extensionsは詳しくないのですが、上記の記法は新しめのpythonでのみサポートされているのように思いました。

@MtkN1 MtkN1 self-assigned this Jan 18, 2022
@MtkN1 MtkN1 added the bug Something isn't working label Jan 18, 2022
@MtkN1
Copy link
Member

MtkN1 commented Jan 18, 2022

レポートありがとうございます!
エラーが再現される事は確認しました。

cast(list[Item], data)はcast(list, data)の間違いではないでしょうか。

list[Item] 型を該当メソッドに渡すので、型アノテーションとしては間違いではありません。
しかし、指摘の通り cast(list[Item], data) はPython 3.9未満ではコードとしてはエラーが発生するようです。

これはPR #92 b744469#diff-70d03f7374b991e4ed0cf280951f8c425f5b3275616ac1d3c0c1a61872916583 の変更が起因していそうです。

このPRでは list[Item] といった標準コレクションを利用した型アノテーションの書き方をできるようにしています。
(標準コレクションについては詳しくはPEP585を参照してください https://www.python.org/dev/peps/pep-0585/)
該当Diff変更前のtypingモジュールでの cast(List[Item], data) を試したらエラーは発生しませんでした。

Python 3.9未満での標準コレクションと typing.cast になんらかの問題があると思いますので、分かり次第該当エラーが発生しないように修正したいと思います。

MtkN1 added a commit that referenced this issue Feb 3, 2022
@MtkN1
Copy link
Member

MtkN1 commented Feb 3, 2022

言語サーバー(Pylance)の警告を頼りに、型注釈を引用符で囲みました。

Subscript for class "list" will generate runtime exception; enclose type annotation in quotes

castは文字列でのアノテーションを受け付けているみたいなので、これでFixします。

@kohilin
Copy link
Author

kohilin commented Feb 3, 2022

検証修正ありがとうございます!お陰様でいつも非同期プログラミング楽しませていただいています。

MtkN1 added a commit that referenced this issue Feb 4, 2022
✨v0.10.0リリース

## Issues

✅ 各取引所のDataStoreを実装する #20
✅ DataStoreのリバースイテレーション可能にする #113
✅ PhemexDataStoreで認証エラーのWarningを表示する #114
✅ BybitInverseDataStoreにwalletを追加する #118
✅ GMOCoinDataStoreのtickerが上書きされない #120
✅ GMOCoinDataStoreがTypeErrorで落ちる。 #122
✅ GMOコインのPrivate WebSocketアクセストークンを自動延長する #124
✅ bitbankのDatastoreのDepthで、sorted()の返り値の型の定義が正しくない #126
@MtkN1 MtkN1 closed this as completed Feb 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants