applescript_executor
¶
AppleScript subprocess execution module.
This module handles the low-level subprocess execution for AppleScript commands, including timeout handling and process cleanup.
AppleScriptExecutionError
¶
Bases: OSError
Exception raised when AppleScript execution fails.
This exception is used to signal transient errors that may be retried by the DatabaseRetryHandler. It extends OSError to leverage the retry handler's transient error detection based on errno codes.
Initialize the execution error.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
message
|
str
|
Error description |
required |
label
|
str
|
Script label for context |
required |
errno_code
|
int | None
|
Optional errno code for transient error detection |
None
|
Source code in src/services/apple/applescript_executor.py
AppleScriptExecutor
¶
AppleScriptExecutor(
semaphore,
apple_scripts_directory,
console_logger,
error_logger,
retry_handler=None,
rate_limiter=None,
)
Handles subprocess execution for AppleScript commands.
This class manages the execution lifecycle including: - Running osascript subprocesses - Handling timeouts and cancellation - Process cleanup - Temporary file execution for complex scripts
Initialize the executor.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
semaphore
|
Semaphore | None
|
Semaphore for concurrency control (can be None initially) |
required |
apple_scripts_directory
|
str | None
|
Directory for temporary script files |
required |
console_logger
|
Logger
|
Logger for debug/info messages |
required |
error_logger
|
Logger
|
Logger for error messages |
required |
retry_handler
|
DatabaseRetryHandler | None
|
Optional retry handler for transient error recovery |
None
|
rate_limiter
|
AppleScriptRateLimiter | None
|
Optional rate limiter for enhanced throughput control |
None
|
Source code in src/services/apple/applescript_executor.py
update_semaphore
¶
Update the semaphore after async initialization.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
semaphore
|
Semaphore
|
The initialized semaphore |
required |
update_rate_limiter
¶
Update the rate limiter after async initialization.
When a rate limiter is set, it takes precedence over the semaphore for concurrency control, providing both rate limiting and concurrency.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
rate_limiter
|
AppleScriptRateLimiter
|
The initialized rate limiter |
required |
Source code in src/services/apple/applescript_executor.py
log_script_success
¶
Log successful script execution with appropriate formatting.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
label
|
str
|
Script label for logging |
required |
script_result
|
str
|
Script output |
required |
elapsed
|
float
|
Execution time in seconds |
required |
Source code in src/services/apple/applescript_executor.py
cleanup_process
async
¶
Clean up process resources.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
proc
|
Process
|
Process to clean up |
required |
label
|
str
|
Label for logging |
required |
Source code in src/services/apple/applescript_executor.py
handle_subprocess_execution
async
¶
Handle subprocess execution with timeout, error handling, and optional retry.
If a retry_handler is configured, transient errors will be automatically retried with exponential backoff.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cmd
|
list[str]
|
Command to execute as a list of strings |
required |
label
|
str
|
Label for logging |
required |
timeout_seconds
|
float
|
Timeout in seconds |
required |
Returns:
| Type | Description |
|---|---|
str | None
|
Command output if successful, None otherwise |
Source code in src/services/apple/applescript_executor.py
run_osascript
async
¶
Run an osascript command and return output.
Uses rate limiter if configured (provides both rate limiting and concurrency), otherwise falls back to semaphore-only concurrency control.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cmd
|
list[str]
|
Command to execute as a list of strings |
required |
label
|
str
|
Label for logging |
required |
timeout_seconds
|
float
|
Timeout in seconds |
required |
Returns:
| Type | Description |
|---|---|
str | None
|
Command output if successful, None otherwise |