diff env/lib/python3.7/site-packages/humanfriendly/compat.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/humanfriendly/compat.py	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,141 @@
+# Human friendly input/output in Python.
+#
+# Author: Peter Odding <peter@peterodding.com>
+# Last Change: March 1, 2020
+# 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_windows',
+    'unichr',
+    'unicode',
+    # This export remains here so as not to break my dozen or so other Python
+    # projects using 'from humanfriendly.compat import unittest' from good old
+    # times (when Python 2.6 was still a thing). It will eventually be removed.
+    'unittest',
+    'which',
+)
+
+# Standard library modules.
+import sys
+import unittest
+
+# 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_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')