Skip to main content

Shell and filesystem operations REST API service for the PyLama ecosystem

Project description

SheLLama

PyLama Ecosystem Navigation

Project Description Links
SheLLama Shell command generation GitHub · PyPI · Docs
GetLLM LLM model management and code generation GitHub · PyPI · Docs
DevLama Python code generation with Ollama GitHub · Docs
LogLama Centralized logging and environment management GitHub · PyPI · Docs
APILama API service for code generation GitHub · Docs
BEXY Sandbox for executing generated code GitHub · Docs
JSLama JavaScript code generation GitHub · NPM · Docs
JSBox JavaScript sandbox for executing code GitHub · NPM · Docs
WebLama Web application generation GitHub · Docs

Author

Tom Sapletta — DevOps Engineer & Systems Architect

  • 💻 15+ years in DevOps, Software Development, and Systems Architecture
  • 🏢 Founder & CEO at Telemonit (Portigen - edge computing power solutions)
  • 🌍 Based in Germany | Open to remote collaboration
  • 📚 Passionate about edge computing, hypermodularization, and automated SDLC

GitHub LinkedIn ORCID Portfolio

Support This Project

If you find this project useful, please consider supporting it:


SheLLama is a dedicated REST API service for shell and filesystem operations in the PyLama ecosystem. It provides a unified interface for file management, directory operations, shell command execution, and Git integration, available both as a Python library and a standalone REST API service that communicates with the APILama gateway. SheLLama integrates with LogLama as the primary service for centralized logging, environment management, and service orchestration.

Features

  • RESTful API: Complete REST API for all shell and filesystem operations
  • File Operations: Read, write, list, and search files with proper error handling
  • Directory Management: Create, delete, and list directories with detailed information
  • Shell Command Execution: Execute shell commands with output capture and error handling
  • Git Integration: Initialize repositories, commit changes, view status and logs
  • Secure File Handling: Proper permissions and security checks for all operations
  • Cross-Origin Support: CORS headers for integration with web applications
  • LogLama Integration: Integrates with LogLama for centralized logging, environment management, and service orchestration
  • Structured Logging: All operations are logged with component context for better filtering and analysis
  • Advanced Error Handling: Standardized error responses with categorization and severity levels
  • Debug Window Integration: Real-time debugging information with filtering capabilities
  • Dependency Management: Support for pip, Poetry, and Pipenv for flexible dependency management

Installation

# Create a virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install the package
pip install -e .

Usage

As a Python Library

# File operations
from shellama import file_ops

# List files in a directory
files = file_ops.list_files('/path/to/directory')

# Read a file
content = file_ops.read_file('/path/to/file.md')

# Write to a file
file_ops.write_file('/path/to/file.md', 'New content')

# Directory operations
from shellama import dir_ops

# Create a directory
dir_ops.create_directory('/path/to/new/directory')

# Shell commands
from shellama import shell

# Execute a shell command
result = shell.execute_command('ls -la')

# Git operations
from shellama import git_ops

# Get git status
status = git_ops.get_status('/path/to/repo')

As a REST API Service

SheLLama is designed to run as a standalone REST API service that communicates with the APILama gateway:

# Start the SheLLama API server
python -m shellama.app --port 8002 --host 127.0.0.1

Using environment variables:

export PORT=8002
export HOST=127.0.0.1
export DEBUG=False
python -m shellama.app

Or using the Makefile:

make run PORT=8002 HOST=127.0.0.1

Environment Variables

SheLLama uses the following environment variables for configuration:

  • PORT: The port to run the server on (default: 8002)
  • HOST: The host to bind to (default: 127.0.0.1)
  • DEBUG: Enable debug mode (default: False)
  • LOG_LEVEL: Logging level (default: INFO)
  • LOG_FILE: Log file path (default: shellama.log)
  • SECRET_KEY: Secret key for secure operations

You can set these variables in a .env file or pass them directly when starting the server.

API Endpoints

File Operations:

  • GET /files?directory=/path/to/dir - List files in a directory
  • GET /file?filename=/path/to/file.md - Get file content
  • POST /file - Save file content (JSON body: {"filename": "path", "content": "data"})
  • DELETE /file?filename=/path/to/file.md - Delete a file

Directory Operations:

  • GET /directory?path=/path/to/dir - Get directory information
  • POST /directory - Create a directory (JSON body: {"path": "/path/to/dir"})
  • DELETE /directory?path=/path/to/dir - Delete a directory

Shell Operations:

  • POST /shell - Execute a shell command (JSON body: {"command": "ls -la", "cwd": "/path/to/dir"})

Git Operations:

  • GET /git/status?path=/path/to/repo - Get git repository status
  • POST /git/init - Initialize a git repository (JSON body: {"path": "/path/to/dir"})
  • POST /git/commit - Commit changes (JSON body: {"path": "/path/to/repo", "message": "commit message"})
  • GET /git/log?path=/path/to/repo - Get git commit history

