mirror of
https://github.com/trycua/computer.git
synced 2026-01-03 12:00:00 -06:00
49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
import platform
|
|
import subprocess
|
|
from typing import Tuple, Type
|
|
from .base import BaseAccessibilityHandler, BaseAutomationHandler
|
|
from .macos import MacOSAccessibilityHandler, MacOSAutomationHandler
|
|
# from .linux import LinuxAccessibilityHandler, LinuxAutomationHandler
|
|
|
|
class HandlerFactory:
|
|
"""Factory for creating OS-specific handlers."""
|
|
|
|
@staticmethod
|
|
def _get_current_os() -> str:
|
|
"""Determine the current OS.
|
|
|
|
Returns:
|
|
str: The OS type ('darwin' for macOS or 'linux' for Linux)
|
|
|
|
Raises:
|
|
RuntimeError: If unable to determine the current OS
|
|
"""
|
|
try:
|
|
# Use uname -s to determine OS since this runs on the target machine
|
|
result = subprocess.run(['uname', '-s'], capture_output=True, text=True)
|
|
if result.returncode != 0:
|
|
raise RuntimeError(f"uname command failed: {result.stderr}")
|
|
return result.stdout.strip().lower()
|
|
except Exception as e:
|
|
raise RuntimeError(f"Failed to determine current OS: {str(e)}")
|
|
|
|
@staticmethod
|
|
def create_handlers() -> Tuple[BaseAccessibilityHandler, BaseAutomationHandler]:
|
|
"""Create and return appropriate handlers for the current OS.
|
|
|
|
Returns:
|
|
Tuple[BaseAccessibilityHandler, BaseAutomationHandler]: A tuple containing
|
|
the appropriate accessibility and automation handlers for the current OS.
|
|
|
|
Raises:
|
|
NotImplementedError: If the current OS is not supported
|
|
RuntimeError: If unable to determine the current OS
|
|
"""
|
|
os_type = HandlerFactory._get_current_os()
|
|
|
|
if os_type == 'darwin':
|
|
return MacOSAccessibilityHandler(), MacOSAutomationHandler()
|
|
# elif os_type == 'linux':
|
|
# return LinuxAccessibilityHandler(), LinuxAutomationHandler()
|
|
else:
|
|
raise NotImplementedError(f"OS '{os_type}' is not supported") |