Skip to main content

Downloads PyPI versions

Template Text Parser Templates

This repository contains a collection of TTP templates.

If you solved a problem using TTP and feel that your work can be useful to other people, feel free to raise an issue or submit pull request to include your template(s) in this repository. Refer to Contribute Guide for details.

Documentation: https://dmulyalin.github.io/ttp_templates/

Repository: https://github.com/dmulyalin/ttp_templates

TTP: https://ttp.readthedocs.io/

Installation

From PyPi:

pip install ttp-templates

or latest from GitHub master branch (need Git installed on the system):

pip install git+https://github.com/dmulyalin/ttp_templates.git

Sample usage

This example demonstrates how to parse Test Platform output for show run | sec interface command using platform/test_platform_show_run_pipe_sec_interface.txt template.

Code
from ttp_templates import parse_output
import pprint

data = """
interface GigabitEthernet1/3.251
 description Customer #32148
 encapsulation dot1q 251
 ip address 172.16.33.10 255.255.255.128
 shutdown
!
interface GigabitEthernet1/3.251
 description Customer #32148
 encapsulation dot1q 251
 ip address 172.16.33.10 255.255.255.128
 shutdown
"""

result = parse_output(
    data=data,
    platform="Test Platform",
    command="show run | sec interface"
)

pprint.pprint(result)

# prints:
# [[[{'description': 'Customer #32148',
#     'disabled': True,
#     'dot1q': '251',
#     'interface': 'GigabitEthernet1/3.251',
#     'ip': '172.16.33.10',
#     'mask': '255.255.255.128'},
#    {'description': 'Customer #32148',
#     'disabled': True,
#     'dot1q': '251',
#     'interface': 'GigabitEthernet1/3.251',
#     'ip': '172.16.33.10',
#     'mask': '255.255.255.128'}]]]

Sample code to parse Cisco IOS output in a structure compatible with ietf-interfaces YANG module.

Code
from ttp_templates import get_template
from ttp import ttp
import pprint

data1 = """
interface GigabitEthernet1/3.251
 description Customer #32148
 encapsulation dot1q 251
 ip address 172.16.33.10 255.255.255.128
 shutdown
!
interface GigabitEthernet1/4
 description vCPEs access control
 ip address 172.16.33.10 255.255.255.128
!
"""
data2 = """
interface GigabitEthernet1/5
 description Works data
 ip mtu 9000
!
interface GigabitEthernet1/7
 description Works data v6
 ipv6 address 2001::1/64
 ipv6 address 2001:1::1/64
"""

template = get_template(yang="ietf-interfaces", platform="cisco_ios")
parser = ttp(template=template)

parser.add_input(data1)
parser.add_input(data2)

parser.parse()
res = parser.result()
pprint.pprint(res)

# prints:
# [{'comment': '',
#   'exception': {},
#   'result': [{'ietf-interfaces:interfaces': {'interface': [{'admin-status': 'down',
#                                                             'description': 'Customer '
#                                                                            '#32148',
#                                                             'enabled': False,
#                                                             'ietf-ip:ipv4': {'address': [{'ip': '172.16.33.10',
#                                                                                           'netmask': '255.255.255.128',
#                                                                                           'origin': 'static'}]},
#                                                             'if-index': 1,
#                                                             'link-up-down-trap-enable': 'enabled',
#                                                             'name': 'GigabitEthernet1/3.251',
#                                                             'oper-status': 'unknown',
#                                                             'statistics': {'discontinuity-time': '1970-01-01T00:00:00+00:00'},
#                                                             'type': 'iana-if-type:ethernetCsmacd'},
#                                                            {'admin-status': 'up',
#                                                             'description': 'vCPEs '
#                                                                            'access '
#                                                                            'control',
#                                                             'enabled': True,
#                                                             'ietf-ip:ipv4': {'address': [{'ip': '172.16.33.10',
#                                                                                           'netmask': '255.255.255.128',
#                                                                                           'origin': 'static'}]},
#                                                             'if-index': 1,
#                                                             'link-up-down-trap-enable': 'enabled',
#                                                             'name': 'GigabitEthernet1/4',
#                                                             'oper-status': 'unknown',
#                                                             'statistics': {'discontinuity-time': '1970-01-01T00:00:00+00:00'},
#                                                             'type': 'iana-if-type:ethernetCsmacd'}]}},
#              {'ietf-interfaces:interfaces': {'interface': [{'admin-status': 'up',
#                                                             'description': 'Works '
#                                                                            'data',
#                                                             'enabled': True,
#                                                             'ietf-ip:ipv4': {'mtu': 9000},
#                                                             'if-index': 1,
#                                                             'link-up-down-trap-enable': 'enabled',
#                                                             'name': 'GigabitEthernet1/5',
#                                                             'oper-status': 'unknown',
#                                                             'statistics': {'discontinuity-time': '1970-01-01T00:00:00+00:00'},
#                                                             'type': 'iana-if-type:ethernetCsmacd'},
#                                                            {'admin-status': 'up',
#                                                             'description': 'Works '
#                                                                            'data '
#                                                                            'v6',
#                                                             'enabled': True,
#                                                             'ietf-ip:ipv6': {'address': [{'ip': '2001::1',
#                                                                                           'origin': 'static',
#                                                                                           'prefix-length': 64},
#                                                                                          {'ip': '2001:1::1',
#                                                                                           'origin': 'static',
#                                                                                           'prefix-length': 64}]},
#                                                             'if-index': 1,
#                                                             'link-up-down-trap-enable': 'enabled',
#                                                             'name': 'GigabitEthernet1/7',
#                                                             'oper-status': 'unknown',
#                                                             'statistics': {'discontinuity-time': '1970-01-01T00:00:00+00:00'},
#                                                             'type': 'iana-if-type:ethernetCsmacd'}]}}],
#   'valid': {0: True, 1: True}}]

