mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-24 17:15:05 +08:00
61 lines
1.3 KiB
Python
61 lines
1.3 KiB
Python
|
from contextvars import ContextVar
|
||
|
|
||
|
_export: ContextVar["Export"] = ContextVar("_export")
|
||
|
|
||
|
|
||
|
class Export(dict):
|
||
|
"""
|
||
|
:说明:
|
||
|
|
||
|
插件导出内容以使得其他插件可以获得。
|
||
|
|
||
|
:示例:
|
||
|
|
||
|
.. code-block:: python
|
||
|
|
||
|
nonebot.export().default = "bar"
|
||
|
|
||
|
@nonebot.export()
|
||
|
def some_function():
|
||
|
pass
|
||
|
|
||
|
# this doesn't work before python 3.9
|
||
|
# use
|
||
|
# export = nonebot.export(); @export.sub
|
||
|
# instead
|
||
|
# See also PEP-614: https://www.python.org/dev/peps/pep-0614/
|
||
|
@nonebot.export().sub
|
||
|
def something_else():
|
||
|
pass
|
||
|
"""
|
||
|
|
||
|
def __call__(self, func, **kwargs):
|
||
|
self[func.__name__] = func
|
||
|
self.update(kwargs)
|
||
|
return func
|
||
|
|
||
|
def __setitem__(self, key, value):
|
||
|
super().__setitem__(key,
|
||
|
Export(value) if isinstance(value, dict) else value)
|
||
|
|
||
|
def __setattr__(self, name, value):
|
||
|
self[name] = Export(value) if isinstance(value, dict) else value
|
||
|
|
||
|
def __getattr__(self, name):
|
||
|
if name not in self:
|
||
|
self[name] = Export()
|
||
|
return self[name]
|
||
|
|
||
|
|
||
|
def export() -> Export:
|
||
|
"""
|
||
|
:说明:
|
||
|
|
||
|
获取插件的导出内容对象
|
||
|
|
||
|
:返回:
|
||
|
|
||
|
- ``Export``
|
||
|
"""
|
||
|
return _export.get()
|