|
| 1 | +# CallShell Module Documentation |
| 2 | + |
| 3 | +## Overview |
| 4 | + |
| 5 | +The `CallShell` module is a Python implementation that provides functionality for executing shell scripts within an application workflow. Using a combination of template rendering and environment configuration, it seamlessly integrates shell execution into Python processes. |
| 6 | + |
| 7 | +This document details the components and functionalities of the `CallShell` module, which is a part of the larger `patchwork` framework. |
| 8 | + |
| 9 | +## Components |
| 10 | + |
| 11 | +The module consists of the following key files: |
| 12 | + |
| 13 | +1. `CallShell.py` - Implements the main functionality for shell script execution. |
| 14 | +2. `__init__.py` - This file is currently empty and serves as a package marker. |
| 15 | +3. `typed.py` - Contains type definitions for inputs and outputs used by the `CallShell` class. |
| 16 | + |
| 17 | +## File: CallShell.py |
| 18 | + |
| 19 | +### Functionality |
| 20 | + |
| 21 | +The `CallShell` class serves as the primary entry point for executing shell scripts. It allows users to specify a script, working directory, and environment variables. Here's a breakdown of how it works: |
| 22 | + |
| 23 | +- **Script Rendering**: Templates within scripts can be dynamically rendered using provided values. |
| 24 | +- **Environment Parsing**: Environment variables are parsed and set up appropriately for the script execution. |
| 25 | +- **Script Execution**: The shell script is executed within a specified working directory with the configured environment. |
| 26 | +- **Logging**: Outputs (stdout and stderr) from the script execution are logged for reference. |
| 27 | + |
| 28 | +### Inputs |
| 29 | + |
| 30 | +The `CallShell` class accepts the following inputs via a dictionary: |
| 31 | + |
| 32 | +- `script` (str): The shell script to execute. Required. |
| 33 | +- `script_template_values` (dict): Values to render within the script template. |
| 34 | +- `working_dir` (str, optional): Directory where the script is executed. |
| 35 | +- `env` (str, optional): String describing environment variables to set. |
| 36 | + |
| 37 | +### Outputs |
| 38 | + |
| 39 | +The `CallShell` class returns the following outputs in the form of a dictionary: |
| 40 | + |
| 41 | +- `stdout_output` (str): Standard output from the executed script. |
| 42 | +- `stderr_output` (str): Standard error output from the executed script. |
| 43 | + |
| 44 | +### Logging |
| 45 | + |
| 46 | +The execution results, including both stdout and stderr, are logged using the `patchwork` logger. This aids in debugging and tracking script execution. |
| 47 | + |
| 48 | +## File: __init__.py |
| 49 | + |
| 50 | +This file is a standard marker to indicate that the directory can be treated as a Python package. Currently, it does not contain any code or declarations. |
| 51 | + |
| 52 | +## File: typed.py |
| 53 | + |
| 54 | +### Definitions |
| 55 | + |
| 56 | +The `typed.py` file is utilized to define the types of inputs and outputs for the `CallShell` class, helping to ensure type safety and clarity. It uses `TypedDict` from Python's typing extensions module to define these structures. |
| 57 | + |
| 58 | +### Input Types |
| 59 | + |
| 60 | +- `CallShellInputs`: Extends to include optional fields like `working_dir`, `env`, and `script_template_values` in addition to the required `script`. |
| 61 | + |
| 62 | +### Output Types |
| 63 | + |
| 64 | +- `CallShellOutputs`: Defines the structure with a single field `stdout_output` for capturing the script's output. |
| 65 | + |
| 66 | +## Usage Scenario |
| 67 | + |
| 68 | +The `CallShell` module is ideal for scenarios where shell scripts need to be dynamically executed within a Python application, particularly when the script requires specific environment variables or must be run within a certain directory context. |
| 69 | + |
| 70 | +By accommodating template rendering and environment variable parsing, `CallShell` integrates well into pipelines and workflows where hybrid Python and shell script operations are necessary. |
0 commit comments