1717"""
1818import asyncio
1919import os
20+ import urllib .parse
2021
2122import serial
2223from functools import partial
@@ -422,7 +423,7 @@ async def _call_connection_lost(self, exc):
422423 self ._loop = None
423424
424425
425- async def create_serial_connection (loop , protocol_factory , * args , ** kwargs ):
426+ async def create_serial_connection (loop , protocol_factory , url , * args , ** kwargs ):
426427 """Create a connection to a new serial port instance.
427428
428429 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):
447448
448449 Any additional arguments will be forwarded to the Serial constructor.
449450 """
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 )
451454 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+
453468 return transport , protocol
454469
455470
0 commit comments