mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-04 16:38:49 +00:00
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
import subprocess
|
|
import sys
|
|
|
|
|
|
def _run_import_probe(source: str) -> str:
|
|
proc = subprocess.run(
|
|
[sys.executable, "-c", source],
|
|
check=True,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
return proc.stdout.strip()
|
|
|
|
|
|
def test_feishu_module_import_does_not_import_lark_oapi():
|
|
out = _run_import_probe(
|
|
"import sys; import nanobot.channels.feishu; print('lark_oapi' in sys.modules)"
|
|
)
|
|
|
|
assert out == "False"
|
|
|
|
|
|
def test_feishu_channel_constructor_does_not_import_lark_oapi():
|
|
out = _run_import_probe(
|
|
"import sys; "
|
|
"from nanobot.bus.queue import MessageBus; "
|
|
"from nanobot.channels.feishu import FeishuChannel; "
|
|
"FeishuChannel({'enabled': True}, MessageBus()); "
|
|
"print('lark_oapi' in sys.modules)"
|
|
)
|
|
|
|
assert out == "False"
|
|
|
|
|
|
def test_lark_runtime_thread_import_clears_sdk_import_loop():
|
|
out = _run_import_probe(
|
|
"import asyncio\n"
|
|
"import sys\n"
|
|
"import tempfile\n"
|
|
"from pathlib import Path\n"
|
|
"from nanobot.channels.feishu import _load_lark_runtime\n"
|
|
"root = Path(tempfile.mkdtemp())\n"
|
|
"pkg = root / 'lark_oapi'\n"
|
|
"(pkg / 'ws').mkdir(parents=True)\n"
|
|
"(pkg / 'core').mkdir(parents=True)\n"
|
|
"(pkg / '__init__.py').write_text('class LogLevel:\\n INFO = 20\\n')\n"
|
|
"(pkg / 'ws' / '__init__.py').write_text('')\n"
|
|
"(pkg / 'ws' / 'client.py').write_text('import asyncio\\nloop = asyncio.new_event_loop()\\n')\n"
|
|
"(pkg / 'core' / '__init__.py').write_text('')\n"
|
|
"(pkg / 'core' / 'const.py').write_text(\"FEISHU_DOMAIN = 'feishu'\\nLARK_DOMAIN = 'lark'\\n\")\n"
|
|
"sys.path.insert(0, str(root))\n"
|
|
"async def main():\n"
|
|
" await asyncio.to_thread(_load_lark_runtime)\n"
|
|
" import lark_oapi.ws.client as ws\n"
|
|
" print(getattr(ws, 'loop', 'sentinel') is None)\n"
|
|
"asyncio.run(main())"
|
|
)
|
|
|
|
assert out == "True"
|