Skip to main content

A clean, modern SMI/MIB compiler

Project description

trishul-smi

A clean, modern SNMP MIB compiler written in Python.

PyPI Python License: MIT GitHub Stars GitHub Forks GitHub Issues

trishul-smi fetches, parses, and compiles SNMP MIB definitions (SMIv1 and SMIv2) into structured JSON or pysnmp-compatible Python modules. It resolves transitive imports automatically, caches compiled modules on disk, and ships a CLI that works out-of-the-box with no SNMP toolchain required.


Features

  • Full import closure — resolves every transitive dependency automatically
  • Full OID resolution — all objects carry absolute numeric OID paths after compile
  • Two output formats — structured JSON and pysnmp-compatible Python
  • pysmi-parity pysnmp output — MibTableColumn detection, full TC subtypeSpec, setIndexNames, setOrganization, setRevisions, inline constraint wrappers
  • Reverse conversiontsmi convert FILE.py converts a compiled PySNMP module back to JSON
  • Directory compile modetsmi compile -d /path/to/mibs auto-discovers and compiles every MIB file
  • Concurrent fetching — parallel async HTTP with retry and timeout
  • Pluggable readersFileReader, HttpReader, ZipReader, composable via ReaderChain
  • Disk cache — compiled modules cached with mtime-based TTL; atomic writes
  • Cycle detection — Kahn's algorithm with actionable error messages
  • SMIv1 + SMIv2 — separate Lark grammars, auto-detected per MIB

Installation

pip install trishul-smi

Requires Python ≥ 3.10.


Quick Start

# Compile from a local MIB directory
tsmi compile IF-MIB --mib-dir /usr/share/snmp/mibs

# Fetch from the internet and compile to JSON + pysnmp
tsmi compile IF-MIB IP-MIB -f json -f pysnmp --online -o ./out

Python API:

import asyncio
from pathlib import Path
from trishul_smi import MibCompiler, CompilerConfig
from trishul_smi.reader import FileReader, HttpReader

async def main():
    config = CompilerConfig(output_dir=Path("./out"))
    compiler = MibCompiler(config).add_reader(FileReader("/usr/share/snmp/mibs"))
    # optionally add HTTP: async with HttpReader(*config.sources) as http: compiler.add_reader(http)
    results = await compiler.compile("IF-MIB", "IP-MIB")
    for r in results:
        print(r.name, r.status, r.output_paths)

asyncio.run(main())

Documentation


License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trishul_smi-0.3.0.tar.gz (122.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trishul_smi-0.3.0-py3-none-any.whl (58.3 kB view details)

Uploaded Python 3

File details

Details for the file trishul_smi-0.3.0.tar.gz.

File metadata

  • Download URL: trishul_smi-0.3.0.tar.gz
  • Upload date:
  • Size: 122.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for trishul_smi-0.3.0.tar.gz
Algorithm Hash digest
SHA256 c5158753d8976487a3ace1ec091f45b1ef4ca4d9f1d5f1ed8fe4b4a55c78cda4
MD5 8b73cded98f198251c3002cdbe578a6f
BLAKE2b-256 73c95d92c5dd50fc5aa7a8fa27c8808cd12eec6df963910a870fa58e592213ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for trishul_smi-0.3.0.tar.gz:

Publisher: release.yml on tosumitdhaka/trishul-smi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file trishul_smi-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: trishul_smi-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 58.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for trishul_smi-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 623712975c5bab07ef2f0858221eef7a5b70a85a9222a28744eeda6e325ec4bd
MD5 336d6664afd5abdd052c4f771ad10ebb
BLAKE2b-256 e05ba184392ae9121828a26dab0a49b461d4273b5de4020746af6d3dc269a560

See more details on using hashes here.

Provenance

The following attestation bundles were made for trishul_smi-0.3.0-py3-none-any.whl:

Publisher: release.yml on tosumitdhaka/trishul-smi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page