diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 4abe9e6..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -recursive-include ttp_templates *.txt *.py *.ttp \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 65bf3de..7dba973 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,7 @@ --- -**Templates count: 52** +**Templates count: 55** --- diff --git a/docs/ttp_templates/misc.N2G.cli_isis_data.cisco_xr.md b/docs/ttp_templates/misc.N2G.cli_isis_data.cisco_xr.md index 58aae0a..f056eb8 100644 --- a/docs/ttp_templates/misc.N2G.cli_isis_data.cisco_xr.md +++ b/docs/ttp_templates/misc.N2G.cli_isis_data.cisco_xr.md @@ -15,68 +15,30 @@ Template to parse ISIS LSDB of Cisco IOS-XR devices out of This template produces this structure: ``` -[[{'isis_processes': {'100': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '9', - 'local_ip': '10.123.0.17', - 'metric': '16777214', - 'peer_intf_id': '50', - 'peer_ip': '10.123.0.18', - 'peer_name': 'R1-X2'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': '10.111.1.1/32'}], - 'rid': '10.111.1.1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '48', - 'local_ip': '10.123.0.33', - 'metric': '456', - 'peer_intf_id': '53', - 'peer_ip': '10.123.0.34', - 'peer_name': 'R2-X2'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': '10.111.1.2/32'}], - 'rid': '10.111.1.2'}]}, - '200': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '57', - 'peer_name': 'R2-X1'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': 'fddd:2:c101::1/128'},, - 'rid': 'fddd:2:c101::1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '60', - 'peer_name': 'R2-X2'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': 'fdff::/36'}], - 'rid': 'fddd:2:c101::2'}]}}}]] +[[{'isis_processes': {'100': {'R1-X1': [{'isis_area': '49.0001', + 'level': 'Level-2', + 'links': [{'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '9', + 'local_ip': '10.123.0.17', + 'metric': '16777214', + 'peer_intf_id': '50', + 'peer_ip': '10.123.0.18', + 'peer_name': 'R1-X2'}, + {'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '7', + 'local_ip': '10.123.0.25', + 'metric': '123', + 'peer_intf_id': '53', + 'peer_ip': '10.123.0.26', + 'peer_name': 'R2-X1'}], + 'networks': [{'isis_pid': '100', + 'metric': '0', + 'network': '10.111.1.1/32'}], + 'rid': '10.111.1.1'}]}}}]] ``` diff --git a/docs/ttp_templates/misc.N2G.cli_isis_data.juniper.md b/docs/ttp_templates/misc.N2G.cli_isis_data.juniper.md new file mode 100644 index 0000000..0cbfe6e --- /dev/null +++ b/docs/ttp_templates/misc.N2G.cli_isis_data.juniper.md @@ -0,0 +1,119 @@ +Reference path: +``` +ttp://misc/N2G/cli_isis_data/juniper.txt +``` + +--- + + + +Template to parse Juniper JunOS "show isis database extensive | no-more" output. + + +Template to parse ISIS LSDB of Juniper JunOS devices out of +"show isis database extensive | no-more" command output. + +For this sample data: +``` +IS-IS level 2 link-state database: + +R1-X1.00-00 Sequence: 0x22425, Checksum: 0x8904, Lifetime: 463 secs + IS neighbor: R1-X2.00 Metric: 20 + Two-way fragment: R1-X2.00-00, Two-way first fragment: R1-X2.00-00 + IP prefix: 10.123.123.31/32 Metric: 0 Internal Up + IP prefix: 10.123.123.41/32 Metric: 0 Internal Up + V6 prefix: ::ffff:10.123.111.236/126 Metric: 20 Internal Up + + Header: LSP ID: R1-X1.00-00, Length: 233 bytes + Allocated length: 284 bytes, Router ID: 10.123.123.31 + Remaining lifetime: 463 secs, Level: 2, Interface: 80 + Estimated free bytes: 51, Actual free bytes: 51 + Aging timer expires in: 463 secs + Protocols: IP, IPv6 + + Packet: LSP ID: R1-X1.00-00, Length: 233 bytes, Lifetime : 1194 secs + Checksum: 0x8904, Sequence: 0x22425, Attributes: 0x3 L1 L2 + NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes + Packet type: 20, Packet version: 1, Max area: 0 + + TLVs: + Area address: 49.0001 (3) + LSP Buffer Size: 1492 + Speaks: IP + Speaks: IPV6 + IP router id: 10.123.123.31 + IP address: 10.123.123.31 + IPv6 TE Router ID: 2001::10:123:123:31 + Hostname: R1-X1 + Extended IS Reachability TLV, Type: 22, Length: 85 + IS extended neighbor: R1-X2.00, Metric: default 20 SubTLV len: 74 + IP address: 10.123.111.238 + Neighbor's IP address: 10.123.111.237 + Local interface index: 332, Remote interface index: 461 + Current reservable bandwidth: + Priority 0 : 7Gbps + Priority 1 : 7Gbps + Priority 2 : 7Gbps + Priority 3 : 7Gbps + Priority 4 : 7Gbps + Priority 5 : 7Gbps + Priority 6 : 6.7Gbps + Priority 7 : 6.7Gbps + Maximum reservable bandwidth: 7Gbps + Maximum bandwidth: 10Gbps + Administrative groups: 0 none + IPv6 prefix: ::ffff:10.123.111.236/126 Metric 20 Up + IP extended prefix: 10.123.123.31/32 metric 0 up + IP extended prefix: 10.123.123.41/32 metric 0 up + IP extended prefix: 10.123.111.236/30 metric 20 up + IP address: 10.123.123.41 + Authentication data: 17 bytes + No queued transmissions +``` + +This template produces this result: +``` +[[{'isis_processes': {'ISIS': {'R1-X1': [{'isis_area': '49.0001', + 'level': '2', + 'links': [{'bw_gbit': '10', + 'local_intf_id': '332', + 'local_ip': '10.123.111.238', + 'metric': '20', + 'peer_intf_id': '461', + 'peer_ip': '10.123.111.237', + 'peer_name': 'R1-X2'}], + 'networks': [{'metric': '0', + 'network': '10.123.123.31/32'}, + {'metric': '0', + 'network': '10.123.123.41/32'}, + {'metric': '20', + 'network': '::ffff:10.123.111.236/126'}], + 'rid': '10.123.123.31', + 'rid_v6': '2001::10:123:123:31'}]}}}]] +``` + +Notes: + +- Process ID (PID) always set to `ISIS` value as PID does not present in + "show isis database extensive | no-more" command output on Juniper devices. + + + +--- + +
Template Content +``` + +Template to parse Juniper JunOS "show isis database extensive | no-more" output. + + + +# Starting with Netmiko 3.4.0 can use run_ttp method to populate this template with below commands output +commands = [ + "show isis database extensive | no-more", +] + + + +``` +
\ No newline at end of file diff --git a/docs/ttp_templates/misc.N2G.cli_l2_data.cisco_xr.md b/docs/ttp_templates/misc.N2G.cli_l2_data.cisco_xr.md index cc1748b..637bbdb 100644 --- a/docs/ttp_templates/misc.N2G.cli_l2_data.cisco_xr.md +++ b/docs/ttp_templates/misc.N2G.cli_l2_data.cisco_xr.md @@ -9,6 +9,13 @@ ttp://misc/N2G/cli_l2_data/cisco_xr.txt This template designed to parse Cisco IOSXR configuration and CDP and LLDP neighbors. +Commands parsed: + +- show lldp - to extract local hostname +- show lldp neighbors detail - to extract LLDP neighbors +- show running-config interface - to extract interfaces description and LAGs +- show cdp neighbors detail - show extract CDP neighbors +- show interfaces - to extract interface state to add all connected nodes @@ -21,8 +28,16 @@ This template designed to parse Cisco IOSXR configuration and CDP and LLDP neigh This template designed to parse Cisco IOSXR configuration and CDP and LLDP neighbors. +Commands parsed: + +- show lldp - to extract local hostname +- show lldp neighbors detail - to extract LLDP neighbors +- show running-config interface - to extract interfaces description and LAGs +- show cdp neighbors detail - show extract CDP neighbors +- show interfaces - to extract interface state to add all connected nodes + local_hostname="gethostname" @@ -31,8 +46,27 @@ def check_is_physical_port(data): if data.startswith(item) and not "." in item: return data, {"is_physical_port": True} return data + +def add_lldp_target_id(data): + """ + Some LLDP peers output does not contain System Name, this macro + is to make sure we assign chassis_id as target.id in that case. + """ + if ( + not data.get("target", {}).get("id") and + data.get("data", {}).get("chassis_id") + ): + data.setdefault("target", {}) + data["target"]["id"] = data["data"]["chassis_id"] + return data + + +Global LLDP information: {{ _start_ }} + LLDP System Name: {{ local_hostname | record("local_hostname") }} + + interface {{ interface | resuball(IfsNormalize) }} @@ -63,15 +97,24 @@ interface {{ interface | resuball(IfsNormalize) }} - + Local Interface: {{ src_label | resuball(IfsNormalize) }} Chassis id: {{ data.chassis_id }} Port id: {{ trgt_label | ORPHRASE | resuball(IfsNormalize) }} Port Description: {{ data.peer_port_description | re(".+") }} -System Name: {{ target.id | split(".") | item(0) | split("(") | item(0) }} +System Name: {{ target.id | split("(") | item(0) }} +System Name: {{ data.peer_system_name | PHRASE }} System Capabilities: {{ data.peer_capabilities | ORPHRASE }} IPv4 address: {{ target.top_label }} {{ source | set("local_hostname") }} + + +System Description: {{ _start_ }} + {{ peer_system_description | ORPHRASE | contains(",") }} +{{ peer_system_description | ORPHRASE | contains(",") }} +{{ _end_ }} + + diff --git a/docs/ttp_templates/misc.N2G.cli_l2_data.juniper.md b/docs/ttp_templates/misc.N2G.cli_l2_data.juniper.md new file mode 100644 index 0000000..99dad27 --- /dev/null +++ b/docs/ttp_templates/misc.N2G.cli_l2_data.juniper.md @@ -0,0 +1,107 @@ +Reference path: +``` +ttp://misc/N2G/cli_l2_data/juniper.txt +``` + +--- + + + +This template designed to parse Juniper JunOS configuration and LLDP neighbors. + +Commands parsed: + +- show lldp local-information - to extract local hostname +- show lldp neighbors - to extract LLDP neighbors +- show configuration interfaces | display set | no-more - to extract interfaces confgiuration and LAG details +- show interfaces detail | no-more - to extract interfaces state to add all connected devices + + + +--- + +
Template Content +``` + +``` +
\ No newline at end of file diff --git a/docs/ttp_templates/platform.cisco_xr_show_isis_database_verbose.md b/docs/ttp_templates/platform.cisco_xr_show_isis_database_verbose.md index ec9ae15..b089623 100644 --- a/docs/ttp_templates/platform.cisco_xr_show_isis_database_verbose.md +++ b/docs/ttp_templates/platform.cisco_xr_show_isis_database_verbose.md @@ -12,68 +12,30 @@ Template to parse ISIS LSDB of Cisco IOS-XR devices out of This template produces this structure: ``` -[[{'isis_processes': {'100': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '9', - 'local_ip': '10.123.0.17', - 'metric': '16777214', - 'peer_intf_id': '50', - 'peer_ip': '10.123.0.18', - 'peer_name': 'R1-X2'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': '10.111.1.1/32'}], - 'rid': '10.111.1.1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '48', - 'local_ip': '10.123.0.33', - 'metric': '456', - 'peer_intf_id': '53', - 'peer_ip': '10.123.0.34', - 'peer_name': 'R2-X2'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': '10.111.1.2/32'}], - 'rid': '10.111.1.2'}]}, - '200': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '57', - 'peer_name': 'R2-X1'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': 'fddd:2:c101::1/128'},, - 'rid': 'fddd:2:c101::1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '60', - 'peer_name': 'R2-X2'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': 'fdff::/36'}], - 'rid': 'fddd:2:c101::2'}]}}}]] +[[{'isis_processes': {'100': {'R1-X1': [{'isis_area': '49.0001', + 'level': 'Level-2', + 'links': [{'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '9', + 'local_ip': '10.123.0.17', + 'metric': '16777214', + 'peer_intf_id': '50', + 'peer_ip': '10.123.0.18', + 'peer_name': 'R1-X2'}, + {'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '7', + 'local_ip': '10.123.0.25', + 'metric': '123', + 'peer_intf_id': '53', + 'peer_ip': '10.123.0.26', + 'peer_name': 'R2-X1'}], + 'networks': [{'isis_pid': '100', + 'metric': '0', + 'network': '10.111.1.1/32'}], + 'rid': '10.111.1.1'}]}}}]] ``` @@ -88,92 +50,53 @@ Template to parse ISIS LSDB of Cisco IOS-XR devices out of This template produces this structure: ''' -[[{'isis_processes': {'100': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '9', - 'local_ip': '10.123.0.17', - 'metric': '16777214', - 'peer_intf_id': '50', - 'peer_ip': '10.123.0.18', - 'peer_name': 'R1-X2'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': '10.111.1.1/32'}], - 'rid': '10.111.1.1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '48', - 'local_ip': '10.123.0.33', - 'metric': '456', - 'peer_intf_id': '53', - 'peer_ip': '10.123.0.34', - 'peer_name': 'R2-X2'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': '10.111.1.2/32'}], - 'rid': '10.111.1.2'}]}, - '200': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '57', - 'peer_name': 'R2-X1'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': 'fddd:2:c101::1/128'},, - 'rid': 'fddd:2:c101::1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '60', - 'peer_name': 'R2-X2'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': 'fdff::/36'}], - 'rid': 'fddd:2:c101::2'}]}}}]] +[[{'isis_processes': {'100': {'R1-X1': [{'isis_area': '49.0001', + 'level': 'Level-2', + 'links': [{'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '9', + 'local_ip': '10.123.0.17', + 'metric': '16777214', + 'peer_intf_id': '50', + 'peer_ip': '10.123.0.18', + 'peer_name': 'R1-X2'}, + {'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '7', + 'local_ip': '10.123.0.25', + 'metric': '123', + 'peer_intf_id': '53', + 'peer_ip': '10.123.0.26', + 'peer_name': 'R2-X1'}], + 'networks': [{'isis_pid': '100', + 'metric': '0', + 'network': '10.111.1.1/32'}], + 'rid': '10.111.1.1'}]}}}]] ''' - + IS-IS {{ pid }} ({{ level }}) Link State Database - -{{ lsp_id | _start_ }}.00-00 * {{ ignore }} {{ ignore }} 65487/* 0/0/0 -{{ lsp_id | _start_ }}.00-00 {{ ignore }} {{ ignore }} 64768/65535 0/0/0 -{{ lsp_id | _start_ }}.00-00* {{ ignore }} {{ ignore }} 65487/* 0/0/0 + +{{ hostname | _start_ }}.00-00{{ ignore(r"[\s\*]") }} {{ ignore }} {{ ignore }} {{ ignore(r"[/\d\s\*]+") }} 0/0/0 +{{ hostname | _start_ }}.00-00{{ ignore(r"[\s\*]") }} * {{ ignore }} {{ ignore }} {{ ignore(r"[/\d\s\*]+") }} 0/0/0 + Auth: {{ auth }}, Length: 17 Area Address: {{ isis_area }} Router ID: {{ rid }} - Hostname: {{ hostname }} - IPv6 Address: {{ rid }} - IPv6 Router ID: {{ rid }} - - + IPv6 Router ID: {{ rid_v6 }} + IPv6 Router ID: {{ rid_v6 }} + + Metric: {{ metric | _start_ }} IP-Extended {{ network }} Metric: {{ metric | _start_ }} MT (IPv6 Unicast) IPv6 {{ network | _exact_ }} Metric: {{ metric | _start_ }} MT (IPv6 Unicast) IPv6-Ext-InAr {{ network | _exact_ }} - + Metric: {{ metric | _start_ }} IS-Extended {{ peer_name }}.00 Metric: {{ metric | _start_ }} MT (IPv6 Unicast) IS-Extended {{ peer_name }}.00 Local Interface ID: {{ local_intf_id }}, Remote Interface ID: {{ peer_intf_id }} @@ -187,10 +110,10 @@ IS-IS {{ pid }} ({{ level }}) Link State Database END.X SID: {{ sid | IPV6}} B:0 S:0 P:0 uA (PSP/USD) Alg:{{ algo }} Block Length: {{ block_length }}, Node-ID Length: {{ node_id_length }}, Func-Length: {{ func_length }}, Args-Length: {{ args_length }} - + - + SRv6 Locator: MT (IPv6 Unicast) {{ locator | IPV6 }}/{{ mask }} D:0 Metric: 0 Algorithm: {{ algo }} diff --git a/docs/ttp_templates/platform.juniper_show_isis_database_verbose_pipe_no_more.md b/docs/ttp_templates/platform.juniper_show_isis_database_verbose_pipe_no_more.md new file mode 100644 index 0000000..e16d65c --- /dev/null +++ b/docs/ttp_templates/platform.juniper_show_isis_database_verbose_pipe_no_more.md @@ -0,0 +1,218 @@ +Reference path: +``` +ttp://platform/juniper_show_isis_database_verbose_pipe_no_more.txt +``` + +--- + + + +Template to parse ISIS LSDB of Juniper JunOS devices out of +"show isis database extensive | no-more" command output. + +For this sample data: +``` +IS-IS level 2 link-state database: + +R1-X1.00-00 Sequence: 0x22425, Checksum: 0x8904, Lifetime: 463 secs + IS neighbor: R1-X2.00 Metric: 20 + Two-way fragment: R1-X2.00-00, Two-way first fragment: R1-X2.00-00 + IP prefix: 10.123.123.31/32 Metric: 0 Internal Up + IP prefix: 10.123.123.41/32 Metric: 0 Internal Up + V6 prefix: ::ffff:10.123.111.236/126 Metric: 20 Internal Up + + Header: LSP ID: R1-X1.00-00, Length: 233 bytes + Allocated length: 284 bytes, Router ID: 10.123.123.31 + Remaining lifetime: 463 secs, Level: 2, Interface: 80 + Estimated free bytes: 51, Actual free bytes: 51 + Aging timer expires in: 463 secs + Protocols: IP, IPv6 + + Packet: LSP ID: R1-X1.00-00, Length: 233 bytes, Lifetime : 1194 secs + Checksum: 0x8904, Sequence: 0x22425, Attributes: 0x3 L1 L2 + NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes + Packet type: 20, Packet version: 1, Max area: 0 + + TLVs: + Area address: 49.0001 (3) + LSP Buffer Size: 1492 + Speaks: IP + Speaks: IPV6 + IP router id: 10.123.123.31 + IP address: 10.123.123.31 + IPv6 TE Router ID: 2001::10:123:123:31 + Hostname: R1-X1 + Extended IS Reachability TLV, Type: 22, Length: 85 + IS extended neighbor: R1-X2.00, Metric: default 20 SubTLV len: 74 + IP address: 10.123.111.238 + Neighbor's IP address: 10.123.111.237 + Local interface index: 332, Remote interface index: 461 + Current reservable bandwidth: + Priority 0 : 7Gbps + Priority 1 : 7Gbps + Priority 2 : 7Gbps + Priority 3 : 7Gbps + Priority 4 : 7Gbps + Priority 5 : 7Gbps + Priority 6 : 6.7Gbps + Priority 7 : 6.7Gbps + Maximum reservable bandwidth: 7Gbps + Maximum bandwidth: 10Gbps + Administrative groups: 0 none + IPv6 prefix: ::ffff:10.123.111.236/126 Metric 20 Up + IP extended prefix: 10.123.123.31/32 metric 0 up + IP extended prefix: 10.123.123.41/32 metric 0 up + IP extended prefix: 10.123.111.236/30 metric 20 up + IP address: 10.123.123.41 + Authentication data: 17 bytes + No queued transmissions +``` + +This template produces this result: +``` +[[{'isis_processes': {'ISIS': {'R1-X1': [{'isis_area': '49.0001', + 'level': '2', + 'links': [{'bw_gbit': '10', + 'local_intf_id': '332', + 'local_ip': '10.123.111.238', + 'metric': '20', + 'peer_intf_id': '461', + 'peer_ip': '10.123.111.237', + 'peer_name': 'R1-X2'}], + 'networks': [{'metric': '0', + 'network': '10.123.123.31/32'}, + {'metric': '0', + 'network': '10.123.123.41/32'}, + {'metric': '20', + 'network': '::ffff:10.123.111.236/126'}], + 'rid': '10.123.123.31', + 'rid_v6': '2001::10:123:123:31'}]}}}]] +``` + +Notes: + +- Process ID (PID) always set to `ISIS` value as PID does not present in + "show isis database extensive | no-more" command output on Juniper devices. + + + +--- + +
Template Content +``` + +Template to parse ISIS LSDB of Juniper JunOS devices out of +"show isis database extensive | no-more" command output. + +For this sample data: +''' +IS-IS level 2 link-state database: + +R1-X1.00-00 Sequence: 0x22425, Checksum: 0x8904, Lifetime: 463 secs + IS neighbor: R1-X2.00 Metric: 20 + Two-way fragment: R1-X2.00-00, Two-way first fragment: R1-X2.00-00 + IP prefix: 10.123.123.31/32 Metric: 0 Internal Up + IP prefix: 10.123.123.41/32 Metric: 0 Internal Up + V6 prefix: ::ffff:10.123.111.236/126 Metric: 20 Internal Up + + Header: LSP ID: R1-X1.00-00, Length: 233 bytes + Allocated length: 284 bytes, Router ID: 10.123.123.31 + Remaining lifetime: 463 secs, Level: 2, Interface: 80 + Estimated free bytes: 51, Actual free bytes: 51 + Aging timer expires in: 463 secs + Protocols: IP, IPv6 + + Packet: LSP ID: R1-X1.00-00, Length: 233 bytes, Lifetime : 1194 secs + Checksum: 0x8904, Sequence: 0x22425, Attributes: 0x3 L1 L2 + NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes + Packet type: 20, Packet version: 1, Max area: 0 + + TLVs: + Area address: 49.0001 (3) + LSP Buffer Size: 1492 + Speaks: IP + Speaks: IPV6 + IP router id: 10.123.123.31 + IP address: 10.123.123.31 + IPv6 TE Router ID: 2001::10:123:123:31 + Hostname: R1-X1 + Extended IS Reachability TLV, Type: 22, Length: 85 + IS extended neighbor: R1-X2.00, Metric: default 20 SubTLV len: 74 + IP address: 10.123.111.238 + Neighbor's IP address: 10.123.111.237 + Local interface index: 332, Remote interface index: 461 + Current reservable bandwidth: + Priority 0 : 7Gbps + Priority 1 : 7Gbps + Priority 2 : 7Gbps + Priority 3 : 7Gbps + Priority 4 : 7Gbps + Priority 5 : 7Gbps + Priority 6 : 6.7Gbps + Priority 7 : 6.7Gbps + Maximum reservable bandwidth: 7Gbps + Maximum bandwidth: 10Gbps + Administrative groups: 0 none + IPv6 prefix: ::ffff:10.123.111.236/126 Metric 20 Up + IP extended prefix: 10.123.123.31/32 metric 0 up + IP extended prefix: 10.123.123.41/32 metric 0 up + IP extended prefix: 10.123.111.236/30 metric 20 up + IP address: 10.123.123.41 + Authentication data: 17 bytes + No queued transmissions +''' + +This template produces this result: +''' +[[{'isis_processes': {'ISIS': {'R1-X1': [{'isis_area': '49.0001', + 'level': '2', + 'links': [{'bw_gbit': '10', + 'local_intf_id': '332', + 'local_ip': '10.123.111.238', + 'metric': '20', + 'peer_intf_id': '461', + 'peer_ip': '10.123.111.237', + 'peer_name': 'R1-X2'}], + 'networks': [{'metric': '0', + 'network': '10.123.123.31/32'}, + {'metric': '0', + 'network': '10.123.123.41/32'}, + {'metric': '20', + 'network': '::ffff:10.123.111.236/126'}], + 'rid': '10.123.123.31', + 'rid_v6': '2001::10:123:123:31'}]}}}]] +''' + +Notes: + +- Process ID (PID) always set to 'ISIS' value as PID does not present in + "show isis database extensive | no-more" command output on Juniper devices. + + + +IS-IS level {{ level }} link-state database: + + +{{ hostname }}.00-00 Sequence: {{ ignore }}, Checksum: {{ ignore }}, Lifetime: {{ ignore }} secs + + Area address: {{ isis_area }} (3) + IP router id: {{ rid }} + IPv6 TE Router ID: {{ rid_v6 }} + + + IP prefix: {{ network }} Metric: {{ metric | _start_ }} Internal Up + V6 prefix: {{ network }} Metric: {{ metric | _start_ }} Internal Up + + + + IS extended neighbor: {{ peer_name }}.00, Metric: default {{ metric | _start_ }} SubTLV len: 74 + IP address: {{ local_ip }} + Neighbor's IP address: {{ peer_ip }} + Local interface index: {{ local_intf_id }}, Remote interface index: {{ peer_intf_id }} + Maximum bandwidth: {{ bw_gbit }}Gbps + + + + +``` +
\ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index a95b342..723b62f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -26,11 +26,13 @@ nav: - cli_ip_data.huawei: ttp_templates/misc.N2G.cli_ip_data.huawei.md - cli_ip_data.readme: ttp_templates/misc.N2G.cli_ip_data.readme.md - cli_isis_data.cisco_xr: ttp_templates/misc.N2G.cli_isis_data.cisco_xr.md + - cli_isis_data.juniper: ttp_templates/misc.N2G.cli_isis_data.juniper.md - cli_isis_data.readme: ttp_templates/misc.N2G.cli_isis_data.readme.md - cli_l2_data.cisco_ios: ttp_templates/misc.N2G.cli_l2_data.cisco_ios.md - cli_l2_data.cisco_nxos: ttp_templates/misc.N2G.cli_l2_data.cisco_nxos.md - cli_l2_data.cisco_xr: ttp_templates/misc.N2G.cli_l2_data.cisco_xr.md - cli_l2_data.huawei: ttp_templates/misc.N2G.cli_l2_data.huawei.md + - cli_l2_data.juniper: ttp_templates/misc.N2G.cli_l2_data.juniper.md - cli_l2_data.readme: ttp_templates/misc.N2G.cli_l2_data.readme.md - cli_ospf_data.cisco_ios: ttp_templates/misc.N2G.cli_ospf_data.cisco_ios.md - cli_ospf_data.cisco_xr: ttp_templates/misc.N2G.cli_ospf_data.cisco_xr.md @@ -69,6 +71,7 @@ nav: - cisco_xr_show_running_config_interface: ttp_templates/platform.cisco_xr_show_running_config_interface.md - huawei_display_current_configuration_interface: ttp_templates/platform.huawei_display_current_configuration_interface.md - huawei_display_ospf_lsdb_router: ttp_templates/platform.huawei_display_ospf_lsdb_router.md + - juniper_show_isis_database_verbose_pipe_no_more: ttp_templates/platform.juniper_show_isis_database_verbose_pipe_no_more.md - test_platform_show_run_pipe_sec_interface: ttp_templates/platform.test_platform_show_run_pipe_sec_interface.md - YANG: - ietf-interfaces_cisco_ios: ttp_templates/yang.ietf-interfaces_cisco_ios.md diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..5255378 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1694 @@ +[[package]] +name = "astroid" +version = "2.9.3" +description = "An abstract syntax tree for Python with inference support." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} +typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} +wrapt = ">=1.11,<1.14" + +[[package]] +name = "astunparse" +version = "1.6.3" +description = "An AST unparser for Python" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +six = ">=1.6.1,<2.0" + +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "21.4.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] + +[[package]] +name = "bandit" +version = "1.7.4" +description = "Security oriented static analyser for python code." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +GitPython = ">=1.0.1" +PyYAML = ">=5.3.1" +stevedore = ">=1.20.0" + +[package.extras] +test = ["coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml", "beautifulsoup4 (>=4.8.0)", "pylint (==1.9.4)"] +toml = ["toml"] +yaml = ["pyyaml"] + +[[package]] +name = "bcrypt" +version = "3.2.2" +description = "Modern password hashing for your software and your servers" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.1" + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + +[[package]] +name = "black" +version = "22.3.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "cerberus" +version = "1.3.4" +description = "Lightweight, extensible schema and data validation tool for Python dictionaries." +category = "dev" +optional = false +python-versions = ">=2.7" + +[[package]] +name = "cffi" +version = "1.15.0" +description = "Foreign Function Interface for Python calling C code." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "colorama" +version = "0.4.5" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "cryptography" +version = "37.0.3" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] +docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +sdist = ["setuptools_rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] + +[[package]] +name = "deepdiff" +version = "5.8.1" +description = "Deep Difference and Search of any Python object/data." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +ordered-set = ">=4.1.0,<4.2.0" + +[package.extras] +cli = ["click (==8.0.3)", "pyyaml (==5.4.1)", "toml (==0.10.2)", "clevercsv (==0.7.1)"] + +[[package]] +name = "distlib" +version = "0.3.4" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "et-xmlfile" +version = "1.1.0" +description = "An implementation of lxml.xmlfile for the standard library" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "filelock" +version = "3.7.1" +description = "A platform independent file lock." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] + +[[package]] +name = "flake8" +version = "4.0.1" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = "<4.3", markers = "python_version < \"3.8\""} +mccabe = ">=0.6.0,<0.7.0" +pycodestyle = ">=2.8.0,<2.9.0" +pyflakes = ">=2.4.0,<2.5.0" + +[[package]] +name = "future" +version = "0.18.2" +description = "Clean single-source support for Python 3 and 2" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["twine", "markdown", "flake8", "wheel"] + +[[package]] +name = "gitdb" +version = "4.0.9" +description = "Git Object Database" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.27" +description = "GitPython is a python library used to interact with Git repositories" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +gitdb = ">=4.0.1,<5" +typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} + +[[package]] +name = "griffe" +version = "0.21.0" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +cached-property = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +async = ["aiofiles (>=0.7,<1.0)"] + +[[package]] +name = "identify" +version = "2.5.1" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "importlib-metadata" +version = "4.2.0" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "isort" +version = "5.10.1" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.6.1,<4.0" + +[package.extras] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] +plugins = ["setuptools"] + +[[package]] +name = "jinja2" +version = "3.0.3" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "lazy-object-proxy" +version = "1.7.1" +description = "A fast and thorough lazy object proxy." +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "markdown" +version = "3.3.5" +description = "Python implementation of Markdown." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.extras] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +category = "main" +optional = true +python-versions = ">=3.6" + +[[package]] +name = "mkdocs" +version = "1.2.4" +description = "Project documentation with Markdown." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +click = ">=3.3" +ghp-import = ">=1.0" +importlib-metadata = ">=3.10" +Jinja2 = ">=2.10.1" +Markdown = ">=3.2.1" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +PyYAML = ">=3.10" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "0.4.1" +description = "Automatically link across pages in MkDocs." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-material" +version = "7.2.2" +description = "A Material Design theme for MkDocs" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +markdown = ">=3.2" +mkdocs = ">=1.1" +mkdocs-material-extensions = ">=1.0" +Pygments = ">=2.4" +pymdown-extensions = ">=7.0" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.0.1" +description = "Extension pack for Python Markdown." +category = "main" +optional = true +python-versions = ">=3.5" + +[package.dependencies] +mkdocs-material = ">=5.0.0" + +[[package]] +name = "mkdocstrings" +version = "0.18.1" +description = "Automatic documentation from sources, for MkDocs." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} +mkdocstrings-python-legacy = ">=0.2" +pymdown-extensions = ">=6.3" + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "0.6.6" +description = "A Python handler for mkdocstrings." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +griffe = ">=0.11.1" +mkdocstrings = ">=0.18" + +[[package]] +name = "mkdocstrings-python-legacy" +version = "0.2.2" +description = "A legacy Python handler for mkdocstrings." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +mkdocstrings = ">=0.18" +pytkdocs = ">=0.14" + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "netmiko" +version = "3.4.0" +description = "Multi-vendor library to simplify Paramiko SSH connections to network devices" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +ntc-templates = "*" +paramiko = ">=2.6.0" +pyserial = "*" +scp = ">=0.13.2" +tenacity = "*" + +[package.extras] +test = ["pyyaml (>=5.1.2)", "pytest (>=5.1.2)"] + +[[package]] +name = "nodeenv" +version = "1.7.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" + +[[package]] +name = "ntc-templates" +version = "3.0.0" +description = "TextFSM Templates for Network Devices, and Python wrapper for TextFSM's CliTable." +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" + +[package.dependencies] +textfsm = ">=1.1.0,<2.0.0" + +[[package]] +name = "openpyxl" +version = "3.0.10" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "ordered-set" +version = "4.1.0" +description = "An OrderedSet is a custom MutableSet that remembers its order, so that every" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +dev = ["pytest", "black", "mypy"] + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "paramiko" +version = "2.11.0" +description = "SSH2 protocol library" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +bcrypt = ">=3.1.3" +cryptography = ">=2.5" +pynacl = ">=1.0.1" +six = "*" + +[package.extras] +all = ["pyasn1 (>=0.1.7)", "pynacl (>=1.0.1)", "bcrypt (>=3.1.3)", "invoke (>=1.3)", "gssapi (>=1.4.1)", "pywin32 (>=2.1.8)"] +ed25519 = ["pynacl (>=1.0.1)", "bcrypt (>=3.1.3)"] +gssapi = ["pyasn1 (>=0.1.7)", "gssapi (>=1.4.1)", "pywin32 (>=2.1.8)"] +invoke = ["invoke (>=1.3)"] + +[[package]] +name = "pathspec" +version = "0.9.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "pbr" +version = "5.9.0" +description = "Python Build Reasonableness" +category = "dev" +optional = false +python-versions = ">=2.6" + +[[package]] +name = "platformdirs" +version = "2.5.2" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "2.15.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pycodestyle" +version = "2.8.0" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pyenchant" +version = "3.2.2" +description = "Python bindings for the Enchant spellchecking system" +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "pyflakes" +version = "2.4.0" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pygments" +version = "2.12.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = true +python-versions = ">=3.6" + +[[package]] +name = "pylint" +version = "2.12.2" +description = "python code static checker" +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +astroid = ">=2.9.0,<2.10" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.7" +platformdirs = ">=2.2.0" +toml = ">=0.9.2" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[[package]] +name = "pymdown-extensions" +version = "9.5" +description = "Extension pack for Python Markdown." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +markdown = ">=3.2" + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["railroad-diagrams", "jinja2"] + +[[package]] +name = "pyserial" +version = "3.5" +description = "Python Serial Port Extension" +category = "dev" +optional = false +python-versions = "*" + +[package.extras] +cp2110 = ["hidapi"] + +[[package]] +name = "pytest" +version = "7.1.2" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +tomli = ">=1.0.0" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = true +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytkdocs" +version = "0.16.1" +description = "Load Python objects documentation." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +astunparse = {version = ">=1.6", markers = "python_version < \"3.9\""} +cached-property = {version = ">=1.5", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=3.7", markers = "python_version < \"3.8\""} + +[package.extras] +numpy-style = ["docstring_parser (>=0.7)"] + +[[package]] +name = "pyxb" +version = "1.2.6" +description = "Python XML Schema Bindings" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "scp" +version = "0.14.4" +description = "scp module for paramiko" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +paramiko = "*" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "stevedore" +version = "3.5.0" +description = "Manage dynamic plugins for Python applications" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""} +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + +[[package]] +name = "tabulate" +version = "0.8.10" +description = "Pretty-print tabular data" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "tenacity" +version = "8.0.1" +description = "Retry code until it succeeds" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "textfsm" +version = "1.1.2" +description = "Python module for parsing semi-structured text into python tables." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +future = "*" +six = "*" + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "ttp" +version = "0.9.0" +description = "Template Text Parser" +category = "main" +optional = false +python-versions = ">=2.7,<4.0" + +[package.extras] +full = ["cerberus (>=1.3.0,<1.4.0)", "jinja2 (>=3.0.0,<3.1.0)", "pyyaml (==6.0)", "deepdiff (>=5.8.0,<5.9.0)", "openpyxl (>=3.0.0,<3.1.0)", "tabulate (>=0.8.0,<0.9.0)", "ttp_templates (<1.0.0)", "yangson (>=1.4.0,<1.5.0)", "n2g (>=0.2.0,<0.3.0)"] +docs = ["readthedocs-sphinx-search (==0.1.1)", "Sphinx (==4.3.0)", "sphinx_rtd_theme (==1.0.0)", "sphinxcontrib-applehelp (==1.0.1)", "sphinxcontrib-devhelp (==1.0.1)", "sphinxcontrib-htmlhelp (==2.0.0)", "sphinxcontrib-jsmath (==1.0.1)", "sphinxcontrib-napoleon (==0.7)", "sphinxcontrib-qthelp (==1.0.2)", "sphinxcontrib-serializinghtml (==1.1.5)", "sphinxcontrib-spelling (==7.2.1)"] + +[[package]] +name = "typed-ast" +version = "1.5.4" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "typing-extensions" +version = "4.2.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "virtualenv" +version = "20.15.0" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +platformdirs = ">=2,<3" +six = ">=1.9.0,<2" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] + +[[package]] +name = "watchdog" +version = "2.1.9" +description = "Filesystem events monitoring" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wrapt" +version = "1.13.3" +description = "Module for decorators, wrappers and monkey patching." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "yangson" +version = "1.4.13" +description = "Library for working with data modelled in YANG" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +PyXB = "*" + +[[package]] +name = "zipp" +version = "3.8.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.6" +content-hash = "5c5c8eac07a6116bb3fa4dea5dd762c56c589a7565b6776e3edc09b44e4b8cbe" + +[metadata.files] +astroid = [ + {file = "astroid-2.9.3-py3-none-any.whl", hash = "sha256:506daabe5edffb7e696ad82483ad0228245a9742ed7d2d8c9cdb31537decf9f6"}, + {file = "astroid-2.9.3.tar.gz", hash = "sha256:1efdf4e867d4d8ba4a9f6cf9ce07cd182c4c41de77f23814feb27ca93ca9d877"}, +] +astunparse = [ + {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, + {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] +bandit = [ + {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, + {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, +] +bcrypt = [ + {file = "bcrypt-3.2.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:7180d98a96f00b1050e93f5b0f556e658605dd9f524d0b0e68ae7944673f525e"}, + {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:61bae49580dce88095d669226d5076d0b9d927754cedbdf76c6c9f5099ad6f26"}, + {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88273d806ab3a50d06bc6a2fc7c87d737dd669b76ad955f449c43095389bc8fb"}, + {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6d2cb9d969bfca5bc08e45864137276e4c3d3d7de2b162171def3d188bf9d34a"}, + {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b02d6bfc6336d1094276f3f588aa1225a598e27f8e3388f4db9948cb707b521"}, + {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c46100e315c3a5b90fdc53e429c006c5f962529bc27e1dfd656292c20ccc40"}, + {file = "bcrypt-3.2.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7d9ba2e41e330d2af4af6b1b6ec9e6128e91343d0b4afb9282e54e5508f31baa"}, + {file = "bcrypt-3.2.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cd43303d6b8a165c29ec6756afd169faba9396a9472cdff753fe9f19b96ce2fa"}, + {file = "bcrypt-3.2.2-cp36-abi3-win32.whl", hash = "sha256:4e029cef560967fb0cf4a802bcf4d562d3d6b4b1bf81de5ec1abbe0f1adb027e"}, + {file = "bcrypt-3.2.2-cp36-abi3-win_amd64.whl", hash = "sha256:7ff2069240c6bbe49109fe84ca80508773a904f5a8cb960e02a977f7f519b129"}, + {file = "bcrypt-3.2.2.tar.gz", hash = "sha256:433c410c2177057705da2a9f2cd01dd157493b2a7ac14c8593a16b3dab6b6bfb"}, +] +black = [ + {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, + {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"}, + {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"}, + {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"}, + {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"}, + {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"}, + {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"}, + {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"}, + {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"}, + {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"}, + {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"}, + {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"}, + {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"}, + {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"}, + {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"}, + {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"}, + {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"}, + {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"}, + {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"}, + {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"}, + {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"}, + {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"}, + {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, +] +cached-property = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] +cerberus = [ + {file = "Cerberus-1.3.4.tar.gz", hash = "sha256:d1b21b3954b2498d9a79edf16b3170a3ac1021df88d197dc2ce5928ba519237c"}, +] +cffi = [ + {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, + {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, + {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, + {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, + {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, + {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, + {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, + {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, + {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, + {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, + {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, + {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, + {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, + {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, + {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, + {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, + {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, +] +cfgv = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, +] +cryptography = [ + {file = "cryptography-37.0.3-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:d10413d493e98075060d3e62e5826de372912ea653ccc948f3c41b21ddca087f"}, + {file = "cryptography-37.0.3-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:cd64147ff16506632893ceb2569624b48c84daa3ba4d89695f7c7bc24188eee9"}, + {file = "cryptography-37.0.3-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:17c74f7d9e9e9bb7e84521243695c1b4bdc3a0e44ca764e6bcf8f05f3de3d0df"}, + {file = "cryptography-37.0.3-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:0713bee6c8077786c56bdec9c5d3f099d40d2c862ff3200416f6862e9dd63156"}, + {file = "cryptography-37.0.3-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9c2008417741cdfbe945ef2d16b7b7ba0790886a0b49e1de533acf93eb66ed6"}, + {file = "cryptography-37.0.3-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:646905ff7a712e415bf0d0f214e0eb669dd2257c4d7a27db1e8baec5d2a1d55f"}, + {file = "cryptography-37.0.3-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:dcafadb5a06cb7a6bb49fb4c1de7414ee2f8c8e12b047606d97c3175d690f582"}, + {file = "cryptography-37.0.3-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0b4bfc5ccfe4e5c7de535670680398fed4a0bbc5dfd52b3a295baad42230abdf"}, + {file = "cryptography-37.0.3-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a03dbc0d8ce8c1146c177cd0e3a66ea106f36733fb1b997ea4d051f8a68539ff"}, + {file = "cryptography-37.0.3-cp36-abi3-win32.whl", hash = "sha256:190a24c14e91c1fa3101069aac7e77d11c5a73911c3904128367f52946bbb6fd"}, + {file = "cryptography-37.0.3-cp36-abi3-win_amd64.whl", hash = "sha256:b05c5478524deb7a019e240f2a970040c4b0f01f58f0425e6262c96b126c6a3e"}, + {file = "cryptography-37.0.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891ed8312840fd43e0696468a6520a582a033c0109f7b14b96067bfe1123226b"}, + {file = "cryptography-37.0.3-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:30d6aabf623a01affc7c0824936c3dde6590076b61f5dd299df3cc2c75fc5915"}, + {file = "cryptography-37.0.3-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:31a7c1f1c2551f013d4294d06e22848e2ccd77825f0987cba3239df6ebf7b020"}, + {file = "cryptography-37.0.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a94fd1ff80001cb97add71d07f596d8b865b716f25ef501183e0e199390e50d3"}, + {file = "cryptography-37.0.3-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8a85dbcc770256918b40c2f40bd3ffd3b2ae45b0cf19068b561db8f8d61bf492"}, + {file = "cryptography-37.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:773d5b5f2e2bd2c7cbb1bd24902ad41283c88b9dd463a0f82adc9a2870d9d066"}, + {file = "cryptography-37.0.3-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0f9193428a55a4347af2d4fd8141a2002dedbcc26487e67fd2ae19f977ee8afc"}, + {file = "cryptography-37.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf652c73e8f7c32a3f92f7184bf7f9106dacdf5ef59c3c3683d7dae2c4972fb"}, + {file = "cryptography-37.0.3-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:c3c8b1ad2c266fdf7adc041cc4156d6a3d14db93de2f81b26a5af97ef3f209e5"}, + {file = "cryptography-37.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2383d6c3088e863304c37c65cd2ea404b7fbb4886823eab1d74137cc27f3d2ee"}, + {file = "cryptography-37.0.3.tar.gz", hash = "sha256:ae430d51c67ac638dfbb42edf56c669ca9c74744f4d225ad11c6f3d355858187"}, +] +deepdiff = [ + {file = "deepdiff-5.8.1-py3-none-any.whl", hash = "sha256:e9aea49733f34fab9a0897038d8f26f9d94a97db1790f1b814cced89e9e0d2b7"}, + {file = "deepdiff-5.8.1.tar.gz", hash = "sha256:8d4eb2c4e6cbc80b811266419cb71dd95a157094a3947ccf937a94d44943c7b8"}, +] +distlib = [ + {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, + {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, +] +et-xmlfile = [ + {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, + {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, +] +filelock = [ + {file = "filelock-3.7.1-py3-none-any.whl", hash = "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404"}, + {file = "filelock-3.7.1.tar.gz", hash = "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04"}, +] +flake8 = [ + {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, + {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, +] +future = [ + {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, +] +ghp-import = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] +gitdb = [ + {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, + {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, +] +gitpython = [ + {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, + {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, +] +griffe = [ + {file = "griffe-0.21.0-py3-none-any.whl", hash = "sha256:e9fb5eeb7c721e1d84804452bdc742bd57b120b13aba663157668ae2d217088a"}, + {file = "griffe-0.21.0.tar.gz", hash = "sha256:61ab3bc02b09afeb489f1aef44c646a09f1837d9cdf15943ac6021903a4d3984"}, +] +identify = [ + {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, + {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, + {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] +isort = [ + {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, + {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, +] +jinja2 = [ + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, +] +lazy-object-proxy = [ + {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, + {file = "lazy_object_proxy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b"}, + {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36"}, + {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb"}, + {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443"}, + {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b"}, + {file = "lazy_object_proxy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9"}, + {file = "lazy_object_proxy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd"}, + {file = "lazy_object_proxy-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442"}, + {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c"}, + {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44"}, + {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1"}, + {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc"}, + {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb"}, + {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35"}, + {file = "lazy_object_proxy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0"}, + {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6"}, + {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c"}, + {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42"}, + {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029"}, + {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69"}, + {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28"}, + {file = "lazy_object_proxy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a"}, + {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e"}, + {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38"}, + {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7"}, + {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a"}, + {file = "lazy_object_proxy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55"}, + {file = "lazy_object_proxy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148"}, + {file = "lazy_object_proxy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de"}, + {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad"}, + {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1"}, + {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8"}, + {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09"}, + {file = "lazy_object_proxy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f"}, + {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, + {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, +] +markdown = [ + {file = "Markdown-3.3.5-py3-none-any.whl", hash = "sha256:0d2d09f75cb8d1ffc6770c65c61770b23a61708101f47bda416a002a0edbc480"}, + {file = "Markdown-3.3.5.tar.gz", hash = "sha256:26e9546bfbcde5fcd072bd8f612c9c1b6e2677cb8aadbdf65206674f46dde069"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] +mccabe = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] +mergedeep = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] +mkdocs = [ + {file = "mkdocs-1.2.4-py3-none-any.whl", hash = "sha256:f108e7ab5a7ed3e30826dbf82f37638f0d90d11161644616cc4f01a1e2ab3940"}, + {file = "mkdocs-1.2.4.tar.gz", hash = "sha256:8e7970a26183487fe2a1041940c6fd03aa0dbe5549e50c3e7194f565cb3c678a"}, +] +mkdocs-autorefs = [ + {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, + {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, +] +mkdocs-material = [ + {file = "mkdocs-material-7.2.2.tar.gz", hash = "sha256:4f501e139e2f8546653e7d8777c9b97ca639d03d8c86345a60609864cc5bbb03"}, + {file = "mkdocs_material-7.2.2-py2.py3-none-any.whl", hash = "sha256:76de22213f0e0319b9bddf1bfa86530e93efb4a604e9ddf8f8419f0438572523"}, +] +mkdocs-material-extensions = [ + {file = "mkdocs-material-extensions-1.0.1.tar.gz", hash = "sha256:6947fb7f5e4291e3c61405bad3539d81e0b3cd62ae0d66ced018128af509c68f"}, + {file = "mkdocs_material_extensions-1.0.1-py3-none-any.whl", hash = "sha256:d90c807a88348aa6d1805657ec5c0b2d8d609c110e62b9dce4daf7fa981fa338"}, +] +mkdocstrings = [ + {file = "mkdocstrings-0.18.1-py3-none-any.whl", hash = "sha256:4053929356df8cd69ed32eef71d8f676a472ef72980c9ffd4f933ead1debcdad"}, + {file = "mkdocstrings-0.18.1.tar.gz", hash = "sha256:fb7c91ce7e3ab70488d3fa6c073a4f827cdc319042f682ef8ea95459790d64fc"}, +] +mkdocstrings-python = [ + {file = "mkdocstrings-python-0.6.6.tar.gz", hash = "sha256:37281696b9f199624ae420e0625b6659b7fdfbea736618bce7fd978682dea3b1"}, + {file = "mkdocstrings_python-0.6.6-py3-none-any.whl", hash = "sha256:c118438d3cb4b14c492a51d109f4e5b27ab06ba19b099d624430dfd904926152"}, +] +mkdocstrings-python-legacy = [ + {file = "mkdocstrings-python-legacy-0.2.2.tar.gz", hash = "sha256:f0e7ec6a19750581b752acb38f6b32fcd1efe006f14f6703125d2c2c9a5c6f02"}, + {file = "mkdocstrings_python_legacy-0.2.2-py3-none-any.whl", hash = "sha256:379107a3a5b8db9b462efc4493c122efe21e825e3702425dbd404621302a563a"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +netmiko = [ + {file = "netmiko-3.4.0-py3-none-any.whl", hash = "sha256:b66f25717db3609878f83c85604349dd40a0ab494d8eafd817dcde8388131136"}, + {file = "netmiko-3.4.0.tar.gz", hash = "sha256:acadb9dd97864ee848e2032f1f0e301c7b31e7a4153757d98f5c8ba1b9614993"}, +] +nodeenv = [ + {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, + {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, +] +ntc-templates = [ + {file = "ntc_templates-3.0.0-py3-none-any.whl", hash = "sha256:a652ff1659803d98fc088fc1b0838a74533316b0ad627c1220c0424dd82d12b3"}, + {file = "ntc_templates-3.0.0.tar.gz", hash = "sha256:866c1b57af48625e1a38cc7226067e400d8a992c4d5594b914cafd7b13fd4a50"}, +] +openpyxl = [ + {file = "openpyxl-3.0.10-py2.py3-none-any.whl", hash = "sha256:0ab6d25d01799f97a9464630abacbb34aafecdcaa0ef3cba6d6b3499867d0355"}, + {file = "openpyxl-3.0.10.tar.gz", hash = "sha256:e47805627aebcf860edb4edf7987b1309c1b3632f3750538ed962bbcc3bd7449"}, +] +ordered-set = [ + {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"}, + {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +paramiko = [ + {file = "paramiko-2.11.0-py2.py3-none-any.whl", hash = "sha256:655f25dc8baf763277b933dfcea101d636581df8d6b9774d1fb653426b72c270"}, + {file = "paramiko-2.11.0.tar.gz", hash = "sha256:003e6bee7c034c21fbb051bf83dc0a9ee4106204dd3c53054c71452cc4ec3938"}, +] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +pbr = [ + {file = "pbr-5.9.0-py2.py3-none-any.whl", hash = "sha256:e547125940bcc052856ded43be8e101f63828c2d94239ffbe2b327ba3d5ccf0a"}, + {file = "pbr-5.9.0.tar.gz", hash = "sha256:e8dca2f4b43560edef58813969f52a56cef023146cbb8931626db80e6c1c4308"}, +] +platformdirs = [ + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +pre-commit = [ + {file = "pre_commit-2.15.0-py2.py3-none-any.whl", hash = "sha256:a4ed01000afcb484d9eb8d504272e642c4c4099bbad3a6b27e519bd6a3e928a6"}, + {file = "pre_commit-2.15.0.tar.gz", hash = "sha256:3c25add78dbdfb6a28a651780d5c311ac40dd17f160eb3954a0c59da40a505a7"}, +] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] +pycodestyle = [ + {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, + {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] +pyenchant = [ + {file = "pyenchant-3.2.2-py3-none-any.whl", hash = "sha256:5facc821ece957208a81423af7d6ec7810dad29697cb0d77aae81e4e11c8e5a6"}, + {file = "pyenchant-3.2.2-py3-none-win32.whl", hash = "sha256:5a636832987eaf26efe971968f4d1b78e81f62bca2bde0a9da210c7de43c3bce"}, + {file = "pyenchant-3.2.2-py3-none-win_amd64.whl", hash = "sha256:6153f521852e23a5add923dbacfbf4bebbb8d70c4e4bad609a8e0f9faeb915d1"}, + {file = "pyenchant-3.2.2.tar.gz", hash = "sha256:1cf830c6614362a78aab78d50eaf7c6c93831369c52e1bb64ffae1df0341e637"}, +] +pyflakes = [ + {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, + {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, +] +pygments = [ + {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, + {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, +] +pylint = [ + {file = "pylint-2.12.2-py3-none-any.whl", hash = "sha256:daabda3f7ed9d1c60f52d563b1b854632fd90035bcf01443e234d3dc794e3b74"}, + {file = "pylint-2.12.2.tar.gz", hash = "sha256:9d945a73640e1fec07ee34b42f5669b770c759acd536ec7b16d7e4b87a9c9ff9"}, +] +pymdown-extensions = [ + {file = "pymdown_extensions-9.5-py3-none-any.whl", hash = "sha256:ec141c0f4983755349f0c8710416348d1a13753976c028186ed14f190c8061c4"}, + {file = "pymdown_extensions-9.5.tar.gz", hash = "sha256:3ef2d998c0d5fa7eb09291926d90d69391283561cf6306f85cd588a5eb5befa0"}, +] +pynacl = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pyserial = [ + {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, + {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, +] +pytest = [ + {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, + {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +pytkdocs = [ + {file = "pytkdocs-0.16.1-py3-none-any.whl", hash = "sha256:a8c3f46ecef0b92864cc598e9101e9c4cf832ebbf228f50c84aa5dd850aac379"}, + {file = "pytkdocs-0.16.1.tar.gz", hash = "sha256:e2ccf6dfe9dbbceb09818673f040f1a7c32ed0bffb2d709b06be6453c4026045"}, +] +pyxb = [ + {file = "PyXB-1.2.6.tar.gz", hash = "sha256:2a00f38dd1d87b88f92d79bc5a09718d730419b88e814545f472bbd5a3bf27b4"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +pyyaml-env-tag = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] +scp = [ + {file = "scp-0.14.4-py2.py3-none-any.whl", hash = "sha256:29ddaafbfba60793a8a779694c97d8c150d365668a4ef67616c515b80a69ef2f"}, + {file = "scp-0.14.4.tar.gz", hash = "sha256:54699b92cb68ae34b5928c48a888eab9722a212502cba89aa795bd56597505bd"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +smmap = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] +stevedore = [ + {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"}, + {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"}, +] +tabulate = [ + {file = "tabulate-0.8.10-py3-none-any.whl", hash = "sha256:0ba055423dbaa164b9e456abe7920c5e8ed33fcc16f6d1b2f2d152c8e1e8b4fc"}, + {file = "tabulate-0.8.10-py3.8.egg", hash = "sha256:436f1c768b424654fce8597290d2764def1eea6a77cfa5c33be00b1bc0f4f63d"}, + {file = "tabulate-0.8.10.tar.gz", hash = "sha256:6c57f3f3dd7ac2782770155f3adb2db0b1a269637e42f27599925e64b114f519"}, +] +tenacity = [ + {file = "tenacity-8.0.1-py3-none-any.whl", hash = "sha256:f78f4ea81b0fabc06728c11dc2a8c01277bfc5181b321a4770471902e3eb844a"}, + {file = "tenacity-8.0.1.tar.gz", hash = "sha256:43242a20e3e73291a28bcbcacfd6e000b02d3857a9a9fff56b297a27afdc932f"}, +] +textfsm = [ + {file = "textfsm-1.1.2-py2.py3-none-any.whl", hash = "sha256:f3d4e9bd4344935a08e6844e53d6220e2e4fb7e465bee51fa909152ed6bab406"}, + {file = "textfsm-1.1.2.tar.gz", hash = "sha256:85a450b441aff04b1cac726bdb36f35534a5b196cca08c8bc14fddd879c4255c"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +ttp = [ + {file = "ttp-0.9.0-py2.py3-none-any.whl", hash = "sha256:db16bdf0446fdb4ec662064d5bc174d573a2240d66cde73ba07d266fb58b599a"}, + {file = "ttp-0.9.0.tar.gz", hash = "sha256:e53050061450c3ee48476983f23153a9bb55589ba6d79a25d0ebc28d329eec4f"}, +] +typed-ast = [ + {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, + {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, + {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, + {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, + {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, + {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, + {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, + {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, + {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, +] +typing-extensions = [ + {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, + {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, +] +virtualenv = [ + {file = "virtualenv-20.15.0-py2.py3-none-any.whl", hash = "sha256:804cce4de5b8a322f099897e308eecc8f6e2951f1a8e7e2b3598dff865f01336"}, + {file = "virtualenv-20.15.0.tar.gz", hash = "sha256:4c44b1d77ca81f8368e2d7414f9b20c428ad16b343ac6d226206c5b84e2b4fcc"}, +] +watchdog = [ + {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"}, + {file = "watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591"}, + {file = "watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd"}, + {file = "watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3"}, + {file = "watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d"}, + {file = "watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl", hash = "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_i686.whl", hash = "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl", hash = "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_s390x.whl", hash = "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6"}, + {file = "watchdog-2.1.9-py3-none-win32.whl", hash = "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1"}, + {file = "watchdog-2.1.9-py3-none-win_amd64.whl", hash = "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c"}, + {file = "watchdog-2.1.9-py3-none-win_ia64.whl", hash = "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428"}, + {file = "watchdog-2.1.9.tar.gz", hash = "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609"}, +] +wrapt = [ + {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"}, + {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"}, + {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"}, + {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"}, + {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"}, + {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"}, + {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"}, + {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"}, + {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"}, + {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"}, + {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"}, + {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"}, + {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"}, + {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"}, + {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"}, + {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"}, + {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"}, + {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"}, + {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"}, + {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"}, + {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"}, + {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"}, + {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"}, + {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"}, + {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"}, + {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"}, + {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"}, + {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"}, + {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"}, + {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"}, + {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"}, + {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"}, + {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"}, + {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"}, + {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"}, + {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"}, + {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"}, + {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"}, + {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"}, + {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"}, + {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"}, + {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"}, + {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"}, + {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"}, + {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"}, + {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"}, + {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"}, + {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"}, + {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"}, + {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"}, + {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"}, +] +yangson = [ + {file = "yangson-1.4.13-py3-none-any.whl", hash = "sha256:cc09c47999630bc4df468b3ca5c63b9a6214fd25029b60525742df8e20ff537f"}, + {file = "yangson-1.4.13.tar.gz", hash = "sha256:4ae2a94b0223662a32aa6c6570a27e5173fe0037c9c14c020adb66300884919e"}, +] +zipp = [ + {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, + {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..e353858 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,59 @@ +[tool.poetry] +name = "ttp_templates" +version = "0.2.0" +description = "Template Text Parser Templates collections" +license = "MIT" +include = [ + "platform/*.txt", + "yang/*.txt", + "misc/*/*.txt", +] +authors = ["Denis Mulyalin "] +maintainers = ["Denis Mulyalin "] +readme = "README.md" +homepage = "https://github.com/dmulyalin/ttp_templates" +repository = "https://github.com/dmulyalin/ttp_templates" +documentation = "https://dmulyalin.github.io/ttp_templates/" +keywords = ["Parsing", "TTP", "regex"] +classifiers = [ + "Topic :: Utilities", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", +] + +[tool.poetry.dependencies] +python = "^3.6" +ttp = { version = ">=0.6.0" } + +# docs dependencies for extras definition +mkdocs = { version = ">=1.1", optional = true, markers = "python_version >= '3.7'" } +mkdocs-material = { version = "7.2.2", optional = true, markers = "python_version >= '3.7'" } +mkdocs-material-extensions = { version = "1.0.1", optional = true, markers = "python_version >= '3.7'" } +mkdocstrings = { version = "0.18.*", optional = true, markers = "python_version >= '3.7'", extras = ["python"] } + +[tool.poetry.dev-dependencies] +bandit = { version = "1.7.*", markers = "python_version >= '3.7'" } +black = { version = "22.3.*", markers = "python_version >= '3.7'" } +flake8 = { version = "4.0.*", markers = "python_version >= '3.7'" } +pre-commit = { version = "2.15.*", markers = "python_version >= '3.7'" } +pyenchant = { version = "3.2.*", markers = "python_version >= '3.7'" } +pylint = { version = "2.12.*", markers = "python_version >= '3.7'" } +pytest = { version = "^7.1.*", markers = "python_version >= '3.7'" } +cerberus = { version = "1.3.*", markers = "python_version >= '3.7'" } +jinja2 = { version = "3.0.*", markers = "python_version >= '3.7'" } +pyyaml = { version = "6.0", markers = "python_version >= '3.7'" } +deepdiff = { version = "5.8.*", markers = "python_version >= '3.7'" } +openpyxl = { version = "3.0.*", markers = "python_version >= '3.7'" } +tabulate = { version = "0.8.*", markers = "python_version >= '3.7'" } +yangson = { version = "1.4.*", markers = "python_version >= '3.7'" } +netmiko = { version = "3.4.0", markers = "python_version >= '3.7'" } + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index 9137a72..0000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,13 +0,0 @@ -black -Cerberus==1.* -deepdiff==4.* -Jinja2==2.* -openpyxl==3.* -pre-commit==2.* -pytest==7.* -PyYAML==5.* -tabulate==0.* -ttp_templates==0.* -yangson==1.* -ttp==0.* -netmiko==3.* \ No newline at end of file diff --git a/requirements-docs.txt b/requirements-docs.txt deleted file mode 100644 index 2d57cc6..0000000 --- a/requirements-docs.txt +++ /dev/null @@ -1,5 +0,0 @@ -mkdocs==1.3.0 -mkdocs-material==7.2.2 -mkdocs-material-extensions==1.0.1 -mkdocstrings==0.18.1 -mkdocstrings[python]>=0.18 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index ae558be..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -ttp>=0.6.0 \ No newline at end of file diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index ca6eb92..0000000 --- a/setup.cfg +++ /dev/null @@ -1,6 +0,0 @@ -[metadata] -description-file=README.md -license_files=LICENSE - -[bdist_wheel] -universal = 1 \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index c5b0758..0000000 --- a/setup.py +++ /dev/null @@ -1,41 +0,0 @@ -from setuptools import setup, find_packages - -with open("README.md", "r") as f: - long_description = f.read() - -__author__ = "Denis Mulyalin " - -setup( - name="ttp_templates", - version="0.1.4", - author="Denis Mulyalin", - author_email="d.mulyalin@gmail.com", - description="Template Text Parser Templates collections", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/dmulyalin/ttp_templates", - packages=find_packages(), - extras_require={}, - include_package_data=True, - package_data={ - "ttp_templates": [ - "platform/*.txt", - "yang/*.txt", - "misc/*/*.txt" - ] - }, - data_files=[('', ['LICENSE'])], - install_requires=[ - "ttp>=0.6.0" - ], - classifiers=[ - "Topic :: Utilities", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - ] -) diff --git a/test/mock_data/arista_eos_show_hostname.txt b/test/mock_data/arista_eos_show_hostname.txt new file mode 100644 index 0000000..7db725e --- /dev/null +++ b/test/mock_data/arista_eos_show_hostname.txt @@ -0,0 +1,2 @@ +Hostname: ceos1 +FQDN: ceos1 \ No newline at end of file diff --git a/test/mock_data/juniper_show_isis_database_verbose_pipe_no_more.txt b/test/mock_data/juniper_show_isis_database_verbose_pipe_no_more.txt new file mode 100644 index 0000000..6b45b5b --- /dev/null +++ b/test/mock_data/juniper_show_isis_database_verbose_pipe_no_more.txt @@ -0,0 +1,56 @@ +IS-IS level 2 link-state database: + +R1-X1.00-00 Sequence: 0x22425, Checksum: 0x8904, Lifetime: 463 secs + IS neighbor: R1-X2.00 Metric: 20 + Two-way fragment: R1-X2.00-00, Two-way first fragment: R1-X2.00-00 + IP prefix: 10.123.123.31/32 Metric: 0 Internal Up + IP prefix: 10.123.123.41/32 Metric: 0 Internal Up + V6 prefix: ::ffff:10.123.111.236/126 Metric: 20 Internal Up + + Header: LSP ID: R1-X1.00-00, Length: 233 bytes + Allocated length: 284 bytes, Router ID: 10.123.123.31 + Remaining lifetime: 463 secs, Level: 2, Interface: 80 + Estimated free bytes: 51, Actual free bytes: 51 + Aging timer expires in: 463 secs + Protocols: IP, IPv6 + + Packet: LSP ID: R1-X1.00-00, Length: 233 bytes, Lifetime : 1194 secs + Checksum: 0x8904, Sequence: 0x22425, Attributes: 0x3 + NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes + Packet type: 20, Packet version: 1, Max area: 0 + + TLVs: + Area address: 49.0001 (3) + LSP Buffer Size: 1492 + Speaks: IP + Speaks: IPV6 + IP router id: 10.123.123.31 + IP address: 10.123.123.31 + IPv6 TE Router ID: 2001::10:123:123:31 + Hostname: R1-X1 + Extended IS Reachability TLV, Type: 22, Length: 85 + IS extended neighbor: R1-X2.00, Metric: default 20 SubTLV len: 74 + IP address: 10.123.111.238 + Neighbor's IP address: 10.123.111.237 + Local interface index: 332, Remote interface index: 461 + Current reservable bandwidth: + Priority 0 : 7Gbps + Priority 1 : 7Gbps + Priority 2 : 7Gbps + Priority 3 : 7Gbps + Priority 4 : 7Gbps + Priority 5 : 7Gbps + Priority 6 : 6.7Gbps + Priority 7 : 6.7Gbps + Maximum reservable bandwidth: 7Gbps + Maximum bandwidth: 10Gbps + Administrative groups: 0 + IPv6 prefix: ::ffff:10.123.111.236/126 Metric 20 Up + IP extended prefix: 10.123.123.31/32 metric 0 up + IP extended prefix: 10.123.123.41/32 metric 0 up + IP extended prefix: 10.123.111.236/30 metric 20 up + IP address: 10.123.123.41 + Authentication data: 17 bytes + No queued transmissions + + \ No newline at end of file diff --git a/test/mock_data/test_N2G_cli_l2_data_juniper.txt b/test/mock_data/test_N2G_cli_l2_data_juniper.txt new file mode 100644 index 0000000..0864380 --- /dev/null +++ b/test/mock_data/test_N2G_cli_l2_data_juniper.txt @@ -0,0 +1,113 @@ +user1@switch-1> show lldp local-information + +LLDP Local Information details + +Chassis ID : 84:03:28:15:12:34 +System name : switch-1.net.acme1.lab +System descr : Juniper Networks, Inc. ssm5123-64c Ethernet Switch, kernel JUNOS 12.2R3-S1.3, Build date: 2011-05-12 12:34:56 UTC Copyright (c) 1996-2021 Juniper Networks, Inc. + +System Capabilities + Supported : Bridge Router + Enabled : Bridge Router + +Management Information + Interface Name : em0 + Address Subtype : IPv4(1) + Address : 10.123.204.39 + Interface Number : 17 + Interface Numbering Subtype : ifIndex(2) + +Interface name Parent Interface Interface ID Interface description Status +em0 - 17 em0 Up +et-0/0/31 - 521 - Down +et-0/0/32 - 612 CID-BN-P-env4207-env4208-0004 | BACKHAUL Up +et-0/0/33 - 522 - Down +et-0/0/34 - 615 BACKHAUL Up +et-0/0/35 - 602 - Down + +{master:0} +user1@switch-1> show lldp neighbors +Local Interface Parent Interface Chassis Id Port info System Name +et-0/0/12 - 04:3f:72:cf:43:21 04:3f:72:cf:12:34 +et-0/0/13 - 11:22:33:1b:7a:80 Eth0 CSW31 +et-0/0/14 - 9c:e1:76:9d:11:23 HundredGigE0/0/1/0.12 nsw02-env1.env4208.net.acme1.lab +et-0/0/15 - 9c:e1:76:9d:11:23 HundredGigE0/0/1/0.34 nsw02-env1.env4208.net.acme1.lab + +{master:0} +user1@switch-1> show configuration interfaces | display set | no-more +set interfaces ge-0/0/0 description "useful staff" +set interfaces ge-0/0/0 ether-options 802.3ad 31 +set interfaces ge-0/0/0 mtu 9234 +set interfaces ge-0/0/0 aggregated-ether-options lacp active +{master:0} + +user1@switch-1> show interfaces detail | no-more +Physical interface: ge-0/0/0, Enabled, Physical link is Up + Interface index: 123, SNMP ifIndex: 4321, Generation: 141 + Description: useful staff + Link-level type: Ethernet, MTU: 9234, LAN-PHY mode, Speed: 100Gbps, BPDU Error: None, Loop Detect PDU Error: None, Ethernet-Switching Error: None, MAC-REWRITE Error: None, Loopback: Disabled, + Source filtering: Disabled, Flow control: Disabled, Media type: Fiber + Device flags : Present Running + Interface flags: SNMP-Traps Internal: 0x4000 + Link flags : None + CoS queues : 10 supported, 10 maximum usable queues + Hold-times : Up 0 ms, Down 0 ms + Current address: 84:03:28:15:11:13, Hardware address: 84:03:28:15:11:34 + Last flapped : 2022-23-12 11:31:41 UTC (4d 11:48 ago) + Statistics last cleared: 2022-43-51 11:31:41 UTC (50w0d 07:51 ago) + Traffic statistics: + Input bytes : 16307027457109123 7839570216 bps + Output bytes : 4957883264478488 2023686896 bps + Input packets: 2693554359960 161652 pps + Output packets: 818438758751 41759 pps + IPv6 transit statistics: + Input bytes : 0 + Output bytes : 0 + Input packets: 0 + Output packets: 0 + Egress queues: 10 supported, 5 in use + Queue counters: Queued packets Transmitted packets Dropped packets + 0 818438658689 818438658689 0 + 3 0 0 0 + 4 0 0 0 + 7 195101 195101 0 + 8 0 0 0 + Queue number: Mapped forwarding classes + 0 best-effort + 3 fcoe + 4 no-loss + 7 network-control + 8 mcast + Active alarms : None + Active defects : None + Pre-emphasis(reg 236/237) + Register-value 0 + Ctle(reg 234/235) + Register-value 0 + Differential-amplitude(reg 238/239) + Register-value 0 + PCS statistics Seconds + Bit errors 0 + Errored blocks 0 + Ethernet FEC Mode : FEC91 + Ethernet FEC statistics Errors + FEC Corrected Errors 0 + FEC Uncorrected Errors 0 + FEC Corrected Errors Rate 0 + FEC Uncorrected Errors Rate 0 + PRBS Statistics : Disabled + Interface transmit statistics: Disabled + MACSec statistics: + Output + Secure Channel Transmitted + Protected Packets : 0 + Encrypted Packets : 0 + Protected Bytes : 0 + Encrypted Bytes : 0 + Input + Secure Channel Received + Accepted Packets : 0 + Validated Bytes : 0 + Decrypted Bytes : 0 +{master:0} +user1@switch-1> \ No newline at end of file diff --git a/test/test_n2g_templates.py b/test/test_n2g_templates.py index 1560ec3..960b19f 100644 --- a/test/test_n2g_templates.py +++ b/test/test_n2g_templates.py @@ -5,7 +5,7 @@ from ttp_templates import get_template from ttp import ttp - +from ttp_templates.ttp_vars import all_vars def test_N2G_ospf_lsdb_Cisco_IOSXR(): with open("./mock_data/cisco_xr_show_ip_ospf_database_router_external_summary_router-1.txt", "r") as f: @@ -378,4 +378,136 @@ def test_N2G_ospf_lsdb_huawei(): 'link_id': '123.123.24.5', 'metric': '9000'}]}]}}}]] -# test_N2G_ospf_lsdb_huawei() \ No newline at end of file +# test_N2G_ospf_lsdb_huawei() + +def test_N2G_isis_lsdb_juniper(): + with open("./mock_data/juniper_show_isis_database_verbose_pipe_no_more.txt", "r") as f: + data = f.read() + template = get_template(path="misc/N2G/cli_isis_data/juniper.txt") + print(template) + parser = ttp(data=data, template=template) + parser.parse() + res = parser.result() + pprint.pprint(res) + assert res == [[{'isis_processes': {'ISIS': {'R1-X1': [{'isis_area': '49.0001', + 'level': '2', + 'links': [{'bw_gbit': '10', + 'local_intf_id': '332', + 'local_ip': '10.123.111.238', + 'metric': '20', + 'peer_intf_id': '461', + 'peer_ip': '10.123.111.237', + 'peer_name': 'R1-X2'}], + 'networks': [{'metric': '0', + 'network': '10.123.123.31/32'}, + {'metric': '0', + 'network': '10.123.123.41/32'}, + {'metric': '20', + 'network': '::ffff:10.123.111.236/126'}], + 'rid': '10.123.123.31', + 'rid_v6': '2001::10:123:123:31'}]}}}]] + +# test_N2G_isis_lsdb_juniper() + +def test_N2G_cli_l2_data_juniper(): + with open("./mock_data/test_N2G_cli_l2_data_juniper.txt", "r") as f: + data = f.read() + template = get_template(path="misc/N2G/cli_l2_data/juniper.txt") + print(template) + parser = ttp(data=data, template=template, vars={"IfsNormalize": all_vars["short_interface_names"], "physical_ports": all_vars["physical_ports"]}) + parser.parse() + res = parser.result() + pprint.pprint(res) + assert res == [{'switch-1.net.acme1.lab': {'interfaces': {'GE0/0/0': {'description': 'useful ' + 'staff', + 'lag_id': '31', + 'lag_mode': 'active', + 'mtu': '9234', + 'state': {'admin': 'Enabled', + 'description': 'useful ' + 'staff', + 'is_physical_port': True, + 'line': 'Up', + 'mac': '84:03:28:15:11:13'}}}, + 'interfaces_id': [{'description': 'em0', + 'id': '17', + 'interface': 'em0', + 'parent': '-', + 'status': 'Up'}, + {'description': '-', + 'id': '521', + 'interface': '100GE0/0/31', + 'parent': '-', + 'status': 'Down'}, + {'description': 'CID-BN-P-env4207-env4208-0004 ' + '| BACKHAUL', + 'id': '612', + 'interface': '100GE0/0/32', + 'parent': '-', + 'status': 'Up'}, + {'description': '-', + 'id': '522', + 'interface': '100GE0/0/33', + 'parent': '-', + 'status': 'Down'}, + {'description': 'BACKHAUL', + 'id': '615', + 'interface': '100GE0/0/34', + 'parent': '-', + 'status': 'Up'}, + {'description': '-', + 'id': '602', + 'interface': '100GE0/0/35', + 'parent': '-', + 'status': 'Down'}], + 'lldp_peers': [{'data': {'chassis_id': '04:3f:72:cf:43:21', + 'parent_interface': '-', + 'peer_port_description': '04:3f:72:cf:12:34'}, + 'source': 'switch-1.net.acme1.lab', + 'src_label': '100GE0/0/12', + 'target': {'id': '04:3f:72:cf:43:21'}, + 'trgt_label': ''}, + {'data': {'chassis_id': '11:22:33:1b:7a:80', + 'parent_interface': '-', + 'peer_port_description': 'Eth0'}, + 'source': 'switch-1.net.acme1.lab', + 'src_label': '100GE0/0/13', + 'target': {'id': 'CSW31'}, + 'trgt_label': ''}, + {'data': {'chassis_id': '9c:e1:76:9d:11:23', + 'parent_interface': '-', + 'peer_port_description': 'HundredGigE0/0/1/0.12'}, + 'source': 'switch-1.net.acme1.lab', + 'src_label': '100GE0/0/14', + 'target': {'id': 'nsw02-env1.env4208.net.acme1.lab'}, + 'trgt_label': '100GE0/0/1/0.12'}, + {'data': {'chassis_id': '9c:e1:76:9d:11:23', + 'parent_interface': '-', + 'peer_port_description': 'HundredGigE0/0/1/0.34'}, + 'source': 'switch-1.net.acme1.lab', + 'src_label': '100GE0/0/15', + 'target': {'id': 'nsw02-env1.env4208.net.acme1.lab'}, + 'trgt_label': '100GE0/0/1/0.34'}], + 'node_facts': {'system': {'chassis_id': '84:03:28:15:12:34', + 'description': 'Juniper ' + 'Networks, ' + 'Inc. ' + 'ssm5123-64c ' + 'Ethernet ' + 'Switch, ' + 'kernel ' + 'JUNOS ' + '12.2R3-S1.3, ' + 'Build ' + 'date: ' + '2011-05-12 ' + '12:34:56 ' + 'UTC ' + 'Copyright ' + '(c) ' + '1996-2021 ' + 'Juniper ' + 'Networks, ' + 'Inc.'}}}}] + +# test_N2G_cli_l2_data_juniper() \ No newline at end of file diff --git a/test/test_platform_arista_eos.py b/test/test_platform_arista_eos.py new file mode 100644 index 0000000..37cccf9 --- /dev/null +++ b/test/test_platform_arista_eos.py @@ -0,0 +1,25 @@ +import sys +import pprint +import logging + +sys.path.insert(0, "..") + +from ttp_templates import get_template +from ttp import ttp + +logging.basicConfig(level=logging.INFO) + +def test_show_hostname(): + with open( + "./mock_data/arista_eos_show_hostname.txt", "r" + ) as f: + data = f.read() + template = get_template( + platform="arista_eos", command="show hostname" + ) + pprint.pprint(template) + parser = ttp(data=data, template=template) + parser.parse() + res = parser.result() + pprint.pprint(res) + assert res == [[[{'fqdn': 'ceos1', 'hostname': 'ceos1'}]]] \ No newline at end of file diff --git a/test/test_platform_cisco_xr.py b/test/test_platform_cisco_xr.py index 2fc6313..b44069c 100644 --- a/test/test_platform_cisco_xr.py +++ b/test/test_platform_cisco_xr.py @@ -19,134 +19,147 @@ def test_cisco_ios_show_ip_ospf_database_router(): parser = ttp(data=data, template=template) parser.parse() res = parser.result() - # pprint.pprint(res) - assert res == [[{'isis_processes': {'100': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '9', - 'local_ip': '10.123.0.17', - 'metric': '16777214', - 'peer_intf_id': '50', - 'peer_ip': '10.123.0.18', - 'peer_name': 'R1-X2'}, - {'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '7', - 'local_ip': '10.123.0.25', - 'metric': '123', - 'peer_intf_id': '53', - 'peer_ip': '10.123.0.26', - 'peer_name': 'R2-X1'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': '10.111.1.1/32'}], - 'rid': '10.111.1.1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '48', - 'local_ip': '10.123.0.33', - 'metric': '456', - 'peer_intf_id': '53', - 'peer_ip': '10.123.0.34', - 'peer_name': 'R2-X2'}, - {'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '50', - 'local_ip': '10.123.0.18', - 'metric': '123', - 'peer_intf_id': '9', - 'peer_ip': '10.123.0.17', - 'peer_name': 'R1-X1'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': '10.111.1.2/32'}], - 'rid': '10.111.1.2'}]}, - '200': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '57', - 'peer_name': 'R2-X1', - 'srv6_endx_sid': [{'algo': '0', - 'args_length': '0', - 'block_length': '32', - 'func_length': '16', - 'node_id_length': '16', - 'sid': 'fdff:0:1:e000::'}, - {'algo': '128', - 'args_length': '0', - 'block_length': '32', - 'func_length': '16', - 'node_id_length': '16', - 'sid': 'fdff:0:1001:e001::'}]}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': 'fddd:2:c101::1/128'}, - {'metric': '1', - 'network': 'fdff:0:1::/48'}, - {'metric': '0', - 'network': 'fdff:3::/36'}, - {'metric': '0', - 'network': 'fdff::/36'}], - 'rid': 'fddd:2:c101::1', - 'srv6_locators': [{'algo': '0', - 'locator': 'fdff:0:1::', - 'mask': '48'}, - {'algo': '128', - 'locator': 'fdff:0:1001::', - 'mask': '48'}]}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '60', - 'peer_name': 'R2-X2', - 'srv6_endx_sid': [{'algo': '0', - 'args_length': '0', - 'block_length': '32', - 'func_length': '16', - 'node_id_length': '16', - 'sid': 'fdff:0:2:e000::'}, - {'algo': '128', - 'args_length': '0', - 'block_length': '32', - 'func_length': '16', - 'node_id_length': '16', - 'sid': 'fdff:0:4444:e001::'}]}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': 'fdff::/36'}, - {'metric': '1', - 'network': 'fdff:0:2::/48'}, - {'metric': '0', - 'network': 'fdff:2::/36'}, - {'metric': '0', - 'network': 'fdff:3::/36'}, - {'metric': '0', - 'network': 'fddd:2:c101::2/128'}], - 'rid': 'fddd:2:c101::2', - 'srv6_locators': [{'algo': '0', - 'locator': 'fdff:0:2::', - 'mask': '48'}, - {'algo': '128', - 'locator': 'fdff:0:4444::', - 'mask': '48'}]}]}}}]] + pprint.pprint(res) + assert res == [[{'isis_processes': {'100': {'R1-X1': [{'isis_area': '49.0001', + 'level': 'Level-2', + 'links': [{'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '9', + 'local_ip': '10.123.0.17', + 'metric': '16777214', + 'peer_intf_id': '50', + 'peer_ip': '10.123.0.18', + 'peer_name': 'R1-X2'}, + {'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '7', + 'local_ip': '10.123.0.25', + 'metric': '123', + 'peer_intf_id': '53', + 'peer_ip': '10.123.0.26', + 'peer_name': 'R2-X1'}], + 'networks': [{'isis_pid': '100', + 'metric': '0', + 'network': '10.111.1.1/32'}], + 'rid': '10.111.1.1'}], + 'R1-X2': [{'isis_area': '49.0001', + 'level': 'Level-2', + 'links': [{'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '48', + 'local_ip': '10.123.0.33', + 'metric': '456', + 'peer_intf_id': '53', + 'peer_ip': '10.123.0.34', + 'peer_name': 'R2-X2'}, + {'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '50', + 'local_ip': '10.123.0.18', + 'metric': '123', + 'peer_intf_id': '9', + 'peer_ip': '10.123.0.17', + 'peer_name': 'R1-X1'}], + 'networks': [{'isis_pid': '100', + 'metric': '0', + 'network': '10.111.1.2/32'}], + 'rid': '10.111.1.2'}]}, + '200': {'R1-X1': [{'isis_area': '49.0001', + 'level': 'Level-2', + 'links': [{'bw_kbit': '10000000', + 'delay_avg_us': '1', + 'delay_max_us': '1', + 'delay_min_us': '1', + 'delay_variation_us': '0', + 'isis_pid': '200', + 'local_intf_id': '68', + 'metric': '10', + 'peer_intf_id': '57', + 'peer_name': 'R2-X1', + 'srv6_endx_sid': [{'algo': '0', + 'args_length': '0', + 'block_length': '32', + 'func_length': '16', + 'node_id_length': '16', + 'sid': 'fdff:0:1:e000::'}, + {'algo': '128', + 'args_length': '0', + 'block_length': '32', + 'func_length': '16', + 'node_id_length': '16', + 'sid': 'fdff:0:1001:e001::'}]}], + 'networks': [{'isis_pid': '200', + 'metric': '0', + 'network': 'fddd:2:c101::1/128'}, + {'isis_pid': '200', + 'metric': '1', + 'network': 'fdff:0:1::/48'}, + {'isis_pid': '200', + 'metric': '0', + 'network': 'fdff:3::/36'}, + {'isis_pid': '200', + 'metric': '0', + 'network': 'fdff::/36'}], + 'rid_v6': 'fddd:2:c101::1', + 'srv6_locators': [{'algo': '0', + 'isis_pid': '200', + 'locator': 'fdff:0:1::', + 'mask': '48'}, + {'algo': '128', + 'isis_pid': '200', + 'locator': 'fdff:0:1001::', + 'mask': '48'}]}], + 'R1-X2': [{'isis_area': '49.0001', + 'level': 'Level-2', + 'links': [{'bw_kbit': '10000000', + 'delay_avg_us': '1', + 'delay_max_us': '1', + 'delay_min_us': '1', + 'delay_variation_us': '0', + 'isis_pid': '200', + 'local_intf_id': '68', + 'metric': '10', + 'peer_intf_id': '60', + 'peer_name': 'R2-X2', + 'srv6_endx_sid': [{'algo': '0', + 'args_length': '0', + 'block_length': '32', + 'func_length': '16', + 'node_id_length': '16', + 'sid': 'fdff:0:2:e000::'}, + {'algo': '128', + 'args_length': '0', + 'block_length': '32', + 'func_length': '16', + 'node_id_length': '16', + 'sid': 'fdff:0:4444:e001::'}]}], + 'networks': [{'isis_pid': '200', + 'metric': '0', + 'network': 'fdff::/36'}, + {'isis_pid': '200', + 'metric': '1', + 'network': 'fdff:0:2::/48'}, + {'isis_pid': '200', + 'metric': '0', + 'network': 'fdff:2::/36'}, + {'isis_pid': '200', + 'metric': '0', + 'network': 'fdff:3::/36'}, + {'isis_pid': '200', + 'metric': '0', + 'network': 'fddd:2:c101::2/128'}], + 'rid_v6': 'fddd:2:c101::2', + 'srv6_locators': [{'algo': '0', + 'isis_pid': '200', + 'locator': 'fdff:0:2::', + 'mask': '48'}, + {'algo': '128', + 'isis_pid': '200', + 'locator': 'fdff:0:4444::', + 'mask': '48'}]}]}}}]] # test_cisco_ios_show_ip_ospf_database_router() \ No newline at end of file diff --git a/test/test_platform_juniper.py b/test/test_platform_juniper.py new file mode 100644 index 0000000..5598123 --- /dev/null +++ b/test/test_platform_juniper.py @@ -0,0 +1,41 @@ +import sys +import pprint + +sys.path.insert(0, "..") + +from ttp_templates import get_template +from ttp import ttp + + +def test_juniper_juniper_show_isis_database_verbose_pipe_no_more(): + with open( + "./mock_data/juniper_show_isis_database_verbose_pipe_no_more.txt", "r" + ) as f: + data = f.read() + template = get_template( + platform="juniper", command="show isis database verbose | no-more" + ) + # print(template) + parser = ttp(data=data, template=template) + parser.parse() + res = parser.result() + pprint.pprint(res) + assert res == [[{'isis_processes': {'ISIS': {'R1-X1': [{'isis_area': '49.0001', + 'level': '2', + 'links': [{'bw_gbit': '10', + 'local_intf_id': '332', + 'local_ip': '10.123.111.238', + 'metric': '20', + 'peer_intf_id': '461', + 'peer_ip': '10.123.111.237', + 'peer_name': 'R1-X2'}], + 'networks': [{'metric': '0', + 'network': '10.123.123.31/32'}, + {'metric': '0', + 'network': '10.123.123.41/32'}, + {'metric': '20', + 'network': '::ffff:10.123.111.236/126'}], + 'rid': '10.123.123.31', + 'rid_v6': '2001::10:123:123:31'}]}}}]] + +# test_juniper_juniper_show_isis_database_verbose_pipe_no_more() \ No newline at end of file diff --git a/ttp_templates/misc/N2G/cli_isis_data/juniper.txt b/ttp_templates/misc/N2G/cli_isis_data/juniper.txt new file mode 100644 index 0000000..f36f98b --- /dev/null +++ b/ttp_templates/misc/N2G/cli_isis_data/juniper.txt @@ -0,0 +1,12 @@ + +Template to parse Juniper JunOS "show isis database extensive | no-more" output. + + + +# Starting with Netmiko 3.4.0 can use run_ttp method to populate this template with below commands output +commands = [ + "show isis database extensive | no-more", +] + + + \ No newline at end of file diff --git a/ttp_templates/misc/N2G/cli_l2_data/cisco_xr.txt b/ttp_templates/misc/N2G/cli_l2_data/cisco_xr.txt index 72b2556..a8125c6 100644 --- a/ttp_templates/misc/N2G/cli_l2_data/cisco_xr.txt +++ b/ttp_templates/misc/N2G/cli_l2_data/cisco_xr.txt @@ -3,8 +3,16 @@ This template designed to parse Cisco IOSXR configuration and CDP and LLDP neighbors. +Commands parsed: + +- show lldp - to extract local hostname +- show lldp neighbors detail - to extract LLDP neighbors +- show running-config interface - to extract interfaces description and LAGs +- show cdp neighbors detail - show extract CDP neighbors +- show interfaces - to extract interface state to add all connected nodes + local_hostname="gethostname" @@ -13,8 +21,27 @@ def check_is_physical_port(data): if data.startswith(item) and not "." in item: return data, {"is_physical_port": True} return data + +def add_lldp_target_id(data): + """ + Some LLDP peers output does not contain System Name, this macro + is to make sure we assign chassis_id as target.id in that case. + """ + if ( + not data.get("target", {}).get("id") and + data.get("data", {}).get("chassis_id") + ): + data.setdefault("target", {}) + data["target"]["id"] = data["data"]["chassis_id"] + return data + + +Global LLDP information: {{ _start_ }} + LLDP System Name: {{ local_hostname | record("local_hostname") }} + + interface {{ interface | resuball(IfsNormalize) }} @@ -45,15 +72,24 @@ interface {{ interface | resuball(IfsNormalize) }} - + Local Interface: {{ src_label | resuball(IfsNormalize) }} Chassis id: {{ data.chassis_id }} Port id: {{ trgt_label | ORPHRASE | resuball(IfsNormalize) }} Port Description: {{ data.peer_port_description | re(".+") }} -System Name: {{ target.id | split(".") | item(0) | split("(") | item(0) }} +System Name: {{ target.id | split("(") | item(0) }} +System Name: {{ data.peer_system_name | PHRASE }} System Capabilities: {{ data.peer_capabilities | ORPHRASE }} IPv4 address: {{ target.top_label }} {{ source | set("local_hostname") }} + + +System Description: {{ _start_ }} + {{ peer_system_description | ORPHRASE | contains(",") }} +{{ peer_system_description | ORPHRASE | contains(",") }} +{{ _end_ }} + + diff --git a/ttp_templates/misc/N2G/cli_l2_data/juniper.txt b/ttp_templates/misc/N2G/cli_l2_data/juniper.txt new file mode 100644 index 0000000..8648c5c --- /dev/null +++ b/ttp_templates/misc/N2G/cli_l2_data/juniper.txt @@ -0,0 +1,81 @@ + \ No newline at end of file diff --git a/ttp_templates/misc/Netmiko/cisco.ios.cfg.ip.txt b/ttp_templates/misc/Netmiko/cisco.ios.cfg.ip.txt index 283c1b6..688de3a 100644 --- a/ttp_templates/misc/Netmiko/cisco.ios.cfg.ip.txt +++ b/ttp_templates/misc/Netmiko/cisco.ios.cfg.ip.txt @@ -6,6 +6,7 @@ on device's interfaces including secondary and VRRP/HSRP IP addresses. Output is a list of dictionaries. Sample data: + ``` r1#show run | sec interface interface GigabitEthernet1 @@ -22,6 +23,7 @@ interface GigabitEthernet1 ``` Sample results, structure="flat_list": + ``` [ { @@ -44,6 +46,7 @@ Sample results, structure="flat_list": ``` Template can be invoked using Netmiko run_ttp method like this: + ``` import pprint from netmiko import ConnectHandler diff --git a/ttp_templates/platform/cisco_xr_show_isis_database_verbose.txt b/ttp_templates/platform/cisco_xr_show_isis_database_verbose.txt index d73b9de..2d5d282 100644 --- a/ttp_templates/platform/cisco_xr_show_isis_database_verbose.txt +++ b/ttp_templates/platform/cisco_xr_show_isis_database_verbose.txt @@ -4,92 +4,53 @@ Template to parse ISIS LSDB of Cisco IOS-XR devices out of This template produces this structure: ``` -[[{'isis_processes': {'100': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '9', - 'local_ip': '10.123.0.17', - 'metric': '16777214', - 'peer_intf_id': '50', - 'peer_ip': '10.123.0.18', - 'peer_name': 'R1-X2'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': '10.111.1.1/32'}], - 'rid': '10.111.1.1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'affinity': '0x00000000', - 'bw_kbit': '10000000', - 'local_intf_id': '48', - 'local_ip': '10.123.0.33', - 'metric': '456', - 'peer_intf_id': '53', - 'peer_ip': '10.123.0.34', - 'peer_name': 'R2-X2'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': '10.111.1.2/32'}], - 'rid': '10.111.1.2'}]}, - '200': {'LSP': [{'hostname': 'R1-X1', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '57', - 'peer_name': 'R2-X1'}], - 'lsp_id': 'R1-X1', - 'networks': [{'metric': '0', - 'network': 'fddd:2:c101::1/128'},, - 'rid': 'fddd:2:c101::1'}, - {'hostname': 'R1-X2', - 'isis_area': '49.0001', - 'level': 'Level-2', - 'links': [{'bw_kbit': '10000000', - 'delay_avg_us': '1', - 'delay_max_us': '1', - 'delay_min_us': '1', - 'delay_variation_us': '0', - 'local_intf_id': '68', - 'metric': '10', - 'peer_intf_id': '60', - 'peer_name': 'R2-X2'}], - 'lsp_id': 'R1-X2', - 'networks': [{'metric': '0', - 'network': 'fdff::/36'}], - 'rid': 'fddd:2:c101::2'}]}}}]] +[[{'isis_processes': {'100': {'R1-X1': [{'isis_area': '49.0001', + 'level': 'Level-2', + 'links': [{'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '9', + 'local_ip': '10.123.0.17', + 'metric': '16777214', + 'peer_intf_id': '50', + 'peer_ip': '10.123.0.18', + 'peer_name': 'R1-X2'}, + {'affinity': '0x00000000', + 'bw_kbit': '10000000', + 'isis_pid': '100', + 'local_intf_id': '7', + 'local_ip': '10.123.0.25', + 'metric': '123', + 'peer_intf_id': '53', + 'peer_ip': '10.123.0.26', + 'peer_name': 'R2-X1'}], + 'networks': [{'isis_pid': '100', + 'metric': '0', + 'network': '10.111.1.1/32'}], + 'rid': '10.111.1.1'}]}}}]] ``` - + IS-IS {{ pid }} ({{ level }}) Link State Database - -{{ lsp_id | _start_ }}.00-00 * {{ ignore }} {{ ignore }} 65487/* 0/0/0 -{{ lsp_id | _start_ }}.00-00 {{ ignore }} {{ ignore }} 64768/65535 0/0/0 -{{ lsp_id | _start_ }}.00-00* {{ ignore }} {{ ignore }} 65487/* 0/0/0 + +{{ hostname | _start_ }}.00-00{{ ignore(r"[\s\*]") }} {{ ignore }} {{ ignore }} {{ ignore(r"[/\d\s\*]+") }} 0/0/0 +{{ hostname | _start_ }}.00-00{{ ignore(r"[\s\*]") }} * {{ ignore }} {{ ignore }} {{ ignore(r"[/\d\s\*]+") }} 0/0/0 + Auth: {{ auth }}, Length: 17 Area Address: {{ isis_area }} Router ID: {{ rid }} - Hostname: {{ hostname }} - IPv6 Address: {{ rid }} - IPv6 Router ID: {{ rid }} - - + IPv6 Router ID: {{ rid_v6 }} + IPv6 Router ID: {{ rid_v6 }} + + Metric: {{ metric | _start_ }} IP-Extended {{ network }} Metric: {{ metric | _start_ }} MT (IPv6 Unicast) IPv6 {{ network | _exact_ }} Metric: {{ metric | _start_ }} MT (IPv6 Unicast) IPv6-Ext-InAr {{ network | _exact_ }} - + Metric: {{ metric | _start_ }} IS-Extended {{ peer_name }}.00 Metric: {{ metric | _start_ }} MT (IPv6 Unicast) IS-Extended {{ peer_name }}.00 Local Interface ID: {{ local_intf_id }}, Remote Interface ID: {{ peer_intf_id }} @@ -103,10 +64,10 @@ IS-IS {{ pid }} ({{ level }}) Link State Database END.X SID: {{ sid | IPV6}} B:0 S:0 P:0 uA (PSP/USD) Alg:{{ algo }} Block Length: {{ block_length }}, Node-ID Length: {{ node_id_length }}, Func-Length: {{ func_length }}, Args-Length: {{ args_length }} - + - + SRv6 Locator: MT (IPv6 Unicast) {{ locator | IPV6 }}/{{ mask }} D:0 Metric: 0 Algorithm: {{ algo }} diff --git a/ttp_templates/platform/juniper_show_isis_database_verbose_pipe_no_more.txt b/ttp_templates/platform/juniper_show_isis_database_verbose_pipe_no_more.txt new file mode 100644 index 0000000..1a2c662 --- /dev/null +++ b/ttp_templates/platform/juniper_show_isis_database_verbose_pipe_no_more.txt @@ -0,0 +1,114 @@ + +Template to parse ISIS LSDB of Juniper JunOS devices out of +"show isis database extensive | no-more" command output. + +For this sample data: +``` +IS-IS level 2 link-state database: + +R1-X1.00-00 Sequence: 0x22425, Checksum: 0x8904, Lifetime: 463 secs + IS neighbor: R1-X2.00 Metric: 20 + Two-way fragment: R1-X2.00-00, Two-way first fragment: R1-X2.00-00 + IP prefix: 10.123.123.31/32 Metric: 0 Internal Up + IP prefix: 10.123.123.41/32 Metric: 0 Internal Up + V6 prefix: ::ffff:10.123.111.236/126 Metric: 20 Internal Up + + Header: LSP ID: R1-X1.00-00, Length: 233 bytes + Allocated length: 284 bytes, Router ID: 10.123.123.31 + Remaining lifetime: 463 secs, Level: 2, Interface: 80 + Estimated free bytes: 51, Actual free bytes: 51 + Aging timer expires in: 463 secs + Protocols: IP, IPv6 + + Packet: LSP ID: R1-X1.00-00, Length: 233 bytes, Lifetime : 1194 secs + Checksum: 0x8904, Sequence: 0x22425, Attributes: 0x3 L1 L2 + NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes + Packet type: 20, Packet version: 1, Max area: 0 + + TLVs: + Area address: 49.0001 (3) + LSP Buffer Size: 1492 + Speaks: IP + Speaks: IPV6 + IP router id: 10.123.123.31 + IP address: 10.123.123.31 + IPv6 TE Router ID: 2001::10:123:123:31 + Hostname: R1-X1 + Extended IS Reachability TLV, Type: 22, Length: 85 + IS extended neighbor: R1-X2.00, Metric: default 20 SubTLV len: 74 + IP address: 10.123.111.238 + Neighbor's IP address: 10.123.111.237 + Local interface index: 332, Remote interface index: 461 + Current reservable bandwidth: + Priority 0 : 7Gbps + Priority 1 : 7Gbps + Priority 2 : 7Gbps + Priority 3 : 7Gbps + Priority 4 : 7Gbps + Priority 5 : 7Gbps + Priority 6 : 6.7Gbps + Priority 7 : 6.7Gbps + Maximum reservable bandwidth: 7Gbps + Maximum bandwidth: 10Gbps + Administrative groups: 0 none + IPv6 prefix: ::ffff:10.123.111.236/126 Metric 20 Up + IP extended prefix: 10.123.123.31/32 metric 0 up + IP extended prefix: 10.123.123.41/32 metric 0 up + IP extended prefix: 10.123.111.236/30 metric 20 up + IP address: 10.123.123.41 + Authentication data: 17 bytes + No queued transmissions +``` + +This template produces this result: +``` +[[{'isis_processes': {'ISIS': {'R1-X1': [{'isis_area': '49.0001', + 'level': '2', + 'links': [{'bw_gbit': '10', + 'local_intf_id': '332', + 'local_ip': '10.123.111.238', + 'metric': '20', + 'peer_intf_id': '461', + 'peer_ip': '10.123.111.237', + 'peer_name': 'R1-X2'}], + 'networks': [{'metric': '0', + 'network': '10.123.123.31/32'}, + {'metric': '0', + 'network': '10.123.123.41/32'}, + {'metric': '20', + 'network': '::ffff:10.123.111.236/126'}], + 'rid': '10.123.123.31', + 'rid_v6': '2001::10:123:123:31'}]}}}]] +``` + +Notes: + +- Process ID (PID) always set to `ISIS` value as PID does not present in + "show isis database extensive | no-more" command output on Juniper devices. + + + +IS-IS level {{ level }} link-state database: + + +{{ hostname }}.00-00 Sequence: {{ ignore }}, Checksum: {{ ignore }}, Lifetime: {{ ignore }} secs + + Area address: {{ isis_area }} (3) + IP router id: {{ rid }} + IPv6 TE Router ID: {{ rid_v6 }} + + + IP prefix: {{ network }} Metric: {{ metric | _start_ }} Internal Up + V6 prefix: {{ network }} Metric: {{ metric | _start_ }} Internal Up + + + + IS extended neighbor: {{ peer_name }}.00, Metric: default {{ metric | _start_ }} SubTLV len: 74 + IP address: {{ local_ip }} + Neighbor's IP address: {{ peer_ip }} + Local interface index: {{ local_intf_id }}, Remote interface index: {{ peer_intf_id }} + Maximum bandwidth: {{ bw_gbit }}Gbps + + + + \ No newline at end of file diff --git a/ttp_templates/ttp_vars.py b/ttp_templates/ttp_vars.py index 1edfe42..2330895 100644 --- a/ttp_templates/ttp_vars.py +++ b/ttp_templates/ttp_vars.py @@ -15,17 +15,17 @@ 'Fddi': ['^Fddi', '^FD'], '50GE': ['^FiftyGigabitEthernet', '^FiftyGigEthernet', '^FiftyGigEth', '^FiftyGigE', '^FI', '^Fi', '^fi'], '40GE': ['^FortyGigabitEthernet', '^FortyGigEthernet', '^FortyGigEth', '^FortyGigE', '^FortyGig', '^FGE', '^FO', '^Fo', '^40GE'], - '400GE': ['^FourHundredGigabitEthernet', '^FourHundredGigEthernet', '^FourHundredGigEth', '^FourHundredGigE', '^FourHundredGig', '^F', '^f'], - 'GE': ['^GigabitEthernet', '^GigEthernet', '^GigEth', '^GigE', '^Gig', '^GE', '^Ge', '^ge', '^Gi', '^gi'], - '100GE': ['^HundredGigabitEthernet', '^HundredGigEthernet', '^HundredGigEth', '^HundredGigE', '^HundredGig', '^Hu'], + '400GE': ['^FourHundredGigabitEthernet', '^FourHundredGigEthernet', '^FourHundredGigEth', '^FourHundredGigE', '^FourHundredGig'], + 'GE': ['^GigabitEthernet', '^GigEthernet', '^GigEth', '^GigE', '^Gig', '^GE', '^Ge', '^ge-', '^ge', '^Gi', '^gi'], + '100GE': ['^HundredGigabitEthernet', '^HundredGigEthernet', '^HundredGigEth', '^HundredGigE', '^HundredGig', '^Hu', '^et-'], 'Lo': ['^Loopback', '^loopback', '^LoopBack', '^lo'], - 'MGMT': ['^MgmtEth', '^Management', '^Mgmt', '^mgmt', '^Ma', '^MEth'], + 'MGMT': ['^MgmtEth', '^Management', '^Mgmt', '^mgmt', '^Ma', '^MEth', '^fxp'], 'Multilink': ['^Multilink', '^Mu'], 'POS': ['^POS', '^PO'], - 'LAG': ['^PortChannel', '^Port-channel', '^Port-Channel', '^port-channel', '^po', '^Po', "^Bundle-Ether", "^BE", "^Eth-Trunk"], + 'LAG': ['^PortChannel', '^Port-channel', '^Port-Channel', '^port-channel', '^po', '^Po', "^Bundle-Ether", "^BE", "^Eth-Trunk", "^ae"], 'Serial': ['^Serial', '^Se', '^S'], - 'Te': ['^TenGigabitEthernet', '^TenGigEthernet', '^TenGigEth', '^TenGigE', '^TenGig', '^TeGig', '^Ten', '^te', '^XGigabitEthernet', '^TenGe', '^10GE'], - 'Tunnel': ['^Tunnel', '^Tun', '^Tu'], + 'Te': ['^TenGigabitEthernet', '^TenGigEthernet', '^TenGigEth', '^TenGigE', '^TenGig', '^TeGig', '^Ten', '^te', '^XGigabitEthernet', '^TenGe', '^10GE', '^xe-'], + 'Tunnel': ['^Tunnel', '^Tun', '^Tu', '^gr-'], '25GE': ['^TwentyFiveGigabitEthernet', '^TwentyFiveGigEthernet', '^TwentyFiveGigEth', '^TwentyFiveGigE', '^TwentyFiveGig', '^Twe', '^TF', '^Tf', '^tf'], '2GE': ['^Tw', '^Two'], '200GE': ['^TwoHundredGigabitEthernet', '^TwoHundredGigEthernet', '^TwoHundredGigEth', '^TwoHundredGigE', '^TwoHundredGig', '^TH', '^Th', '^th'],