| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- # Human friendly input/output in Python.
- #
- # Author: Peter Odding <peter@peterodding.com>
- # Last Change: September 17, 2021
- # URL: https://humanfriendly.readthedocs.io
- """
- Compatibility with Python 2 and 3.
- This module exposes aliases and functions that make it easier to write Python
- code that is compatible with Python 2 and Python 3.
- .. data:: basestring
- Alias for :func:`python2:basestring` (in Python 2) or :class:`python3:str`
- (in Python 3). See also :func:`is_string()`.
- .. data:: HTMLParser
- Alias for :class:`python2:HTMLParser.HTMLParser` (in Python 2) or
- :class:`python3:html.parser.HTMLParser` (in Python 3).
- .. data:: interactive_prompt
- Alias for :func:`python2:raw_input()` (in Python 2) or
- :func:`python3:input()` (in Python 3).
- .. data:: StringIO
- Alias for :class:`python2:StringIO.StringIO` (in Python 2) or
- :class:`python3:io.StringIO` (in Python 3).
- .. data:: unicode
- Alias for :func:`python2:unicode` (in Python 2) or :class:`python3:str` (in
- Python 3). See also :func:`coerce_string()`.
- .. data:: monotonic
- Alias for :func:`python3:time.monotonic()` (in Python 3.3 and higher) or
- `monotonic.monotonic()` (a `conditional dependency
- <https://pypi.org/project/monotonic/>`_ on older Python versions).
- """
- __all__ = (
- 'HTMLParser',
- 'StringIO',
- 'basestring',
- 'coerce_string',
- 'interactive_prompt',
- 'is_string',
- 'is_unicode',
- 'monotonic',
- 'name2codepoint',
- 'on_macos',
- 'on_windows',
- 'unichr',
- 'unicode',
- 'which',
- )
- # Standard library modules.
- import sys
- # Differences between Python 2 and 3.
- try:
- # Python 2.
- unicode = unicode
- unichr = unichr
- basestring = basestring
- interactive_prompt = raw_input
- from distutils.spawn import find_executable as which
- from HTMLParser import HTMLParser
- from StringIO import StringIO
- from htmlentitydefs import name2codepoint
- except (ImportError, NameError):
- # Python 3.
- unicode = str
- unichr = chr
- basestring = str
- interactive_prompt = input
- from shutil import which
- from html.parser import HTMLParser
- from io import StringIO
- from html.entities import name2codepoint
- try:
- # Python 3.3 and higher.
- from time import monotonic
- except ImportError:
- # A replacement for older Python versions:
- # https://pypi.org/project/monotonic/
- try:
- from monotonic import monotonic
- except (ImportError, RuntimeError):
- # We fall back to the old behavior of using time.time() instead of
- # failing when {time,monotonic}.monotonic() are both missing.
- from time import time as monotonic
- def coerce_string(value):
- """
- Coerce any value to a Unicode string (:func:`python2:unicode` in Python 2 and :class:`python3:str` in Python 3).
- :param value: The value to coerce.
- :returns: The value coerced to a Unicode string.
- """
- return value if is_string(value) else unicode(value)
- def is_string(value):
- """
- Check if a value is a :func:`python2:basestring` (in Python 2) or :class:`python3:str` (in Python 3) object.
- :param value: The value to check.
- :returns: :data:`True` if the value is a string, :data:`False` otherwise.
- """
- return isinstance(value, basestring)
- def is_unicode(value):
- """
- Check if a value is a :func:`python2:unicode` (in Python 2) or :class:`python2:str` (in Python 3) object.
- :param value: The value to check.
- :returns: :data:`True` if the value is a Unicode string, :data:`False` otherwise.
- """
- return isinstance(value, unicode)
- def on_macos():
- """
- Check if we're running on Apple MacOS.
- :returns: :data:`True` if running MacOS, :data:`False` otherwise.
- """
- return sys.platform.startswith('darwin')
- def on_windows():
- """
- Check if we're running on the Microsoft Windows OS.
- :returns: :data:`True` if running Windows, :data:`False` otherwise.
- """
- return sys.platform.startswith('win')
|