Merge pull request #8739 from remitamine/update_url_params
authorremitamine <remitamine@gmail.com>
Thu, 3 Mar 2016 18:24:04 +0000 (19:24 +0100)
committerremitamine <remitamine@gmail.com>
Thu, 3 Mar 2016 18:24:04 +0000 (19:24 +0100)
[utils] add update_url_query function to create or update query string params

1  2 
youtube_dl/utils.py

diff --combined youtube_dl/utils.py
index 91c9d820091598d13c252b54522e2d97e4ec6d98,31d60f3233bb3ea95775f390d4f4afc0681b52d3..d431aa6b726c59b40a9c48b3e3144f1d7a2c8db0
@@@ -465,10 -465,6 +465,10 @@@ def encodeFilename(s, for_subprocess=Fa
      if not for_subprocess and sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5:
          return s
  
 +    # Jython assumes filenames are Unicode strings though reported as Python 2.x compatible
 +    if sys.platform.startswith('java'):
 +        return s
 +
      return s.encode(get_subprocess_encoding(), 'ignore')
  
  
@@@ -1219,23 -1215,13 +1219,23 @@@ if sys.platform == 'win32'
              raise OSError('Unlocking file failed: %r' % ctypes.FormatError())
  
  else:
 -    import fcntl
 +    # Some platforms, such as Jython, is missing fcntl
 +    try:
 +        import fcntl
  
 -    def _lock_file(f, exclusive):
 -        fcntl.flock(f, fcntl.LOCK_EX if exclusive else fcntl.LOCK_SH)
 +        def _lock_file(f, exclusive):
 +            fcntl.flock(f, fcntl.LOCK_EX if exclusive else fcntl.LOCK_SH)
  
 -    def _unlock_file(f):
 -        fcntl.flock(f, fcntl.LOCK_UN)
 +        def _unlock_file(f):
 +            fcntl.flock(f, fcntl.LOCK_UN)
 +    except ImportError:
 +        UNSUPPORTED_MSG = 'file locking is not supported on this platform'
 +
 +        def _lock_file(f, exclusive):
 +            raise IOError(UNSUPPORTED_MSG)
 +
 +        def _unlock_file(f):
 +            raise IOError(UNSUPPORTED_MSG)
  
  
  class locked_file(object):
@@@ -1399,12 -1385,6 +1399,12 @@@ def fix_xml_ampersands(xml_str)
  
  def setproctitle(title):
      assert isinstance(title, compat_str)
 +
 +    # ctypes in Jython is not complete
 +    # http://bugs.jython.org/issue2148
 +    if sys.platform.startswith('java'):
 +        return
 +
      try:
          libc = ctypes.cdll.LoadLibrary('libc.so.6')
      except OSError:
@@@ -1739,6 -1719,14 +1739,14 @@@ def urlencode_postdata(*args, **kargs)
      return compat_urllib_parse.urlencode(*args, **kargs).encode('ascii')
  
  
+ def update_url_query(url, query):
+     parsed_url = compat_urlparse.urlparse(url)
+     qs = compat_parse_qs(parsed_url.query)
+     qs.update(query)
+     return compat_urlparse.urlunparse(parsed_url._replace(
+         query=compat_urllib_parse.urlencode(qs, True)))
  def encode_dict(d, encoding='utf-8'):
      def encode(v):
          return v.encode(encoding) if isinstance(v, compat_basestring) else v