[project] name = "telcoladder" version = "0.4.0" description = "Turn telecom signalling captures into Mermaid sequence diagrams — 5G core, 4G/EPC and IMS on one timeline." readme = "README.md" requires-python = ">=3.11" license = { text = "PolyForm-Noncommercial-1.0.0" } authors = [{ name = "gollumw" }] keywords = ["5g", "4g", "lte", "ngap", "s1ap", "nas", "gtp", "sip", "pcap", "wireshark", "mermaid", "sequence-diagram", "ims", "volte", "diameter", "mcp", "mcp-server", "ai-agent"] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Environment :: Web Environment", "Intended Audience :: Telecommunications Industry", "Intended Audience :: System Administrators", "License :: Other/Proprietary License", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: System :: Networking :: Monitoring", "Topic :: Communications :: Telephony", ] # 相依刻意保持極少。tshark 是外部執行檔,不是 Python 套件。 # 不用 pyshark:它只是 tshark 的慢包裝,多一層依賴無收益。 dependencies = [ "PyYAML>=6.0", ] [project.urls] Homepage = "https://github.com/gollumw/TelcoLadder" Repository = "https://github.com/gollumw/TelcoLadder" Issues = "https://github.com/gollumw/TelcoLadder/issues" Documentation = "https://github.com/gollumw/TelcoLadder/blob/master/docs/user-guide.md" "MCP server" = "https://github.com/gollumw/TelcoLadder/blob/master/AGENTS.md" [project.optional-dependencies] dev = ["pytest>=8.0"] [project.scripts] telcoladder = "telcoladder.cli:main" [build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] include = ["telcoladder*"] [tool.setuptools.package-data] telcoladder = ["data/causes/*.yaml", "data/decode-as.yaml", "static/*.js", "static/*.css"] [tool.pytest.ini_options] testpaths = ["tests"] # `tests/test_archmap.py` imports `tools.archmap`。`python -m pytest` 會把 cwd 放進 # sys.path,裸跑 `pytest`(CI 的寫法)不會 —— 於是本機綠、CI 五個平台全紅, # 訊息是 ModuleNotFoundError: tools。這一行讓兩種跑法看到同一個 repo 根。 pythonpath = ["."] # 背景執行緒裡的例外預設只是警告 —— 測試照樣全綠,沒人會看到。 # 而它代表的東西很實在:使用者會在終端機看到一段像當機的 traceback。 # 這條把它變成失敗。(Windows 的 communicate() 是靠讀取執行緒實作的, # 這個坑只在那裡出現,見 extract.py 的 _shutdown。) filterwarnings = [ "error::pytest.PytestUnhandledThreadExceptionWarning", ]