Debug Operations:

  • GET /api/debug/status - Get debug window status
  • GET /api/debug/entries - Get debug entries with optional filtering
  • POST /api/debug/clear - Clear all debug entries
  • POST /api/debug/enable - Enable the debug window
  • POST /api/debug/disable - Disable the debug window
  • GET /api/debug/categories - Get all available debug categories
  • GET /api/debug/levels - Get all available debug levels
  • POST /api/debug/add - Add a debug entry

Development

Setting Up the Development Environment

SheLLama supports multiple dependency management tools for flexibility. Choose the approach that works best for your workflow.

Managing Services

The Makefile provides several targets to help manage services and Docker containers:

# Start the SheLLama service
make run PORT=8002 HOST=0.0.0.0

# Start the Ansible testing environment
make ansible-test-env-up

# Stop all services, Docker containers, and free up ports
make stop

The stop target will:

  • Stop all running Python processes for SheLLama and APILama on standard ports (8002, 8080, 9002, 9080, 19002, 19080)
  • Stop and remove all Docker containers related to the PyLama ecosystem
  • Stop the Ansible testing environment
  • Check for any processes still using the relevant ports

Using pip and venv (Standard)

# Create a virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -e ".[dev]"

Using Poetry

# Install dependencies with Poetry
poetry install

# Activate the Poetry virtual environment
poetry shell

# Run a command without activating the environment
poetry run python -m shellama.app

Using Pipenv

# Install dependencies with Pipenv
pipenv install --dev

# Activate the Pipenv virtual environment
pipenv shell

# Run a command without activating the environment
pipenv run python -m shellama.app

Running Tests

# Run all tests
python -m pytest

# Run specific test file
python -m pytest tests/test_file_ops.py

# Run with coverage report
python -m pytest --cov=shellama tests/

Error Handling and Debugging

SheLLama includes a comprehensive error handling system that provides standardized error responses across the application. This system categorizes errors by type and severity, making it easier to identify and resolve issues.

Error Categories

  • Validation Errors: Issues with input validation
  • Permission Errors: Access denied or insufficient permissions
  • File System Errors: Problems with file or directory operations
  • Git Errors: Issues with Git operations
  • Shell Errors: Problems executing shell commands
  • Configuration Errors: Issues with application configuration
  • External Service Errors: Problems with external services

Debug Window

The debug window provides real-time debugging information that can be accessed through the API. It captures detailed information about application operations, errors, and performance metrics.

Features include:

  • Filtering: Filter debug entries by level, category, or source
  • Real-time Capture: Capture debugging information as it happens
  • API Access: Access debug information through REST API endpoints
  • Configurable: Enable or disable debugging at runtime
# Using the debug window in code
from shellama.debug_window import add_debug_entry, DebugLevel, DebugCategory

# Add a debug entry
add_debug_entry(
    message="Processing file operation",
    level=DebugLevel.INFO,
    category=DebugCategory.FILE_OPERATIONS,
    details={"filename": "example.txt", "operation": "read"}
)

Ansible Integration Tests

SheLLama includes a comprehensive suite of Ansible tests that verify the functionality of all API endpoints. These tests ensure that the service works correctly and can be integrated with other systems.

Ansible Testing Environment

A Docker-based Ansible testing environment is available for testing SheLLama and its integration with other PyLama components. This environment includes:

  • Ansible Controller: Container with Ansible and testing tools installed
  • Service Targets: Containers for each PyLama component
  • Mock Services: Containers that simulate services for testing integration

To use the Ansible testing environment:

# Build the testing environment
make ansible-test-env-build

# Start the testing environment
make ansible-test-env-up

# Run tests in the environment
make ansible-test-env-run

# Open a shell in the controller container
make ansible-test-env-shell

# Stop the testing environment
make ansible-test-env-down

See the test_markdown/devops_tools/ANSIBLE_TESTING.md file for more detailed information about the Ansible testing environment.

Docker Testing Environment

A Docker testing environment is available for testing SheLLama without requiring the actual services to be running:

# Build and run all tests
./run_docker_tests.sh --build --run-tests

# Start in interactive mode
./run_docker_tests.sh --interactive

# Run only Git operations tests
./run_docker_tests.sh --test-git

# Stop containers when done
./run_docker_tests.sh --stop

See the DOCKER_TESTING.md file for more detailed information about the Docker testing environment.

Test Markdown Directory

A comprehensive test markdown directory is included in the project to support testing of all SheLLama functionality:

/test_markdown/
├── file_operations/       # For testing file handling functions
├── git_operations/        # For testing Git functionality
├── shell_commands/        # For testing shell command execution
└── devops_tools/          # For testing DevOps tools integration

This directory contains example files for testing various aspects of SheLLama, including file operations, Git functionality, shell command execution, and DevOps tools integration. See the test_markdown/README.md file for more information.

