Source code for pymemuc.pymemuc

"""a wrapper for memuc.exe as a library to control virual machines"""

import logging
from os.path import join
from typing import Union

from ._constants import WINREG_EN
from .exceptions import PyMemucError


[docs] class PyMemuc: """A class to interact with the memuc.exe command line tool to control virtual machines. :param memuc_path: Path to memuc.exe. Set to None for autodetect. :type memuc_path: str, optional :param debug: Enable debug mode, defaults to False :type debug: bool, optional """ # pylint: disable=import-outside-toplevel from ._command import ( change_gps_vm, connect_internet_vm, create_app_shortcut_vm, disconnect_internet_vm, execute_command_vm, get_adb_connection, get_app_info_list_vm, get_public_ip_vm, input_text_vm, install_apk_vm, rotate_window_vm, send_adb_command_vm, set_accelerometer_vm, sort_out_all_vm, start_app_vm, stop_app_vm, trigger_keystroke_vm, trigger_shake_vm, uninstall_apk_vm, zoom_in_vm, zoom_out_vm, ) from ._control import reboot_vm, start_vm, stop_all_vm, stop_vm from ._manage import ( clone_vm, compress_vm, create_vm, delete_vm, export_vm, get_configuration_vm, import_vm, list_vm_info, randomize_vm, rename_vm, set_configuration_vm, vm_is_running, ) from ._memuc import _get_memu_top_level # pyright: ignore [reportPrivateUsage] from ._memuc import _terminate_process # pyright: ignore [reportPrivateUsage] from ._memuc import check_task_status, memuc_run
[docs] def __init__( self, memuc_path: Union[str, None] = None, debug: bool = False ) -> None: """initialize the class, automatically finding memuc.exe if windows registry is supported, otherwise a path must be specified""" self.debug = debug self.logger = self._configure_logger() self.logger.debug("PyMemuc: Debug mode enabled") if WINREG_EN: self.memuc_path: str = join(self._get_memu_top_level(), "memuc.exe") elif memuc_path is not None: self.memuc_path: str = memuc_path else: raise PyMemucError( "Windows Registry is not supported on this platform," + " you must specify the path to memuc.exe manually" )
def _configure_logger(self): """Configure the logger for the class""" logger = logging.getLogger(__name__) logger.propagate = False logger.setLevel(logging.DEBUG if self.debug else logging.INFO) # Create a handler for console output console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) console_handler.setFormatter(formatter) # Add the handler to the logger logger.addHandler(console_handler) return logger