compat: Make urllib/urlparse usage py2+3 compatible

This commit is contained in:
Stein Magnus Jodal 2015-10-29 21:59:03 +01:00
parent 790b64de13
commit 7b029bfcc4
4 changed files with 29 additions and 12 deletions

View File

@ -10,6 +10,25 @@ if PY2:
import Queue as queue # noqa import Queue as queue # noqa
import thread # noqa import thread # noqa
def fake_python3_urllib_module():
import types
import urllib as py2_urllib
import urlparse as py2_urlparse
urllib = types.ModuleType(b'urllib') # noqa
urllib.parse = types.ModuleType(b'urlib.parse')
urllib.parse.quote = py2_urllib.quote
urllib.parse.unquote = py2_urllib.unquote
urllib.parse.urlparse = py2_urlparse.urlparse
urllib.parse.urlsplit = py2_urlparse.urlsplit
urllib.parse.urlunsplit = py2_urlparse.urlunsplit
return urllib
urllib = fake_python3_urllib_module()
string_types = basestring string_types = basestring
text_type = unicode text_type = unicode
@ -22,6 +41,7 @@ else:
import configparser # noqa import configparser # noqa
import queue # noqa import queue # noqa
import _thread as thread # noqa import _thread as thread # noqa
import urllib # noqa
string_types = (str,) string_types = (str,)
text_type = str text_type = str

View File

@ -5,11 +5,9 @@ import os
import stat import stat
import string import string
import threading import threading
import urllib
import urlparse
from mopidy import compat, exceptions from mopidy import compat, exceptions
from mopidy.compat import queue from mopidy.compat import queue, urllib
from mopidy.internal import encoding, xdg from mopidy.internal import encoding, xdg
@ -61,8 +59,8 @@ def path_to_uri(path):
""" """
if isinstance(path, compat.text_type): if isinstance(path, compat.text_type):
path = path.encode('utf-8') path = path.encode('utf-8')
path = urllib.quote(path) path = urllib.parse.quote(path)
return urlparse.urlunsplit((b'file', b'', path, b'', b'')) return urllib.parse.urlunsplit((b'file', b'', path, b'', b''))
def uri_to_path(uri): def uri_to_path(uri):
@ -78,7 +76,7 @@ def uri_to_path(uri):
""" """
if isinstance(uri, compat.text_type): if isinstance(uri, compat.text_type):
uri = uri.encode('utf-8') uri = uri.encode('utf-8')
return urllib.unquote(urlparse.urlsplit(uri).path) return urllib.parse.unquote(urllib.parse.urlsplit(uri).path)
def split_path(path): def split_path(path):

View File

@ -1,9 +1,9 @@
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
import collections import collections
import urlparse
from mopidy import compat, exceptions from mopidy import compat, exceptions
from mopidy.compat import urllib
PLAYBACK_STATES = {'paused', 'stopped', 'playing'} PLAYBACK_STATES = {'paused', 'stopped', 'playing'}
@ -96,7 +96,7 @@ def _check_query_value(key, arg, msg):
def check_uri(arg, msg='Expected a valid URI, not {arg!r}'): def check_uri(arg, msg='Expected a valid URI, not {arg!r}'):
if not isinstance(arg, compat.string_types): if not isinstance(arg, compat.string_types):
raise exceptions.ValidationError(msg.format(arg=arg)) raise exceptions.ValidationError(msg.format(arg=arg))
elif urlparse.urlparse(arg).scheme == '': elif urllib.parse.urlparse(arg).scheme == '':
raise exceptions.ValidationError(msg.format(arg=arg)) raise exceptions.ValidationError(msg.format(arg=arg))

View File

@ -4,10 +4,9 @@ import codecs
import logging import logging
import os import os
import re import re
import urllib
import urlparse
from mopidy import compat from mopidy import compat
from mopidy.compat import urllib
from mopidy.internal import encoding, path from mopidy.internal import encoding, path
from mopidy.models import Track from mopidy.models import Track
@ -28,7 +27,7 @@ def path_to_playlist_uri(relpath):
"""Convert path relative to playlists_dir to M3U URI.""" """Convert path relative to playlists_dir to M3U URI."""
if isinstance(relpath, compat.text_type): if isinstance(relpath, compat.text_type):
relpath = relpath.encode('utf-8') relpath = relpath.encode('utf-8')
return b'm3u:%s' % urllib.quote(relpath) return b'm3u:%s' % urllib.parse.quote(relpath)
def m3u_extinf_to_track(line): def m3u_extinf_to_track(line):
@ -101,7 +100,7 @@ def parse_m3u(file_path, media_dir=None):
track = m3u_extinf_to_track(line) track = m3u_extinf_to_track(line)
continue continue
if urlparse.urlsplit(line).scheme: if urllib.parse.urlsplit(line).scheme:
tracks.append(track.replace(uri=line)) tracks.append(track.replace(uri=line))
elif os.path.normpath(line) == os.path.abspath(line): elif os.path.normpath(line) == os.path.abspath(line):
uri = path.path_to_uri(line) uri = path.path_to_uri(line)