Source code for mode.utils.compat
"""Compatibility utilities."""
from typing import AnyStr, IO
from .contexts import asyncnullcontext, nullcontext
from .futures import current_task
from .typing import AsyncContextManager, ChainMap, Counter, Deque, NoReturn
__all__ = [
'AsyncContextManager', # XXX moved to .typing
'ChainMap', # XXX moved to .typing
'Counter', # XXX moved to .typing
'Deque', # XXX moved to .typing
'NoReturn', # XXX moved to .typing
'DummyContext',
'OrderedDict',
'want_bytes',
'want_str',
'isatty',
'current_task', # XXX moved to .futures
]
#: Dictionaries are ordered by default in Python 3.6
OrderedDict = dict
[docs]def want_bytes(s: AnyStr) -> bytes:
"""Convert string to bytes."""
if isinstance(s, str):
return s.encode()
return s
[docs]def want_str(s: AnyStr) -> str:
"""Convert bytes to string."""
if isinstance(s, bytes):
return s.decode()
return s
[docs]def isatty(fh: IO) -> bool:
"""Return True if fh has a controlling terminal.
Notes:
Use with e.g. :data:`sys.stdin`.
"""
try:
return fh.isatty()
except AttributeError:
return False
[docs]class DummyContext(nullcontext, asyncnullcontext):
"""Context for with-statement doing nothing."""
# XXX deprecated, use nullcontext or asyncnullcontext