Metadata-Version: 2.4
Name: genie.lamp
Version: 26.2
Summary: LAMP shell
Author: Cisco Systems Inc
License: Proprietary
Project-URL: homepage, http://wwwin-pyats.cisco.com/
Keywords: pyats,cisco,development,packaging
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Telecommunications Industry
Classifier: License :: Other/Proprietary License
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Testing
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: asteval
Requires-Dist: cmd2
Requires-Dist: colorama
Requires-Dist: docstring_parser
Requires-Dist: jinja2
Requires-Dist: prompt-toolkit
Requires-Dist: pydantic
Requires-Dist: rich
Requires-Dist: ruamel.yaml
Requires-Dist: typing_extensions
Provides-Extra: dev
Requires-Dist: isort; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: import-linter; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Dynamic: license-file

# LAMP

## Overview

LAMP is an interactive command-line interface built on top of pyATS/Genie that enables users to connect to network devices and perform operations interactively. Think of it as a REPL (Read-Eval-Print Loop) for network automation—where you can execute commands, parse outputs, run APIs, and configure devices in real-time, all while LAMP automatically records your session into reusable Blitz YAML automation scripts.

LAMP bridges the gap between manual device interaction and automated testing. Instead of writing pyATS test scripts from scratch, you can work directly with your devices through LAMP's intuitive command interface. Every action you perform is automatically captured and can be replayed later, making it easy to convert exploratory work into production-ready automation.

### Core Commands

- **execute** - Run CLI commands on devices and capture output
- **configure** - Apply configuration changes to devices
- **parse** - Execute commands and parse output into structured data using Genie parsers
- **api** - Execute Genie APIs for higher-level operations
- **bash_console** - Interact with device bash/shell consoles
- **replay** - Re-run previously recorded LAMP sessions (via Blitz YAML files)
- **sleep** - Add delays between operations

### Key Features

- **Interactive Shell Capabilities**: Command history, autocompletion, and inline editing for smooth user experience
- **Automatic Recording**: Every operation is automatically saved as Blitz YAML, turning interactive sessions into reusable automation scripts
- **Replay Workflows**: Use the `replay` command to re-execute previously recorded sessions, enabling rapid iteration and workflow automation
- **Variables and Loops**: Support for parameterized commands, variables, and loops to work with multiple devices efficiently
- **Include/Exclude Filters**: Powerful filtering options for command outputs to focus on specific data

## Installation

### Prerequisites
- Python >= 3.10
- pyATS and Genie

### For Development
```bash
git clone <repository-url>
cd genielamp
make develop
```

### For Users
```bash
pip install genie
```

### Starting LAMP
```bash
genie lamp
```

## Developer's Guide

### Code Quality Tools
When developing, ensure your code follows these standards:
- **black**: Code formatting
- **isort**: Import sorting
- **ruff**: Linting
- **mypy**: Type checking
- **lint-imports**: Import linting

These checks are enforced in the CI pipeline.

### Testing
Tests are written using **pytest** and located in the `tests/` directory. Run tests with:
```bash
cd genielamp
pytest
```

### Development Commands
```bash
# Setup development environment
make develop

# Format code
isort src/ tests/
black src/ tests/

# Check linting
ruff check src/ tests/

# Type checking
mypy src/

# Import linting
lint-imports --config importlinter.ini

# Run tests
pytest
```

## How to Write a Changelog for Your Contribution

Every contribution to LAMP must include a changelog file describing the changes made. This helps maintain clear documentation of all modifications to the project.

### 1. Follow the Changelog Format

Familiarize yourself with the examples at [changelogs/undistributed/template.rst](changelogs/undistributed/template.rst). Changelogs must be written in the same style as the examples found there:

```rst
--------------------------------------------------------------------------------
                                New
--------------------------------------------------------------------------------
* <component>
    * <describe the changes>

--------------------------------------------------------------------------------
                                Fix
--------------------------------------------------------------------------------
* <component>
    * <describe the changes>
```

**Example:**
```rst
--------------------------------------------------------------------------------
                                New
--------------------------------------------------------------------------------
* UI
    * Added support for include/exclude filters with -i and -e flags
```

### 2. Create a Uniquely Named Changelog File

The changelog (singular) that accompanies a contribution must have a unique file name and be placed in `changelogs/undistributed/`.

To generate a unique file name, use the following bash/terminal command to generate a sufficiently unique timestamp (Linux and Mac):

```bash
$ date "+%Y%m%d%H%M%S"
```

Create your changelog file with a short description and the timestamp:
```
changelogs/undistributed/changelog_<short_description>_<timestamp>.rst
```

**Example:**
```
changelogs/undistributed/changelog_execute_filters_20200807212611.rst
```
