text: #  Licensed to Elasticsearch B.V. under one or more contributor
  #  license agreements. See the NOTICE file distributed with
  #  this work for additional information regarding copyright
  #  ownership. Elasticsearch B.V. licenses this file to you under
  #  the Apache License, Version 2.0 (the "License"); you may
  #  not use this file except in compliance with the License.
  #  You may obtain a copy of the License at
  #
  # 	http://www.apache.org/licenses/LICENSE-2.0
  #
  #  Unless required by applicable law or agreed to in writing,
  #  software distributed under the License is distributed on an
  #  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  #  KIND, either express or implied.  See the License for the
  #  specific language governing permissions and limitations
  #  under the License.
  
  import sys
  
  PY2 = sys.version_info[0] == 2
  
  if PY2:
      string_types = (basestring,)  # noqa: F821
      from itertools import imap as map
      from urllib import quote, quote_plus, unquote, urlencode
  
      from Queue import Queue
      from urlparse import urlparse
  
      def to_str(x, encoding="ascii"):
          if not isinstance(x, str):
              return x.encode(encoding)
          return x
  
      to_bytes = to_str
  
  else:
      string_types = str, bytes
      from urllib.parse import quote, quote_plus, unquote, urlencode, urlparse
  
      map = map
      from queue import Queue
  
      def to_str(x, encoding="ascii"):
          if not isinstance(x, str):
              return x.decode(encoding)
          return x
  
      def to_bytes(x, encoding="ascii"):
          if not isinstance(x, bytes):
              return x.encode(encoding)
          return x
  
  
  try:
      from collections.abc import Mapping
  except ImportError:
      from collections import Mapping
  
  
  try:
      reraise_exceptions = (RecursionError,)
  except NameError:
      reraise_exceptions = ()
  
  try:
      import asyncio
  
      reraise_exceptions += (asyncio.CancelledError,)
  except (ImportError, AttributeError):
      pass
  
  
  __all__ = [
      "string_types",
      "reraise_exceptions",
      "quote_plus",
      "quote",
      "urlencode",
      "unquote",
      "urlparse",
      "map",
      "Queue",
      "Mapping",
  ]
  