mirror of
https://github.com/budtmo/docker-android.git
synced 2026-07-31 04:07:25 +00:00
73 lines
3.0 KiB
Python
73 lines
3.0 KiB
Python
import logging
|
|
import subprocess
|
|
|
|
from src.device import Genymotion, DeviceType
|
|
from src.helper import get_env_value_or_raise
|
|
from src.constants import ENV, UTF8
|
|
|
|
|
|
class GenySAAS(Genymotion):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
self.logger = logging.getLogger(self.__class__.__name__)
|
|
self.device_type = DeviceType.GENY_SAAS.value
|
|
self.created_devices = []
|
|
|
|
def login(self) -> None:
|
|
user = get_env_value_or_raise(ENV.GENY_SAAS_USER)
|
|
password = get_env_value_or_raise(ENV.GENY_SAAS_PASS)
|
|
subprocess.check_call(f"gmsaas auth login {user} {password} > /dev/null 2>&1", shell=True)
|
|
self.logger.info("successfully logged in!")
|
|
|
|
def create(self) -> None:
|
|
super().create()
|
|
for item in self.get_data_from_template(ENV.GENY_SAAS_TEMPLATE_FILE_NAME):
|
|
name = ""
|
|
template = ""
|
|
local_port = ""
|
|
|
|
# implement like this because local_port param is not a must
|
|
for k, v in item.items():
|
|
if k.lower() == "name":
|
|
name = v
|
|
elif k.lower() == "template":
|
|
template = v
|
|
elif k.lower() == "local_port":
|
|
local_port = v
|
|
else:
|
|
self.logger.warning(f"'{k}' is not supported! Please check the documentation!")
|
|
|
|
if not name:
|
|
import uuid
|
|
name = str(uuid.uuid4())
|
|
|
|
if not template:
|
|
self.shutdown_and_logout()
|
|
raise RuntimeError(f"'template' is a must parameter and not given!")
|
|
else:
|
|
self.logger.info(f"name: {name}, template: {template}")
|
|
creation_cmd = f"gmsaas instances start {template} {name}"
|
|
try:
|
|
instance_id = subprocess.check_output(creation_cmd.split()).decode(UTF8).replace("\n", "")
|
|
created_device = {f"{name}": {instance_id}}
|
|
self.created_devices.append(created_device)
|
|
additional_args = ""
|
|
if local_port:
|
|
additional_args = f"--adb-serial-port {local_port}"
|
|
connect_cmd = f"gmsaas instances adbconnect {instance_id} {additional_args}"
|
|
subprocess.check_call(f"{connect_cmd}", shell=True)
|
|
except Exception as e:
|
|
self.shutdown_and_logout()
|
|
self.logger.error(e)
|
|
exit(1)
|
|
|
|
def shutdown_and_logout(self) -> None:
|
|
if bool(self.created_devices):
|
|
self.logger.info("Created device(s) will be removed!")
|
|
for d in self.created_devices:
|
|
for n, i in d.items():
|
|
subprocess.check_call(f"gmsaas instances stop {i}", shell=True)
|
|
self.logger.info(f"device '{n}' is successfully removed!")
|
|
subprocess.check_call("gmsaas auth logout", shell=True)
|
|
self.logger.info("successfully logged out!")
|