17
17
"""
18
18
import asyncio
19
19
import os
20
+ import urllib .parse
20
21
21
22
import serial
22
23
from functools import partial
@@ -422,7 +423,7 @@ async def _call_connection_lost(self, exc):
422
423
self ._loop = None
423
424
424
425
425
- async def create_serial_connection (loop , protocol_factory , * args , ** kwargs ):
426
+ async def create_serial_connection (loop , protocol_factory , url , * args , ** kwargs ):
426
427
"""Create a connection to a new serial port instance.
427
428
428
429
This function is a coroutine which will try to establish the
@@ -447,9 +448,23 @@ async def create_serial_connection(loop, protocol_factory, *args, **kwargs):
447
448
448
449
Any additional arguments will be forwarded to the Serial constructor.
449
450
"""
450
- callback = partial (serial .serial_for_url , * args , ** kwargs )
451
+ parsed_url = urllib .parse .urlparse (url )
452
+
453
+ callback = partial (serial .serial_for_url , url , * args , ** kwargs )
451
454
serial_instance = await loop .run_in_executor (None , callback )
452
- transport , protocol = await connection_for_serial (loop , protocol_factory , serial_instance )
455
+
456
+ if parsed_url .scheme == "socket" :
457
+ transport , protocol = await loop .create_connection (protocol_factory , parsed_url .hostname , parsed_url .port )
458
+
459
+ # To maintain API compatibility
460
+ transport .flush = lambda : None
461
+ transport .loop = loop
462
+ transport .serial = serial_instance
463
+ transport ._extra ["serial" ] = serial_instance
464
+ serial_instance ._socket = transport .get_extra_info ("socket" )._sock
465
+ else :
466
+ transport , protocol = await connection_for_serial (loop , protocol_factory , serial_instance )
467
+
453
468
return transport , protocol
454
469
455
470
0 commit comments