{"id":17296122,"url":"https://github.com/kirankotari/ncs-uml","last_synced_at":"2026-02-07T05:01:48.784Z","repository":{"id":177720744,"uuid":"657621033","full_name":"kirankotari/ncs-uml","owner":"kirankotari","description":"A Python library and CLI tool that generates plantUML code from the given input YANG Model file. It grabs the dependencies yang models from the Makefile and from NCS.","archived":false,"fork":false,"pushed_at":"2023-07-11T23:36:48.000Z","size":820,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-25T00:19:32.661Z","etag":null,"topics":["ncs","ncs-uml","nso","plantuml","python","uml-diagrams"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/ncs-uml/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kirankotari.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-06-23T13:10:22.000Z","updated_at":"2023-07-12T07:38:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"2d5f8900-b44e-49a9-bf75-9d94d2549f27","html_url":"https://github.com/kirankotari/ncs-uml","commit_stats":null,"previous_names":["kirankotari/ncs-uml"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kirankotari/ncs-uml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirankotari%2Fncs-uml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirankotari%2Fncs-uml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirankotari%2Fncs-uml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirankotari%2Fncs-uml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kirankotari","download_url":"https://codeload.github.com/kirankotari/ncs-uml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirankotari%2Fncs-uml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29186742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T03:35:06.566Z","status":"ssl_error","status_checked_at":"2026-02-07T03:34:57.604Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ncs","ncs-uml","nso","plantuml","python","uml-diagrams"],"created_at":"2024-10-15T11:12:02.940Z","updated_at":"2026-02-07T05:01:48.776Z","avatar_url":"https://github.com/kirankotari.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NCS-UML\n\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-yellow)](https://opensource.org/license/apache-2-0/)\n[![Downloads](https://pepy.tech/badge/ncs-uml)](https://pepy.tech/project/ncs-uml)\n[![GitHub issues open](https://img.shields.io/github/issues/kirankotari/ncs-uml.svg?)](https://github.com/kirankotari/ncs-uml/issues)\n\n- [Introduction](#introduction)\n- [Commands](#commands)\n- [Documentation](#docs)\n- [Pre-requisites](#pre-requisites)\n- [Installation and Downloads](#installation-and-downloads)\n- [FAQ](#faq)\n- [Bug Tracker and Support](#bug-tracker-and-support)\n- [License and Copyright](#license-and-copyright)\n- [Author and Thanks](#author-and-thanks)\n\n## Introduction\n\nA Python library and CLI tool that generates plantUML code from the given input YANG Model file. It grabs the dependencies yang models from the Makefile and from NCS. \n\nTo generate a png image or a svg file, install plantUML plugin for VSCode or other editors. plantUML has the web editor available at [plantuml.com](http://www.plantuml.com/)\n\n## Commands\n\n```sh\nUsage: ncs-uml [options] [\u003cfilename\u003e...]\n\nCreates plantUML file for the YANG module in \u003cfilename\u003e, and all its dependencies.\nIt can be converted into PNG/SVG images using www.plantuml.com or with editor plugins.\n\nOptions:\n  -h, --help            Show this help message and exit\n  -v, --version         Show version number and exit\n  -V, --verbose\n  --no-inline-groupings\n  --dependent-yang-paths=DEPENDENT_YANG_PATHS\n                        dependent yang module paths\n  --no-inline-groupings-from=NO_INLINE_GROUPINGS_FROM\n                        Skips given modules from inline groupings.  Example\n                        --uml-no-inline-groupings-from=ietf-yang-push\n  --add-legend          Adds legend about grouping yang file in the UML\n```\n\n## Docs\n\n**How to use ncs-uml?**\n\n- Command Line  \n  Type `ncs-uml \u003cYangFile\u003e`. For more help type `ncs-uml --help`\n\n```shell\nuser$ ncs-uml $NCS_DIR/examples.ncs/getting-started/developing-with-ncs/17-mpls-vpn-python/packages/l3vpn/src/yang/l3vpn.yang --no-inline-groupings-from=tailf-ncs --add-legend\n INFO |   main | uml file: l3vpn.uml\n INFO |   main | uml clean up done.\nuser$\n```\n\nIt returns plantUML code, which can easily converted to image.\n\n![l3vpn](l3vpn.png)\n\nPlant UML code:\n```plantuml.server\n@startuml l3vpn\nhide empty fields \nhide empty methods \nhide \u003c\u003ccase\u003e\u003e circle\nhide \u003c\u003caugment\u003e\u003e circle\nhide \u003c\u003cchoice\u003e\u003e circle\nhide \u003c\u003cleafref\u003e\u003e stereotype\nhide \u003c\u003cleafref\u003e\u003e circle\npage 1x1 \nTitle l3vpn \nclass \"l3vpn\" as l3vpn \u003c\u003c (M, #33CCFF) module\u003e\u003e \nclass \"dscp-type\" as dscp_type \u003c\u003c (T, YellowGreen) typedef\u003e\u003e\ndscp_type : union{uint16, enumeration}\nenum \"protocol-type\" as l3vpn_I_protocol_type {\nicmp\nigmp\nipip\nMORE\n}\nclass \"qos-match-type\" as qos_match_type \u003c\u003c (T, YellowGreen) typedef\u003e\u003e\nqos_match_type : union{tailf:ipv4-address-and-prefix-length, enumeration}\nclass \"topology\" as  l3vpn_I_topology \u003c\u003ccontainer\u003e\u003e \nl3vpn *-- \"1\" l3vpn_I_topology \nclass \"role\" as l3vpn_I_topology_I_role \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_topology *-- \"0..N\" l3vpn_I_topology_I_role \nl3vpn_I_topology_I_role : +role : enumeration : {ce,pe,p,}  {key} \nl3vpn_I_topology_I_role : device []: leafref : /ncs:devices/ncs:device/ncs:name \nclass \"connection\" as l3vpn_I_topology_I_connection \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_topology *-- \"0..N\" l3vpn_I_topology_I_connection \nl3vpn_I_topology_I_connection : +name : string  {key} \nclass \"endpoint-1\" as  l3vpn_I_topology_I_connection_I_endpoint_1 \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_topology_I_connection *-- \"1\" l3vpn_I_topology_I_connection_I_endpoint_1 \nl3vpn_I_topology_I_connection_I_endpoint_1 : device : leafref : /ncs:devices/ncs:device/ncs:name  \nl3vpn_I_topology_I_connection_I_endpoint_1 : interface : string  \nl3vpn_I_topology_I_connection_I_endpoint_1 : ip-address : tailf:ipv4-address-and-prefix-length  \nclass \"endpoint-2\" as  l3vpn_I_topology_I_connection_I_endpoint_2 \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_topology_I_connection *-- \"1\" l3vpn_I_topology_I_connection_I_endpoint_2 \nl3vpn_I_topology_I_connection_I_endpoint_2 : device : leafref : /ncs:devices/ncs:device/ncs:name  \nl3vpn_I_topology_I_connection_I_endpoint_2 : interface : string  \nl3vpn_I_topology_I_connection_I_endpoint_2 : ip-address : tailf:ipv4-address-and-prefix-length  \nl3vpn_I_topology_I_connection : link-vlan : uint32  \nclass \"qos\" as  l3vpn_I_qos \u003c\u003ccontainer\u003e\u003e \nl3vpn *-- \"1\" l3vpn_I_qos \nclass \"qos-policy\" as l3vpn_I_qos_I_qos_policy \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_qos *-- \"0..N\" l3vpn_I_qos_I_qos_policy \nl3vpn_I_qos_I_qos_policy : +name : string  {key} \nclass \"class\" as l3vpn_I_qos_I_qos_policy_I_class \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_qos_I_qos_policy *-- \"0..N\" l3vpn_I_qos_I_qos_policy_I_class \nl3vpn_I_qos_I_qos_policy_I_class : +qos-class : leafref : /qos/qos-class/name  {key} \nl3vpn_I_qos_I_qos_policy_I_class : bandwidth-percentage : uint32  \nl3vpn_I_qos_I_qos_policy_I_class : priority : empty  \nclass \"qos-class\" as l3vpn_I_qos_I_qos_class \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_qos *-- \"0..N\" l3vpn_I_qos_I_qos_class \nl3vpn_I_qos_I_qos_class : +name : string  {key} \nl3vpn_I_qos_I_qos_class : dscp-value : dscp-type  \nclass \"match-traffic\" as l3vpn_I_qos_I_qos_class_I_match_traffic \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_qos_I_qos_class *-- \"0..N\" l3vpn_I_qos_I_qos_class_I_match_traffic \nl3vpn_I_qos_I_qos_class_I_match_traffic : +name : string  {key} \nl3vpn_I_qos_I_qos_class_I_match_traffic : source-ip : qos-match-type  \nl3vpn_I_qos_I_qos_class_I_match_traffic : destination-ip : qos-match-type  \nl3vpn_I_qos_I_qos_class_I_match_traffic : port-start : inet:port-number  \nl3vpn_I_qos_I_qos_class_I_match_traffic : port-end : inet:port-number  \nl3vpn_I_qos_I_qos_class_I_match_traffic : protocol : protocol-type  \nclass \"vpn\" as  l3vpn_I_vpn \u003c\u003ccontainer\u003e\u003e \nl3vpn *-- \"1\" l3vpn_I_vpn \nclass \"l3vpn\" as l3vpn_I_vpn_I_l3vpn \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_vpn *-- \"0..N\" l3vpn_I_vpn_I_l3vpn \nl3vpn_I_vpn_I_l3vpn : +name : string  {key} \nl3vpn_I_vpn_I_l3vpn : callpoint:ncs-rfs-service-hook()\nl3vpn_I_vpn_I_l3vpn : check-sync( in: outformat in: suppress_positive_result in: service_depth in: choice_lsa_grouping)\nl3vpn_I_vpn_I_l3vpn : deep-check-sync( in: outformat in: suppress_positive_result in: choice_lsa_grouping in: wait_for_lock)\nl3vpn_I_vpn_I_l3vpn : re-deploy( in: dry_run in: reconcile in: ncs_commit_params in: service_depth out: ncs_commit_result)\nl3vpn_I_vpn_I_l3vpn : reactive-re-deploy( in: sync out: ncs_commit_result)\nl3vpn_I_vpn_I_l3vpn : touch()\nclass \"modified\" as  l3vpn_I_vpn_I_l3vpn_I_modified \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_vpn_I_l3vpn *-- \"1\" l3vpn_I_vpn_I_l3vpn_I_modified \nl3vpn_I_vpn_I_l3vpn_I_modified : callpoint:ncs()\nl3vpn_I_vpn_I_l3vpn_I_modified : devices []: leafref : /ncs:devices/ncs:device/ncs:name \nl3vpn_I_vpn_I_l3vpn_I_modified : services []: instance-identifier \nl3vpn_I_vpn_I_l3vpn_I_modified : lsa-services []: instance-identifier \nclass \"directly-modified\" as  l3vpn_I_vpn_I_l3vpn_I_directly_modified \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_vpn_I_l3vpn *-- \"1\" l3vpn_I_vpn_I_l3vpn_I_directly_modified \nl3vpn_I_vpn_I_l3vpn_I_directly_modified : callpoint:ncs()\nl3vpn_I_vpn_I_l3vpn_I_directly_modified : devices []: leafref : /ncs:devices/ncs:device/ncs:name \nl3vpn_I_vpn_I_l3vpn_I_directly_modified : services []: instance-identifier \nl3vpn_I_vpn_I_l3vpn_I_directly_modified : lsa-services []: instance-identifier \nl3vpn_I_vpn_I_l3vpn : get-modifications( in: outformat in: reverse in: service_depth in: choice_lsa_grouping)\nl3vpn_I_vpn_I_l3vpn : un-deploy( in: ignore_refcount in: dry_run in: ncs_commit_params out: ncs_commit_result)\nl3vpn_I_vpn_I_l3vpn : used-by-customer-service []: leafref : /ncs:services/ncs:customer-service/ncs:object-id  {Config : false}\nclass \"commit-queue\" as  l3vpn_I_vpn_I_l3vpn_I_commit_queue \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_vpn_I_l3vpn *-- \"1\" l3vpn_I_vpn_I_l3vpn_I_commit_queue \nl3vpn_I_vpn_I_l3vpn_I_commit_queue : cdboper()\nl3vpn_I_vpn_I_l3vpn_I_commit_queue : clear()\nclass \"queue-item\" as l3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_vpn_I_l3vpn_I_commit_queue *-- \"0..N\" l3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item : +id : uint64  {key} \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item : status : enumeration : {waiting,executing,blocking,...}  \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item : cleared-by-admin : empty  \nclass \"failed-device\" as l3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item_I_failed_device \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item *-- \"0..N\" l3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item_I_failed_device \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item_I_failed_device : +name : leafref : /ncs:devices/ncs:device/ncs:name  {key} \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item_I_failed_device : time : yang:date-and-time  \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item_I_failed_device : config-data : string  \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item_I_failed_device : error : string  \nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item : admin-clear()\nl3vpn_I_vpn_I_l3vpn_I_commit_queue_I_queue_item : delete()\nclass \"private\" as  l3vpn_I_vpn_I_l3vpn_I_private \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_vpn_I_l3vpn *-- \"1\" l3vpn_I_vpn_I_l3vpn_I_private \nl3vpn_I_vpn_I_l3vpn_I_private : diff-set : binary  \nl3vpn_I_vpn_I_l3vpn_I_private : forward-diff-set : binary  \nl3vpn_I_vpn_I_l3vpn_I_private : device-list []: string \nl3vpn_I_vpn_I_l3vpn_I_private : ned-id-list []: string \nl3vpn_I_vpn_I_l3vpn_I_private : service-list []: instance-identifier \nl3vpn_I_vpn_I_l3vpn_I_private : lsa-service-list []: yang:xpath1.0 \nl3vpn_I_vpn_I_l3vpn_I_private : synthesizer-kicker-list []: instance-identifier \nclass \"property-list\" as  l3vpn_I_vpn_I_l3vpn_I_private_I_property_list \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_vpn_I_l3vpn_I_private *-- \"1\" l3vpn_I_vpn_I_l3vpn_I_private_I_property_list \nclass \"property\" as l3vpn_I_vpn_I_l3vpn_I_private_I_property_list_I_property \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_vpn_I_l3vpn_I_private_I_property_list *-- \"0..N\" l3vpn_I_vpn_I_l3vpn_I_private_I_property_list_I_property \nl3vpn_I_vpn_I_l3vpn_I_private_I_property_list_I_property : +name : string  {key} \nl3vpn_I_vpn_I_l3vpn_I_private_I_property_list_I_property : value : string  \nl3vpn_I_vpn_I_l3vpn_I_private : re-deploy-counter : int32   = 0 \nl3vpn_I_vpn_I_l3vpn_I_private : latest-commit-params : binary  \nl3vpn_I_vpn_I_l3vpn_I_private : latest-u-info : binary  \nl3vpn_I_vpn_I_l3vpn : plan-location : instance-identifier   {Config : false}\nclass \"log\" as  l3vpn_I_vpn_I_l3vpn_I_log \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_vpn_I_l3vpn *-- \"1\" l3vpn_I_vpn_I_l3vpn_I_log \nl3vpn_I_vpn_I_l3vpn_I_log : cdboper()\nl3vpn_I_vpn_I_l3vpn_I_log : purge( in: filter_input out: purged_log_entries)\nclass \"log-entry\" as l3vpn_I_vpn_I_l3vpn_I_log_I_log_entry \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_vpn_I_l3vpn_I_log *-- \"0..N\" l3vpn_I_vpn_I_l3vpn_I_log_I_log_entry \nl3vpn_I_vpn_I_l3vpn_I_log_I_log_entry : +when : yang:date-and-time  {key} \nl3vpn_I_vpn_I_l3vpn_I_log_I_log_entry : type : log-entry-t   {mandatory}\nl3vpn_I_vpn_I_l3vpn_I_log_I_log_entry : level : log-entry-level-t   {mandatory}\nl3vpn_I_vpn_I_l3vpn_I_log_I_log_entry : message : string  \nl3vpn_I_vpn_I_l3vpn : as-number : uint32   {mandatory}\nclass \"endpoint\" as l3vpn_I_vpn_I_l3vpn_I_endpoint \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_vpn_I_l3vpn *-- \"0..N\" l3vpn_I_vpn_I_l3vpn_I_endpoint \nl3vpn_I_vpn_I_l3vpn_I_endpoint : +id : string  {key} \nl3vpn_I_vpn_I_l3vpn_I_endpoint : ce-device : leafref : /ncs:devices/ncs:device/ncs:name   {mandatory}\nl3vpn_I_vpn_I_l3vpn_I_endpoint : ce-interface : string   {mandatory}\nl3vpn_I_vpn_I_l3vpn_I_endpoint : ip-network : inet:ip-prefix   {mandatory}\nl3vpn_I_vpn_I_l3vpn_I_endpoint : bandwidth : uint32   {mandatory}\nclass \"qos\" as  l3vpn_I_vpn_I_l3vpn_I_qos \u003c\u003ccontainer\u003e\u003e \nl3vpn_I_vpn_I_l3vpn *-- \"1\" l3vpn_I_vpn_I_l3vpn_I_qos \nl3vpn_I_vpn_I_l3vpn_I_qos : qos-policy : leafref : /l3vpn:qos/qos-policy/name  \nclass \"custom-qos-match\" as l3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match \u003c\u003c (L, #FF7700) list\u003e\u003e \nl3vpn_I_vpn_I_l3vpn_I_qos *-- \"0..N\" l3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match \nl3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match : +name : string  {key} \nl3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match : qos-class : leafref : /l3vpn:qos/qos-class/name   {mandatory}\nl3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match : source-ip : qos-match-type  \nl3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match : destination-ip : qos-match-type  \nl3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match : port-start : inet:port-number  \nl3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match : port-end : inet:port-number  \nl3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match : protocol : protocol-type  \nclass \"/ncs:devices/ncs:device\" as tailf_ncs_devices_I_devices_I_device \u003c\u003cleafref\u003e\u003e \nclass \"/qos/qos-class\" as l3vpn_I_qos_I_qos_class \u003c\u003cleafref\u003e\u003e \nclass \"/ncs:devices/ncs:device\" as tailf_ncs_devices_I_devices_I_device \u003c\u003cleafref\u003e\u003e \nl3vpn_I_topology_I_role--\u003e\"ncs:name\"tailf_ncs_devices_I_devices_I_device: device\nl3vpn_I_qos_I_qos_policy_I_class--\u003e\"name\"l3vpn_I_qos_I_qos_class: qos-class\nl3vpn_I_vpn_I_l3vpn_I_endpoint--\u003e\"ncs:name\"tailf_ncs_devices_I_devices_I_device: ce-device\nl3vpn_I_vpn_I_l3vpn_I_qos--\u003e\"name\"l3vpn_I_qos_I_qos_policy: qos-policy\nl3vpn_I_vpn_I_l3vpn_I_qos_I_custom_qos_match--\u003e\"name\"l3vpn_I_qos_I_qos_class: qos-class\n@enduml\n\n```\n\n## Pre-requisites\n\nncs-uml supports both trains of **python** `2.7+ and 3.1+`, the OS should not matter.\n\n- pyang is used to translate the data.\n\n## Installation and Downloads\n\nThe best way to get ncs-uml is with setuptools or pip. If you already have setuptools, you can install as usual:\n\n`python -m pip install ncs-uml`\n\nOtherwise download it from PyPi, extract it and run the `setup.py` script\n\n`python setup.py install`\n\nIf you're Interested in the source, you can always pull from the github repo:\n\n- From github `git clone https://github.com/kirankotari/ncs-uml.git`\n\n## FAQ\n\n- **Question:** Can we create uml diagram for the yang sub-module?  \n **Answer:** No, currently we are allowing modules only, we are going to add sub-modules to the module before generating uml diagram\n\n- **Question:** Can I create uml diagram for 2 files at at time?  \n **Answer:** No, currently we are allowing one file at a time.\n\n## Bug Tracker and Support\n\n- Please report any suggestions, bug reports, or annoyances with pingping through the [Github bug tracker](https://github.com/kirankotari/ncs-uml/issues).\n\n\n## License and Copyright\n\n- ncs-uml is licensed [Apache 2.0](https://opensource.org/license/apache-2-0/) *2023*\n\n   [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-yellow)](https://opensource.org/license/apache-2-0/)\n\n## Author and Thanks\n\nncs-uml was developed by [Kiran Kumar Kotari](https://github.com/kirankotari)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkirankotari%2Fncs-uml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkirankotari%2Fncs-uml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkirankotari%2Fncs-uml/lists"}