Shared
provide.foundation.process.shared
¶
TODO: Add module docstring.
Classes¶
CompletedProcess
¶
Result of a completed process.
Note
The env field only stores caller-provided environment variable overrides,
not the full subprocess environment. This prevents credential leakage when
CompletedProcess objects are logged or stored.
Functions¶
check_process_exit_code
¶
Check process exit code and raise if non-zero.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
process
|
Any
|
Subprocess instance with returncode attribute |
required |
cmd_str
|
str
|
Command string for error messages |
required |
Raises:
| Type | Description |
|---|---|
ProcessError
|
If process exited with non-zero code |
Source code in provide/foundation/process/shared.py
check_process_success
¶
check_process_success(
process_returncode: int,
cmd_str: str,
stdout: str,
stderr: str,
check: bool,
) -> None
Check if process completed successfully.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
process_returncode
|
int
|
Process exit code |
required |
cmd_str
|
str
|
Command string for error messages |
required |
stdout
|
str
|
Standard output |
required |
stderr
|
str
|
Standard error |
required |
check
|
bool
|
Whether to raise exception on non-zero exit |
required |
Raises:
| Type | Description |
|---|---|
ProcessError
|
If check=True and process failed |
Source code in provide/foundation/process/shared.py
create_completed_process
¶
create_completed_process(
cmd: list[str] | str,
returncode: int,
stdout: bytes,
stderr: bytes,
) -> CompletedProcess
Create a CompletedProcess result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cmd
|
list[str] | str
|
Command that was executed |
required |
returncode
|
int
|
Process exit code |
required |
stdout
|
bytes
|
Standard output bytes |
required |
stderr
|
bytes
|
Standard error bytes |
required |
Returns:
| Type | Description |
|---|---|
CompletedProcess
|
CompletedProcess with decoded output |
Source code in provide/foundation/process/shared.py
filter_subprocess_kwargs
¶
Filter kwargs to only include valid subprocess parameters.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
kwargs
|
dict
|
Dictionary of keyword arguments |
required |
Returns:
| Type | Description |
|---|---|
dict
|
Filtered dictionary with only valid subprocess parameters |
Source code in provide/foundation/process/shared.py
normalize_cwd
¶
prepare_environment
¶
Prepare environment for subprocess execution with security scrubbing.
This function uses environment scrubbing by default to prevent credential leakage. Only allowlisted safe variables plus caller overrides are included.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
env
|
Mapping[str, str] | None
|
Optional environment variables provided by caller (always included) |
required |
Returns:
| Type | Description |
|---|---|
dict[str, str]
|
Scrubbed environment dictionary for subprocess |
Security Note
- System environment is scrubbed to allowlist only
- Caller overrides (env parameter) are always included
- Sensitive credentials in os.environ are excluded
- Result contains <50 vars instead of 100+ from os.environ
Source code in provide/foundation/process/shared.py
prepare_input
¶
Prepare input for subprocess based on text mode.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
input
|
str | bytes | None
|
Input data as string, bytes, or None |
required |
text_mode
|
bool
|
Whether subprocess is in text mode |
required |
Returns:
| Type | Description |
|---|---|
str | bytes | None
|
Properly converted input for subprocess |
Source code in provide/foundation/process/shared.py
validate_command_type
¶
Validate command type matches shell parameter.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cmd
|
list[str] | str
|
Command as list or string |
required |
shell
|
bool
|
Whether shell execution is enabled |
required |
Raises:
| Type | Description |
|---|---|
ValidationError
|
If string command provided without shell=True |