List getter platforms or check whether a getter supports a platform before trying to parse output:

from ttp_templates import list_getter_platforms, is_getter_supported

list_getter_platforms(getter="interfaces")
# ["a10", "arista_eos", "cisco_ios", ...]

is_getter_supported(platform="linux", getter="interfaces")
# True

is_getter_supported(platform="linux", getter="bgp_asn")
# False

How templates collections structured

This repository contains three collections of templates corresponding to folder names:

  • platform collection - mimics ntc-templates API and follows same naming rule
  • yang collection - contains templates capable of producing YANG compatible structures out of text data
  • misc collection - miscellaneous templates for various use cases organized in folders

Platform collection templates files naming rule

{{ vendor_os }}_{{ command_with_underscores }}.txt - lower case only.

Naming rules details:

  • All space symbols ' ' replaced with underscores.
  • Pipe symbol | replaced with pipe in template name. For example, template to parse Cisco IOS show run | section interface command output must be named cisco_ios_show_running_config_pipe_section_interface.txt
  • Dash symbols - replaced with underscores. For example, template to parse Huawei display current-configuration interface command output must be named huawei_display_current_configuration_interface.txt

YANG collection templates files naming rule

{{ YANG module name }}_{{ platform_name }}.txt - lower case only

Naming rules details:

  • All space symbols ' ' replaced with underscore.
  • Dash symbol - does not replaced with underscore. For example, template to produce output compatible with openconfig-lldp YANG model for Cisco IOS must be named openconfig-lldp_cisco_xr.txt

Misc collection templates files naming rule

{{ usecase folder }}/{{ template name }}.txt - upper or lower case

Naming rules details:

  • Nothing replaced with anything, provided template name used as is.

Additional Templates Resources

List of resources with TTP templates:

Release files for ttp_templates 0.6.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ttp_templates 0.6.10
File Size Uploaded
ttp_templates-0.6.10.tar.gz 114.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ttp_templates 0.6.10
File Interpreter ABI Platform
ttp_templates-0.6.10-py3-none-any.whl Python 3 none any Details

Total release size: 342.8 kB

Release files / ttp_templates-0.6.10.tar.gz

Download URL ttp_templates-0.6.10.tar.gz
Size 114.1 kB
Tags Source
SHA-256 checksum
How to use checksums
61d16ef45523cb2efdac744bcc76509861e011e0e510e6f266645b9098706586
BLAKE2b-256 checksum
How to use checksums
243dae47168e0615e1fb279f2254b0602a1459d9cb81b5280b9e3da04d4841f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.3.3 CPython/3.13.13 Windows/11

Release files / ttp_templates-0.6.10-py3-none-any.whl

Download URL ttp_templates-0.6.10-py3-none-any.whl
Size 228.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7dd9caca8f425f81ca7f6f1dfc2e1ee8b8b8755bbc6184e5dd496beae2f8a110
BLAKE2b-256 checksum
How to use checksums
44a2261e53fe14a163d96d41b828b0930774038d8733cce704c119f480df70d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.3.3 CPython/3.13.13 Windows/11

Release history Release notifications | RSS feed

This release

0.6.10 This release

2 release files

0.6.9

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.13

2 release files

0.5.12

2 release files

0.5.11

2 release files

0.5.10

2 release files

0.5.9

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page