| Viewing file:  protocol_alt.py (1.65 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
#! python#
 # This module implements a special URL handler that allows selecting an
 # alternate implementation provided by some backends.
 #
 # This file is part of pySerial. https://github.com/pyserial/pyserial
 # (C) 2015 Chris Liechti <cliechti@gmx.net>
 #
 # SPDX-License-Identifier:    BSD-3-Clause
 #
 # URL format:    alt://port[?option[=value][&option[=value]]]
 # options:
 # - class=X used class named X instead of Serial
 #
 # example:
 #   use poll based implementation on Posix (Linux):
 #   python -m serial.tools.miniterm alt:///dev/ttyUSB0?class=PosixPollSerial
 
 import sys
 import time
 
 import serial
 
 try:
 import urlparse
 except ImportError:
 import urllib.parse as urlparse
 
 
 def serial_class_for_url(url):
 """extract host and port from an URL string"""
 parts = urlparse.urlsplit(url)
 if parts.scheme != 'alt':
 raise serial.SerialException('expected a string in the form "alt://port[?option[=value][&option[=value]]]": not starting with alt:// (%r)' % (parts.scheme,))
 class_name = 'Serial'
 try:
 for option, values in urlparse.parse_qs(parts.query, True).items():
 if option == 'class':
 class_name = values[0]
 else:
 raise ValueError('unknown option: %r' % (option,))
 except ValueError as e:
 raise serial.SerialException('expected a string in the form "alt://port[?option[=value][&option[=value]]]": %s' % e)
 return (''.join([parts.netloc, parts.path]), getattr(serial, class_name))
 
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 if __name__ == '__main__':
 s = serial_for_url('alt:///dev/ttyS0?class=PosixPollSerial')
 print(s)
 
 |