| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- # -*- coding: utf-8 -*-
- # flake8: noqa
- """
- hyper/compat
- ~~~~~~~~~~~~
- Normalizes the Python 2/3 API for internal use.
- """
- from contextlib import contextmanager
- import sys
- import zlib
- try:
- from . import ssl_compat
- except ImportError:
- # TODO log?
- ssl_compat = None
- _ver = sys.version_info
- is_py2 = _ver[0] == 2
- is_py2_7_9_or_later = _ver[0] >= 2 and _ver[1] >= 7 and _ver[2] >= 9
- is_py3 = _ver[0] == 3
- is_py3_3 = is_py3 and _ver[1] == 3
- @contextmanager
- def ignore_missing():
- try:
- yield
- except (AttributeError, NotImplementedError): # pragma: no cover
- pass
- if is_py2:
- if is_py2_7_9_or_later:
- import ssl
- else:
- ssl = ssl_compat
- from urllib import urlencode
- from urlparse import urlparse, urlsplit
- from itertools import imap
- def to_byte(char):
- return ord(char)
- def decode_hex(b):
- return b.decode('hex')
- def write_to_stdout(data):
- sys.stdout.write(data + '\n')
- sys.stdout.flush()
- # The standard zlib.compressobj() accepts only positional arguments.
- def zlib_compressobj(level=6, method=zlib.DEFLATED, wbits=15, memlevel=8,
- strategy=zlib.Z_DEFAULT_STRATEGY):
- return zlib.compressobj(level, method, wbits, memlevel, strategy)
- unicode = unicode
- bytes = str
- elif is_py3:
- from urllib.parse import urlencode, urlparse, urlsplit
- imap = map
- def to_byte(char):
- return char
- def decode_hex(b):
- return bytes.fromhex(b)
- def write_to_stdout(data):
- sys.stdout.buffer.write(data + b'\n')
- sys.stdout.buffer.flush()
- zlib_compressobj = zlib.compressobj
- if is_py3_3:
- ssl = ssl_compat
- else:
- import ssl
- unicode = str
- bytes = bytes
|