A standalone CLI output parser library for network devices
Project description
Muninn
Muninn is a library that transforms unstructured network device CLI output into structured, type-hinted Python data structures.
Why Muninn?
- Standalone - No framework dependencies. Install and use it in any Python project.
- Simple API -
Muninn().parse(os, command, output)and you're done. - Well-tested - Every parser has test cases with platform and software version metadata.
- Type-aware - Import individual parsers to get
TypedDictreturn types that describe the parsed data structure, enabling IDE autocompletion and better AI-assisted coding. - Extensible - Load your own local parsers alongside built-in ones.
Installation
Muninn can be quickly and easily installed with uv as shown below:
uv add muninn-parsers
Or, if you prefer good old-fashioned pip, you can do so as shown below:
pip install muninn-parsers
Quick Examples
Auto-Discovering Parsers
Create a Muninn instance and call parse() with an OS identifier, the CLI command, and the raw output. Muninn automatically finds and runs the right parser:
from typing import Any
import muninn
mn = muninn.Muninn()
raw_output = """
Neighbor ID Pri State Dead Time Address Interface
10.1.1.1 1 FULL/DR 00:00:38 192.168.1.1 Ethernet1/1
10.1.1.2 1 FULL/BDR 00:00:33 192.168.1.2 Ethernet1/2
"""
result: dict[str, Any] = mn.parse("nxos", "show ip ospf neighbor", raw_output)
Returns:
{
"10.1.1.1": {
"priority": 1,
"state": "FULL/DR",
"dead_time": "00:00:38",
"address": "192.168.1.1",
"interface": "Ethernet1/1"
},
"10.1.1.2": {
"priority": 1,
"state": "FULL/BDR",
"dead_time": "00:00:33",
"address": "192.168.1.2",
"interface": "Ethernet1/2"
}
}
Using a Parser Directly
You can also import a specific parser and call it directly. This gives you access to the parser's TypedDict return type, which enables IDE autocompletion and helps AI coding assistants reason about the structure of the parsed data:
from muninn.parsers.nxos.show_ip_ospf_neighbor import (
ShowIpOspfNeighborParser,
ShowIpOspfNeighborResult,
)
raw_output = """
Neighbor ID Pri State Dead Time Address Interface
10.1.1.1 1 FULL/DR 00:00:38 192.168.1.1 Ethernet1/1
10.1.1.2 1 FULL/BDR 00:00:33 192.168.1.2 Ethernet1/2
"""
result: ShowIpOspfNeighborResult = ShowIpOspfNeighborParser.parse(raw_output)
# IDE autocompletion and type checking work here
Documentation
Full documentation is available at chartinolabs.github.io/Muninn.
- Changelog - Release history built from changelog fragments
- Changelog Fragments Guide - How to add release-note fragments
- Releasing - How to compile release notes and cut a release
Status
Early development. See the Design Philosophy page for project direction.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file muninn_parsers-0.2.0.tar.gz.
File metadata
- Download URL: muninn_parsers-0.2.0.tar.gz
- Upload date:
- Size: 990.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68be951499d722a8d835bdb88a88d850cc6e776bc4fa2bd401703cffa8b90832
|
|
| MD5 |
715fad06de29541a34a17e19dc896d39
|
|
| BLAKE2b-256 |
4492192410e9c9612767cebc6d3f7d0a84f5fa14a35408b00d26131a6252756f
|
File details
Details for the file muninn_parsers-0.2.0-py3-none-any.whl.
File metadata
- Download URL: muninn_parsers-0.2.0-py3-none-any.whl
- Upload date:
- Size: 621.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2556285bd1c05547da0127d4691d48caf94476db74a5ff569b8ec0957e73c2f3
|
|
| MD5 |
d1964418d0dcc346192cae8a95a6d976
|
|
| BLAKE2b-256 |
774841b69c4ffbeb4bee95f7cff7ced3f0fe7e5491497cc5003750d5ff272ebe
|