textfsm-aos


Nametextfsm-aos JSON
Version 1.1.3 PyPI version JSON
download
home_pagehttps://github.com/jefvantongerloo/textfsm-aos
SummaryAlcatel-Lucent Enterprise AOS CLI parsing (TextFSM)
upload_time2023-06-19 14:18:20
maintainer
docs_urlNone
authorJef Vantongerloo
requires_python>=3.8
licenseApache-2.0
keywords network automation textfsm scraping alcatel-lucent enterprise infrastructure
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            [![Build Status](https://app.travis-ci.com/jefvantongerloo/textfsm-aos.svg?branch=main)](https://app.travis-ci.com/jefvantongerloo/textfsm-aos)

# TEXTFSM-AOS

> Alcatel-Lucent Enterprise AOS CLI parsing

Python package for Alcatel-Lucent Enterprise aos6 and aos8 parsing based on TextFSM templates.

## Why TextFSM-AOS?

Parse semi-structured cli data to structured data ready to be ingested by your network automation pipeline. Automatically transform gathered output from screen-scraping tools like Netmiko, Scrapli and Paramiko. Receive uniform data across Alcatel-Lucent Enterprise devices running aos6 or aos8.

## Installation

Textfsm-aos can be installed using Git + Poetry or PyPI.
s
## Git

```bash
git clone https://github.com/jefvantongerloo/textfsm-aos
poetry install
```

## PyPI

```bash
pip install textfsm-aos
```

## Getting started

Provide screen-scraped data to parser

```python
from textfsm_aos.parser import parse

sample_data = """
   Package           Release       Size     Description
-----------------+---------------+--------+-----------------------------------
KFbase.img        6.7.2.89.R06    18059551 Alcatel-Lucent Enterprise Base Softw
KFos.img          6.7.2.89.R06     3566798 Alcatel-Lucent Enterprise OS
KFeni.img         6.7.2.89.R06     6123991 Alcatel-Lucent Enterprise NI softwar
KFsecu.img        6.7.2.89.R06      649383 Alcatel-Lucent Enterprise Security M
"""

parse("ale_aos6", "show microcode", sample_data)
```

parsed result

```python
[
   {
      "package":"KFbase.img",
      "release":"6.7.2.89.R06",
      "size":"18059551",
      "description":"Alcatel-Lucent Enterprise Base Softw"
   },
   {
      "package":"KFos.img",
      "release":"6.7.2.89.R06",
      "size":"3566798",
      "description":"Alcatel-Lucent Enterprise OS"
   },
   {
      "package":"KFeni.img",
      "release":"6.7.2.89.R06",
      "size":"6123991",
      "description":"Alcatel-Lucent Enterprise NI softwar"
   },
   {
      "package":"KFsecu.img",
      "release":"6.7.2.89.R06",
      "size":"649383",
      "description":"Alcatel-Lucent Enterprise Security M"
   }
]
```

## Integration tests

Due to sensitive information the gathered live data for integration testing is stored in a private repository. Releases are tested against following aos versions:

| aos version                       |                    tests            |
|-----------------------------------|:-----------------------------------:|
| 6.7.2.122.R08                     |         :heavy_check_mark:          |
| 8.9.73.R01                        |         :heavy_check_mark:          |
| 8.8.56.R02                        |         :heavy_check_mark:          |
| 8.8.152.R01                       |         :heavy_check_mark:          |
| 8.9.73.R01                        |         :heavy_check_mark:          |
| 8.9.107.R02                       |         :heavy_check_mark:          |

## Supported commands

| command                        |                 aos6                |                aos8               |
|--------------------------------|:-----------------------------------:|:---------------------------------:|
| history                        |        `alias: show history`        |         :heavy_check_mark:        |
| show 802.1x users              |          :heavy_check_mark:         |       `alias: show unp user`      |
| show 802.1x users unp          |          :heavy_check_mark:         |                :x:                |
| show 802.1x non-supplicant     |          :heavy_check_mark:         |                :x:                |
| show 802.1x non-supplicant unp |          :heavy_check_mark:         |                :x:                |
| show arp                       |                 :x:                 |         :heavy_check_mark:        |
| show chassis                   |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show cmm                       |                 :x:                 |         :heavy_check_mark:        |
| show command-log               |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show hardware-info             |                 :x:                 |         :heavy_check_mark:        |
| show health                    |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show history                   |          :heavy_check_mark:         |          `alias: history`         |
| show interface status          |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show interfaces                |                 :x:                 |         :heavy_check_mark:        |
| show ip interface              |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show ip route                  |          :heavy_check_mark:         |       `alias: show ip routes`     |
| show ip router database        |                 :x:                 |         :heavy_check_mark:        |
| show ip routes                 |        `alias: show ip route`       |         :heavy_check_mark:        |
| show linkagg                   |                 :x:                 |         :heavy_check_mark:        |
| show linkagg port              |                 :x:                 |         :heavy_check_mark:        |
| show lld remote system         |          :heavy_check_mark:         |                :x:                |
| show log events                |                 :x:                 |         :heavy_check_mark:        |
| show mac-address-table         |          :heavy_check_mark:         |     `alias: show mac-learning`    |
| show mac-learning              |   `alias: show mac-address-table`   |         :heavy_check_mark:        |
| show microcode                 |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show ntp server status         |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show port-security brief       |                 :x:                 |         :heavy_check_mark:        |
| show qos port                  |                 :x:                 |         :heavy_check_mark:        |
| show unp user                  |     `alias: show 802.1x users`      |         :heavy_check_mark:        |
| show unp user details          |                 :x:                 |         :heavy_check_mark:        |
| show user                      |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show running-directory         |                 :x:                 |         :heavy_check_mark:        |
| show qos log                   |                 :x:                 |         :heavy_check_mark:        |
| show snmp station              |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show snmp community map        |          :heavy_check_mark:         |  `alias: show snmp community-map` |
| show snmp community-map        |   `alias: show snmp community map`  |         :heavy_check_mark:        |
| show spantree ports            |                 :x:                 |         :heavy_check_mark:        |
| show system                    |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show transceivers              |                 :x:                 |         :heavy_check_mark:        |
| show vlan                      |          :heavy_check_mark:         |         :heavy_check_mark:        |
| show vlan members              |                 :x:                 |         :heavy_check_mark:        |
| show vlan port mobile          |          :heavy_check_mark:         |                :x:                |

## Direct TextFSM example usage

Bypass the build-in parser functionality and use the TextFSM templates directly in network cli scraping and orchestration tools like Netmiko, Scrapli and Ansible.

### Scrapli

Python script:

```python
from scrapli import Scrapli
from scrapli.helper import textfsm_parse

device = {
    "host": "<host ip>",
    "auth_username": "<username>",
    "auth_password": "<password>",
    "auth_strict_key": False,
    "transport": "ssh2",
    "platform": "alcatel_aos",
}

with Scrapli(**device) as conn:
    response = conn.send_command("show health").result
    structured_response = textfsm_parse(
        "templates/ale_aos6_show_health.textfsm", response
    )
```

Example output:

```python
[
   {
      "resource":"Receive",
      "limit":"80",
      "current":"01",
      "min_avg":"01",
      "hr_avg":"01",
      "hr_max":"01"
   },
   {
      "resource":"Transmit/Receive",
      "limit":"80",
      "current":"01",
      "min_avg":"01",
      "hr_avg":"01",
      "hr_max":"01"
   },
   {
      "resource":"Memory",
      "limit":"80",
      "current":"76",
      "min_avg":"76",
      "hr_avg":"76",
      "hr_max":"76"
   },
   {
      "resource":"Cpu",
      "limit":"80",
      "current":"32",
      "min_avg":"33",
      "hr_avg":"29",
      "hr_max":"97"
   }
]
```

### Netmiko

Python script:

```python
from netmiko import ConnectHandler

device = {
    'device_type': 'alcatel_aos',
    'host': '<host ip>',
    'username': '<username>',
    'password': '<password>'
}

with ConnectHandler(**device) as conn:
    output = conn.send_command("show health", use_textfsm=True, textfsm_template="textfsm-aos/templates/ale_aos6_show_health.textfsm")
```

Example Output:

```python
[
   {
      "resource":"Receive",
      "limit":"80",
      "current":"01",
      "min_avg":"01",
      "hr_avg":"01",
      "hr_max":"01"
   },
   {
      "resource":"Transmit/Receive",
      "limit":"80",
      "current":"01",
      "min_avg":"01",
      "hr_avg":"01",
      "hr_max":"01"
   },
   {
      "resource":"Memory",
      "limit":"80",
      "current":"76",
      "min_avg":"76",
      "hr_avg":"76",
      "hr_max":"76"
   },
   {
      "resource":"Cpu",
      "limit":"80",
      "current":"32",
      "min_avg":"33",
      "hr_avg":"29",
      "hr_max":"97"
   }
]
```

### Ansible

Ansible task:

```yaml
- name: AOS6 >> parsed with textfsm
  set_fact:
    health: "{{ health-aos6 | ansible.netcommon.parse_cli_textfsm('textfsm/templates/ale_aos6_show_health.textfsm') }}"
```

Example Output:

```yaml
    health:
    - healthModuleCpu1HrAvg: '29'
      healthModuleCpu1HrMax: '98'
      healthModuleCpu1MinAvg: '26'
      healthModuleCpuLatest: '31'
      healthModuleCpuLimit: '80'
      healthModuleMemory1HrAvg: '76'
      healthModuleMemory1HrMax: '76'
      healthModuleMemory1MinAvg: '76'
      healthModuleMemoryLatest: '76'
      healthModuleMemoryLimit: '80'
      healthModuleRx1HrAvg: '01'
      healthModuleRx1HrMax: '01'
      healthModuleRx1MinAvg: '01'
      healthModuleRxLatest: '01'
      healthModuleRxLimit: '80'
      healthModuleRxTxRx1HrAvg: '01'
      healthModuleRxTxRx1HrMax: '01'
      healthModuleRxTxRx1MinAvg: '01'
      healthModuleRxTxRxLatest: '01'
      healthModuleRxTxRxLimit: '80'
      healthModuleSlot: '1'
```

## How to contribute

1. Fork and create a branch with naming `<platform>_<command>` (for example: ale_aos8_show_system).

2. Add TextFSM template file in templates folder with naming `<platform>_<command>.textfsm`.

3. Add entry in templates_index with attribute command and platform.

4. Add test folder in 'templates' with naming `<platform>_<command>`.

5. Add sample cli output file in newly created folder `<platform>_<command>.txt`.

6. Add expected parsed data from sample cli output in `<platform>_<command>.yml`.

7. Run linting `tox` and tests `pytest`.

## How to setup development environment

1. Install `Poetry` package manager via `pip install poetry`

2. Install dev dependencies and textfsm-aos package in development mode with `poetry install`

3. Open virtual environment `poetry shell`

## Related projects

- Google TextFSM: [https://github.com/google/textfsm](https://github.com/google/textfsm)
- Scrapli: [https://github.com/carlmontanari/scrapli](https://github.com/carlmontanari/scrapli)
- Netmiko: [https://github.com/ktbyers/netmiko](https://github.com/ktbyers/netmiko)
- Getting started with TextFSM: [https://pyneng.readthedocs.io](https://pyneng.readthedocs.io/en/latest/book/21_textfsm/index.html)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/jefvantongerloo/textfsm-aos",
    "name": "textfsm-aos",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "network automation,textfsm,scraping,Alcatel-Lucent Enterprise,infrastructure",
    "author": "Jef Vantongerloo",
    "author_email": "jefvantongerloo@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/f6/97/641fc5675726f1d4ffa5491b1c5e1320c14842c1bcfffc57c2ff2ad55519/textfsm_aos-1.1.3.tar.gz",
    "platform": null,
    "description": "[![Build Status](https://app.travis-ci.com/jefvantongerloo/textfsm-aos.svg?branch=main)](https://app.travis-ci.com/jefvantongerloo/textfsm-aos)\n\n# TEXTFSM-AOS\n\n> Alcatel-Lucent Enterprise AOS CLI parsing\n\nPython package for Alcatel-Lucent Enterprise aos6 and aos8 parsing based on TextFSM templates.\n\n## Why TextFSM-AOS?\n\nParse semi-structured cli data to structured data ready to be ingested by your network automation pipeline. Automatically transform gathered output from screen-scraping tools like Netmiko, Scrapli and Paramiko. Receive uniform data across Alcatel-Lucent Enterprise devices running aos6 or aos8.\n\n## Installation\n\nTextfsm-aos can be installed using Git + Poetry or PyPI.\ns\n## Git\n\n```bash\ngit clone https://github.com/jefvantongerloo/textfsm-aos\npoetry install\n```\n\n## PyPI\n\n```bash\npip install textfsm-aos\n```\n\n## Getting started\n\nProvide screen-scraped data to parser\n\n```python\nfrom textfsm_aos.parser import parse\n\nsample_data = \"\"\"\n   Package           Release       Size     Description\n-----------------+---------------+--------+-----------------------------------\nKFbase.img        6.7.2.89.R06    18059551 Alcatel-Lucent Enterprise Base Softw\nKFos.img          6.7.2.89.R06     3566798 Alcatel-Lucent Enterprise OS\nKFeni.img         6.7.2.89.R06     6123991 Alcatel-Lucent Enterprise NI softwar\nKFsecu.img        6.7.2.89.R06      649383 Alcatel-Lucent Enterprise Security M\n\"\"\"\n\nparse(\"ale_aos6\", \"show microcode\", sample_data)\n```\n\nparsed result\n\n```python\n[\n   {\n      \"package\":\"KFbase.img\",\n      \"release\":\"6.7.2.89.R06\",\n      \"size\":\"18059551\",\n      \"description\":\"Alcatel-Lucent Enterprise Base Softw\"\n   },\n   {\n      \"package\":\"KFos.img\",\n      \"release\":\"6.7.2.89.R06\",\n      \"size\":\"3566798\",\n      \"description\":\"Alcatel-Lucent Enterprise OS\"\n   },\n   {\n      \"package\":\"KFeni.img\",\n      \"release\":\"6.7.2.89.R06\",\n      \"size\":\"6123991\",\n      \"description\":\"Alcatel-Lucent Enterprise NI softwar\"\n   },\n   {\n      \"package\":\"KFsecu.img\",\n      \"release\":\"6.7.2.89.R06\",\n      \"size\":\"649383\",\n      \"description\":\"Alcatel-Lucent Enterprise Security M\"\n   }\n]\n```\n\n## Integration tests\n\nDue to sensitive information the gathered live data for integration testing is stored in a private repository. Releases are tested against following aos versions:\n\n| aos version                       |                    tests            |\n|-----------------------------------|:-----------------------------------:|\n| 6.7.2.122.R08                     |         :heavy_check_mark:          |\n| 8.9.73.R01                        |         :heavy_check_mark:          |\n| 8.8.56.R02                        |         :heavy_check_mark:          |\n| 8.8.152.R01                       |         :heavy_check_mark:          |\n| 8.9.73.R01                        |         :heavy_check_mark:          |\n| 8.9.107.R02                       |         :heavy_check_mark:          |\n\n## Supported commands\n\n| command                        |                 aos6                |                aos8               |\n|--------------------------------|:-----------------------------------:|:---------------------------------:|\n| history                        |        `alias: show history`        |         :heavy_check_mark:        |\n| show 802.1x users              |          :heavy_check_mark:         |       `alias: show unp user`      |\n| show 802.1x users unp          |          :heavy_check_mark:         |                :x:                |\n| show 802.1x non-supplicant     |          :heavy_check_mark:         |                :x:                |\n| show 802.1x non-supplicant unp |          :heavy_check_mark:         |                :x:                |\n| show arp                       |                 :x:                 |         :heavy_check_mark:        |\n| show chassis                   |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show cmm                       |                 :x:                 |         :heavy_check_mark:        |\n| show command-log               |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show hardware-info             |                 :x:                 |         :heavy_check_mark:        |\n| show health                    |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show history                   |          :heavy_check_mark:         |          `alias: history`         |\n| show interface status          |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show interfaces                |                 :x:                 |         :heavy_check_mark:        |\n| show ip interface              |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show ip route                  |          :heavy_check_mark:         |       `alias: show ip routes`     |\n| show ip router database        |                 :x:                 |         :heavy_check_mark:        |\n| show ip routes                 |        `alias: show ip route`       |         :heavy_check_mark:        |\n| show linkagg                   |                 :x:                 |         :heavy_check_mark:        |\n| show linkagg port              |                 :x:                 |         :heavy_check_mark:        |\n| show lld remote system         |          :heavy_check_mark:         |                :x:                |\n| show log events                |                 :x:                 |         :heavy_check_mark:        |\n| show mac-address-table         |          :heavy_check_mark:         |     `alias: show mac-learning`    |\n| show mac-learning              |   `alias: show mac-address-table`   |         :heavy_check_mark:        |\n| show microcode                 |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show ntp server status         |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show port-security brief       |                 :x:                 |         :heavy_check_mark:        |\n| show qos port                  |                 :x:                 |         :heavy_check_mark:        |\n| show unp user                  |     `alias: show 802.1x users`      |         :heavy_check_mark:        |\n| show unp user details          |                 :x:                 |         :heavy_check_mark:        |\n| show user                      |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show running-directory         |                 :x:                 |         :heavy_check_mark:        |\n| show qos log                   |                 :x:                 |         :heavy_check_mark:        |\n| show snmp station              |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show snmp community map        |          :heavy_check_mark:         |  `alias: show snmp community-map` |\n| show snmp community-map        |   `alias: show snmp community map`  |         :heavy_check_mark:        |\n| show spantree ports            |                 :x:                 |         :heavy_check_mark:        |\n| show system                    |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show transceivers              |                 :x:                 |         :heavy_check_mark:        |\n| show vlan                      |          :heavy_check_mark:         |         :heavy_check_mark:        |\n| show vlan members              |                 :x:                 |         :heavy_check_mark:        |\n| show vlan port mobile          |          :heavy_check_mark:         |                :x:                |\n\n## Direct TextFSM example usage\n\nBypass the build-in parser functionality and use the TextFSM templates directly in network cli scraping and orchestration tools like Netmiko, Scrapli and Ansible.\n\n### Scrapli\n\nPython script:\n\n```python\nfrom scrapli import Scrapli\nfrom scrapli.helper import textfsm_parse\n\ndevice = {\n    \"host\": \"<host ip>\",\n    \"auth_username\": \"<username>\",\n    \"auth_password\": \"<password>\",\n    \"auth_strict_key\": False,\n    \"transport\": \"ssh2\",\n    \"platform\": \"alcatel_aos\",\n}\n\nwith Scrapli(**device) as conn:\n    response = conn.send_command(\"show health\").result\n    structured_response = textfsm_parse(\n        \"templates/ale_aos6_show_health.textfsm\", response\n    )\n```\n\nExample output:\n\n```python\n[\n   {\n      \"resource\":\"Receive\",\n      \"limit\":\"80\",\n      \"current\":\"01\",\n      \"min_avg\":\"01\",\n      \"hr_avg\":\"01\",\n      \"hr_max\":\"01\"\n   },\n   {\n      \"resource\":\"Transmit/Receive\",\n      \"limit\":\"80\",\n      \"current\":\"01\",\n      \"min_avg\":\"01\",\n      \"hr_avg\":\"01\",\n      \"hr_max\":\"01\"\n   },\n   {\n      \"resource\":\"Memory\",\n      \"limit\":\"80\",\n      \"current\":\"76\",\n      \"min_avg\":\"76\",\n      \"hr_avg\":\"76\",\n      \"hr_max\":\"76\"\n   },\n   {\n      \"resource\":\"Cpu\",\n      \"limit\":\"80\",\n      \"current\":\"32\",\n      \"min_avg\":\"33\",\n      \"hr_avg\":\"29\",\n      \"hr_max\":\"97\"\n   }\n]\n```\n\n### Netmiko\n\nPython script:\n\n```python\nfrom netmiko import ConnectHandler\n\ndevice = {\n    'device_type': 'alcatel_aos',\n    'host': '<host ip>',\n    'username': '<username>',\n    'password': '<password>'\n}\n\nwith ConnectHandler(**device) as conn:\n    output = conn.send_command(\"show health\", use_textfsm=True, textfsm_template=\"textfsm-aos/templates/ale_aos6_show_health.textfsm\")\n```\n\nExample Output:\n\n```python\n[\n   {\n      \"resource\":\"Receive\",\n      \"limit\":\"80\",\n      \"current\":\"01\",\n      \"min_avg\":\"01\",\n      \"hr_avg\":\"01\",\n      \"hr_max\":\"01\"\n   },\n   {\n      \"resource\":\"Transmit/Receive\",\n      \"limit\":\"80\",\n      \"current\":\"01\",\n      \"min_avg\":\"01\",\n      \"hr_avg\":\"01\",\n      \"hr_max\":\"01\"\n   },\n   {\n      \"resource\":\"Memory\",\n      \"limit\":\"80\",\n      \"current\":\"76\",\n      \"min_avg\":\"76\",\n      \"hr_avg\":\"76\",\n      \"hr_max\":\"76\"\n   },\n   {\n      \"resource\":\"Cpu\",\n      \"limit\":\"80\",\n      \"current\":\"32\",\n      \"min_avg\":\"33\",\n      \"hr_avg\":\"29\",\n      \"hr_max\":\"97\"\n   }\n]\n```\n\n### Ansible\n\nAnsible task:\n\n```yaml\n- name: AOS6 >> parsed with textfsm\n  set_fact:\n    health: \"{{ health-aos6 | ansible.netcommon.parse_cli_textfsm('textfsm/templates/ale_aos6_show_health.textfsm') }}\"\n```\n\nExample Output:\n\n```yaml\n    health:\n    - healthModuleCpu1HrAvg: '29'\n      healthModuleCpu1HrMax: '98'\n      healthModuleCpu1MinAvg: '26'\n      healthModuleCpuLatest: '31'\n      healthModuleCpuLimit: '80'\n      healthModuleMemory1HrAvg: '76'\n      healthModuleMemory1HrMax: '76'\n      healthModuleMemory1MinAvg: '76'\n      healthModuleMemoryLatest: '76'\n      healthModuleMemoryLimit: '80'\n      healthModuleRx1HrAvg: '01'\n      healthModuleRx1HrMax: '01'\n      healthModuleRx1MinAvg: '01'\n      healthModuleRxLatest: '01'\n      healthModuleRxLimit: '80'\n      healthModuleRxTxRx1HrAvg: '01'\n      healthModuleRxTxRx1HrMax: '01'\n      healthModuleRxTxRx1MinAvg: '01'\n      healthModuleRxTxRxLatest: '01'\n      healthModuleRxTxRxLimit: '80'\n      healthModuleSlot: '1'\n```\n\n## How to contribute\n\n1. Fork and create a branch with naming `<platform>_<command>` (for example: ale_aos8_show_system).\n\n2. Add TextFSM template file in templates folder with naming `<platform>_<command>.textfsm`.\n\n3. Add entry in templates_index with attribute command and platform.\n\n4. Add test folder in 'templates' with naming `<platform>_<command>`.\n\n5. Add sample cli output file in newly created folder `<platform>_<command>.txt`.\n\n6. Add expected parsed data from sample cli output in `<platform>_<command>.yml`.\n\n7. Run linting `tox` and tests `pytest`.\n\n## How to setup development environment\n\n1. Install `Poetry` package manager via `pip install poetry`\n\n2. Install dev dependencies and textfsm-aos package in development mode with `poetry install`\n\n3. Open virtual environment `poetry shell`\n\n## Related projects\n\n- Google TextFSM: [https://github.com/google/textfsm](https://github.com/google/textfsm)\n- Scrapli: [https://github.com/carlmontanari/scrapli](https://github.com/carlmontanari/scrapli)\n- Netmiko: [https://github.com/ktbyers/netmiko](https://github.com/ktbyers/netmiko)\n- Getting started with TextFSM: [https://pyneng.readthedocs.io](https://pyneng.readthedocs.io/en/latest/book/21_textfsm/index.html)\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Alcatel-Lucent Enterprise AOS CLI parsing (TextFSM)",
    "version": "1.1.3",
    "project_urls": {
        "Homepage": "https://github.com/jefvantongerloo/textfsm-aos",
        "Repository": "https://github.com/jefvantongerloo/textfsm-aos"
    },
    "split_keywords": [
        "network automation",
        "textfsm",
        "scraping",
        "alcatel-lucent enterprise",
        "infrastructure"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6553102b778288d1065fdf297c3029c575e0683bc9a81d6942cd030e733ccd6",
                "md5": "7456de453db1769c03721aefe010e86e",
                "sha256": "30b53f923c09dcdd2c48dfb8f5920472720fa421c0c9738b036cb5e37f99e8ce"
            },
            "downloads": -1,
            "filename": "textfsm_aos-1.1.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7456de453db1769c03721aefe010e86e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 40380,
            "upload_time": "2023-06-19T14:18:18",
            "upload_time_iso_8601": "2023-06-19T14:18:18.208827Z",
            "url": "https://files.pythonhosted.org/packages/f6/55/3102b778288d1065fdf297c3029c575e0683bc9a81d6942cd030e733ccd6/textfsm_aos-1.1.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f697641fc5675726f1d4ffa5491b1c5e1320c14842c1bcfffc57c2ff2ad55519",
                "md5": "b23b0ab73ef0897c890adbcbec08842c",
                "sha256": "e0e99eb214a7863b2b4ee2c2af027efcd08d08f80ded8268e8eeac09ec0c9ac2"
            },
            "downloads": -1,
            "filename": "textfsm_aos-1.1.3.tar.gz",
            "has_sig": false,
            "md5_digest": "b23b0ab73ef0897c890adbcbec08842c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 26072,
            "upload_time": "2023-06-19T14:18:20",
            "upload_time_iso_8601": "2023-06-19T14:18:20.024959Z",
            "url": "https://files.pythonhosted.org/packages/f6/97/641fc5675726f1d4ffa5491b1c5e1320c14842c1bcfffc57c2ff2ad55519/textfsm_aos-1.1.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-06-19 14:18:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jefvantongerloo",
    "github_project": "textfsm-aos",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "tox": true,
    "lcname": "textfsm-aos"
}
        
Elapsed time: 0.07845s