# Run all Ansible tests (requires APILama and SheLLama to be running)
make ansible-test

# Run tests in development mode (skips service health check)
make ansible-test-dev

# Validate test syntax without running tests
make ansible-test-dry-run

# Run specific test categories
make ansible-test-git    # Run only Git operations tests
make ansible-test-file   # Run only file operations tests
make ansible-test-dir    # Run only directory operations tests
make ansible-test-shell  # Run only shell operations tests
make ansible-test-error  # Run only error handling tests

# Direct targets that bypass the virtual environment (for systems with permission issues)
make ansible-test-direct         # Run all tests directly
make ansible-test-git-direct    # Run only Git operations tests directly
make ansible-test-file-direct   # Run only file operations tests directly
make ansible-test-dir-direct    # Run only directory operations tests directly
make ansible-test-shell-direct  # Run only shell operations tests directly
make ansible-test-error-direct  # Run only error handling tests directly

# Syntax validation targets (no services or virtual environment needed)
make ansible-test-all-syntax    # Validate syntax for all test playbooks
make ansible-test-git-syntax    # Validate Git operations tests syntax
make ansible-test-file-syntax   # Validate File operations tests syntax
make ansible-test-dir-syntax    # Validate Directory operations tests syntax
make ansible-test-shell-syntax  # Validate Shell operations tests syntax
make ansible-test-error-syntax  # Validate Error handling tests syntax

# Mock test targets (no services or virtual environment needed)
make ansible-test-git-mock     # Run Git operations tests with mocked responses

# Test markdown verification
make verify-test-markdown     # Verify test markdown directory structure

# Run with additional options
make ansible-test ANSIBLE_OPTS="--verbose --no-cleanup"

# Or run the test script directly with options
./run_ansible_tests.sh

# Run with verbose output
./run_ansible_tests.sh --verbose

# Run without cleaning up test directories
./run_ansible_tests.sh --no-cleanup

# Run without generating HTML report
./run_ansible_tests.sh --no-report

# Skip the health check (for development/testing)
./run_ansible_tests.sh --skip-health-check

# Show help
./run_ansible_tests.sh --help

Test Reports

The Ansible tests generate a comprehensive HTML report that provides detailed information about the test results. The report includes:

  • Test summary with overall status
  • Detailed results for each test category (file operations, directory operations, shell operations, git operations)
  • Assertions verification
  • Timestamps and environment information

Test reports are saved in the ansible_tests/logs/ directory with a timestamp in the filename.

The Ansible tests cover:

  • File operations (create, read, update, delete)
  • Directory operations (create, list, delete)
  • Shell command execution
  • Git operations (comprehensive):
    • Repository initialization
    • Status checking
    • Adding and committing files
    • Branch creation and checkout
    • Merging branches
    • Viewing commit history
  • Error handling (edge cases):
    • Non-existent directories and files
    • Invalid Git repositories and branches
    • Invalid shell commands
    • Proper error response validation
  • Health check endpoints

Testing through APILama Gateway

The Ansible tests are designed to test SheLLama through the APILama gateway, which is the recommended way to access SheLLama in production. The APILama gateway adds the /api/shellama prefix to all SheLLama endpoints.

To run the tests, both the APILama gateway and SheLLama service must be running:

# In one terminal, start the APILama gateway
cd ../apilama
make run

# In another terminal, start the SheLLama service
cd ../shellama
make run

# Then run the tests
make ansible-test

Test results are logged to ansible_tests/logs/ for debugging and auditing purposes.

Code Quality

# Format code with Black
black shellama tests

# Lint code with Flake8
flake8 shellama tests

# Type checking with MyPy
mypy shellama

Docker Development

# Build the Docker image
docker build -t shellama .

# Run the container
docker run -p 8002:8002 shellama

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shellama-0.1.7.tar.gz (29.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shellama-0.1.7-py3-none-any.whl (30.6 kB view details)

Uploaded Python 3

File details

Details for the file shellama-0.1.7.tar.gz.

File metadata

  • Download URL: shellama-0.1.7.tar.gz
  • Upload date:
  • Size: 29.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for shellama-0.1.7.tar.gz
Algorithm Hash digest
SHA256 5f2362cc288d80e21b9a309e7026c271c20d603af3665e8695773a7593aa94e9
MD5 c7e410df90257088176639e6da4b8004
BLAKE2b-256 8d9607aaa8924a8ec61a54a60fb0862f544be0e21a70db1494d7f21324bcf015

See more details on using hashes here.

File details

Details for the file shellama-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: shellama-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 30.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for shellama-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 94f653dc10bcf466ec0074fc8d12767af0e7aa183ab2d5b798c6545df45d73d6
MD5 bc331d6747fe9359de948b7cbba39157
BLAKE2b-256 02103796373637ff475057466c8858cc8143f75a54a98d18ab97144fb06e19f1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page