code: def _my_urlsplit(url):
      
      if '?' not in url:
          return urlsplit(url, allow_fragments=False)
  
      sr = urlsplit(url.replace('?', '\n'), allow_fragments=False)
      SplitResult = collections.namedtuple('SplitResult', 'scheme netloc path query fragment')
      return SplitResult(sr.scheme, sr.netloc, sr.path.replace('\n', '?'), '', '')
docs: This is a hack to prevent the regular urlsplit from splitting around question marks.
  
      A question mark (?) in a URL typically indicates the start of a
      querystring, and the standard library's urlparse function handles the
      querystring separately.  Unfortunately, question marks can also appear
      _inside_ the actual URL for some schemas like S3.
  
      Replaces question marks with newlines prior to splitting.  This is safe because:
  
      1. The standard library's urlsplit completely ignores newlines
      2. Raw newlines will never occur in innocuous URLs.  They are always URL-encoded.
  
      See Also
      --------
      https://github.com/python/cpython/blob/3.7/Lib/urllib/parse.py
      https://github.com/RaRe-Technologies/smart_open/issues/285