Harry-Jing / nonebot-plugin-bing-chat

一个可以使用新版Bing进行聊天的NoneBot插件
GNU General Public License v3.0
170 stars 13 forks source link

一些重构 #36

Closed NekoAria closed 1 year ago

NekoAria commented 1 year ago

我没看仔细,原来 0.0.58.2 支持自定义代理,后来又取消了。

Harry-Jing commented 1 year ago

现在有一个问题,我现在有一个分支(dev0.7)也修改了很多内容(很多没有push上来),merge以后不好把这部分内容迁移过去

Harry-Jing commented 1 year ago

各种命名的不规范是我的问题(我的坏习惯,我认为用大驼峰命名类型,小驼峰命名函数,下划线命名变量,这样可以从命名上直接看出他们的类型),我应该遵守pep8的标准

Harry-Jing commented 1 year ago

还有就是我不是很想支持3.10以下的版本

NekoAria commented 1 year ago

还有就是我不是很想支持3.10以下的版本

能说说为什么吗? 之前没去看别人的 fork ,原来 @Ikaros-521 也对 3.8 做了兼容。

Ikaros-521 commented 1 year ago

TUD~V_ `BTEOO`G_5PFVQSK

Peins commented 1 year ago

现在有一个问题,我现在有一个分支(dev0.7)也修改了很多内容(很多没有push上来),merge以后不好把这部分内容迁移过去

不merge,用rebase,试试,我也不是太懂你们这冲突会不会很多

NekoAria commented 1 year ago

现在有一个问题,我现在有一个分支(dev0.7)也修改了很多内容(很多没有push上来),merge以后不好把这部分内容迁移过去

不merge,用rebase,试试,我也不是太懂你们这冲突会不会很多

主要还是有个文件内容修改的同时,还修改了文件名,别的冲突都好说。

Harry-Jing commented 1 year ago

我很多函数和变量的位置都改了

NekoAria commented 1 year ago

我没记错的话,事实上你只用到了 python 3.10 新特性里的 match-case 以及 type union operator ,要兼容 3.8 并不是什么特别麻烦的事情吧。 还有,我认为使用我添加的那个 deep_get 函数,可读性会更好。 所以能否说一下,你是出于什么原因不想兼容 3.10 以下的 python 版本? 如果只是喜好问题,我也没意见。

NekoAria commented 1 year ago

我很多函数和变量的位置都改了

等你改好之后,我处理好冲突后,重新发 PR 也行。

Harry-Jing commented 1 year ago

咕咕咕

Harry-Jing commented 1 year ago

我在想那个怎么处理掉那个type ignore

Harry-Jing commented 1 year ago

然后你们怎么看这个问题 https://github.com/pydantic/pydantic/discussions/5211

NekoAria commented 1 year ago

然后你们怎么看这个问题 pydantic/pydantic#5211

from typing import List

from pydantic import BaseModel, validator

class Model(BaseModel):
    word_list: List[str]

    @validator('word_list', pre=True)
    def word_list_validator(cls, v):
        return [v] if isinstance(v, str) else v

这样?

NekoAria commented 1 year ago

我在想那个怎么处理掉那个type ignore

validator 相关的 v 可以注解为 Any 类型,但是涉及到 event.sender.user_id 那些就没办法了,因为它是 Optional[int] ,但是接收方不允许它是 None 。

Harry-Jing commented 1 year ago

我打算支持OB12,所以我自己写了一个Sender类,optional的问题不大

Harry-Jing commented 1 year ago

mypy一样会报错 image

NekoAria commented 1 year ago

mypy一样会报错 image

~我用 PyCharm 无法复现:~

from typing import List, Union

from pydantic import BaseModel, validator

class Model(BaseModel):
    word_list: List[str]

    @validator('word_list', pre=True)
    def word_list_validator(cls, v: Union[str, List[str]]) -> List[str]:
        return list(v)

if __name__ == '__main__':
    m = Model(word_list="abc")
    print(type(m.word_list))
    print(m.word_list)

~运行结果:~

<class 'list'>
['a', 'b', 'c']

~这个报错应该是 vscode 的 Pylance 给出的吧。~

我更新了 mypy 后也遇到了。

Harry-Jing commented 1 year ago

mypy类型检查

Harry-Jing commented 1 year ago

$ mypy C:\Programs\BOT\NoneBot2\bing-chat-dev\src\plugins\test\test02.py
test02.py:11: error: Argument "word_list" to "Model" has incompatible type "str"; expected "List[str]"  [arg-type]
Found 1 error in 1 file (checked 1 source file)
Harry-Jing commented 1 year ago

我在纠结这个问题,要不给mypy提一个issue(?

NekoAria commented 1 year ago

这并不算是 issue 吧,你也不会直接用 m = Model(word_list="abc") 吧,不应该是这样吗:

d = {"word_list": "abc"}
m = Model.parse_obj(d)

这样并不会报错。 至于上面的报错,我更新了 mypy 后也遇到了,它就是这么设计的吧。

Harry-Jing commented 1 year ago

我没记错的话,事实上你只用到了 python 3.10 新特性里的 match-case 以及 type union operator ,要兼容 3.8 并不是什么特别麻烦的事情吧。

还有,我认为使用我添加的那个 deep_get 函数,可读性会更好。

所以能否说一下,你是出于什么原因不想兼容 3.10 以下的 python 版本?

如果只是喜好问题,我也没意见。

3.10确实是我的喜好问题了