{"library":"pyang","title":"pyang: YANG Validator and Converter","description":"A YANG (RFC 6020/7950) validator and converter, `pyang` provides tools for parsing, validating, and transforming YANG modules. It is primarily used as a command-line tool but also offers a Python API for programmatic access to perform validation, convert modules to formats like YIN (XML) or tree structures, and generate code. The project maintains an `active` development pace with frequent minor releases, currently at version 2.7.1.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install pyang"],"cli":{"name":"pyang","version":"pyang 2.7.1"}},"imports":["from pyang import plugin","from pyang import repository","from pyang import context","from pyang import error"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport tempfile\nfrom pyang import plugin, repository, context, error\n\n# Create a dummy YANG file content\nyang_content = \"\"\"\nmodule example-module {\n  namespace \"urn:example:module\";\n  prefix \"ex\";\n\n  container my-container {\n    leaf my-leaf {\n      type string;\n      description \"A simple leaf.\";\n    }\n  }\n}\n\"\"\"\n\n# Create a temporary directory and file for the YANG module\ntemp_dir = tempfile.mkdtemp()\nyang_file_path = os.path.join(temp_dir, 'example-module.yang')\n\nwith open(yang_file_path, 'w') as f:\n    f.write(yang_content)\n\ntry:\n    # 1. Initialize pyang plugins\n    # This is crucial as many functionalities (like output formats) are plugins\n    plugin.init()\n\n    # 2. Create a repository pointing to the directory containing our YANG module\n    repo = repository.FileRepository(temp_dir)\n\n    # 3. Create a pyang context (a parsing and validation session)\n    ctx = context.Context(repo)\n    ctx.opts.add_opts = [] # Ensure no unexpected options interfere\n\n    # 4. Load the module\n    module = ctx.add_module(yang_file_path)\n    if module:\n        print(f\"Successfully loaded module: {module.arg}\")\n        \n        # 5. Validate the context for errors and warnings\n        ctx.validate()\n\n        if ctx.errors:\n            print(\"Validation issues found:\")\n            for e in ctx.errors:\n                print(f\"  {error.err_to_str(e)}\")\n        else:\n            print(\"Module validated successfully with no errors or warnings.\")\n    else:\n        print(f\"Failed to load module from {yang_file_path}\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")\nfinally:\n    # Clean up the temporary file and directory\n    os.remove(yang_file_path)\n    os.rmdir(temp_dir)\n","lang":"python","description":"This quickstart demonstrates how to programmatically load and validate a YANG module using `pyang`'s Python API. It creates a dummy YANG file, initializes the plugin system, sets up a file repository, and then adds and validates the module within a context.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"2.7.1","pypi_latest":"2.7.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.2,"avg_import_s":0.18,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.09,"mem_mb":3.6,"disk_size":"31.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.2,"import_time_s":0.07,"mem_mb":3.6,"disk_size":"32M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":4.1,"disk_size":"33.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.2,"import_time_s":0.1,"mem_mb":4.1,"disk_size":"34M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":4.7,"disk_size":"25.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.9,"import_time_s":0.16,"mem_mb":4.7,"disk_size":"26M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.08,"mem_mb":3.5,"disk_size":"25.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.08,"mem_mb":3.3,"disk_size":"26M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.5,"mem_mb":13.4,"disk_size":"31.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pyang","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":2.5,"import_time_s":0.45,"mem_mb":13.4,"disk_size":"32M"}]}}