diff --git a/wda/__init__.py b/wda/__init__.py index d011b8f..7fd47d7 100644 --- a/wda/__init__.py +++ b/wda/__init__.py @@ -222,7 +222,7 @@ def __init__(self, url=None, _session_id=None): """ if not url: url = os.environ.get('DEVICE_URL', 'http://localhost:8100') - assert re.match(r"^(http\+usbmux|https?)://", url), "Invalid URL: %r" % url + assert re.match(r"^(http\+usbmux|http\+usbmux\+remote|https?)://", url), "Invalid URL: %r" % url # Session variable self.__wda_url = url diff --git a/wda/usbmux/__init__.py b/wda/usbmux/__init__.py index b2dce4b..c8c71cb 100644 --- a/wda/usbmux/__init__.py +++ b/wda/usbmux/__init__.py @@ -19,6 +19,11 @@ def http_create(url: str) -> HTTPConnection: udid, device_wda_port = u.netloc.split(":") device = select_device(udid) return device.make_http_connection(int(device_wda_port)) + elif u.scheme == "http+usbmux+remote": + device_info, usbmux_address = u.netloc.split("@") + udid, device_wda_port = device_info.split(":") + device = select_device(udid, usbmux_address=usbmux_address) + return device.make_http_connection(int(device_wda_port), usbmux_address=usbmux_address) elif u.scheme == "http": return HTTPConnection(u.netloc) elif u.scheme == "https": @@ -50,6 +55,7 @@ def fetch(url: str, method="GET", data=None, timeout=None, chunk_size: int = _DE Raises: HTTPError """ + conn = None try: method = method.upper() conn = http_create(url) @@ -67,6 +73,9 @@ def fetch(url: str, method="GET", data=None, timeout=None, chunk_size: int = _DE return resp except Exception as e: raise HTTPError(e) + finally: + if conn: + conn.close() def _read_response(response:HTTPResponse, chunk_size: int = _DEFAULT_CHUNK_SIZE) -> bytearray: diff --git a/wda/usbmux/pyusbmux.py b/wda/usbmux/pyusbmux.py index b984a40..4365a5c 100644 --- a/wda/usbmux/pyusbmux.py +++ b/wda/usbmux/pyusbmux.py @@ -109,8 +109,8 @@ def is_network(self) -> bool: def matches_udid(self, udid: str) -> bool: return self.serial.replace('-', '') == udid.replace('-', '') - def make_http_connection(self, port: int) -> HTTPConnection: - return USBMuxHTTPConnection(self, port) + def make_http_connection(self, port: int, usbmux_address: Optional[str] = None) -> HTTPConnection: + return USBMuxHTTPConnection(self, port, usbmux_address=usbmux_address) class SafeStreamSocket: @@ -470,13 +470,14 @@ def select_devices_by_connection_type(connection_type: str, usbmux_address: Opti class USBMuxHTTPConnection(HTTPConnection): - def __init__(self, device: MuxDevice, port=8100): + def __init__(self, device: MuxDevice, port=8100, usbmux_address: Optional[str] = None): super().__init__("localhost", port) self.__device = device self.__port = port + self.__usbmux_address = usbmux_address def connect(self): - self.sock = self.__device.connect(self.__port) + self.sock = self.__device.connect(self.__port, self.__usbmux_address) def __enter__(self) -> HTTPConnection: return self