diff --git a/docs/api/http-server.rst b/docs/api/http-server.rst index ee6f55fb..317a77c5 100644 --- a/docs/api/http-server.rst +++ b/docs/api/http-server.rst @@ -43,7 +43,7 @@ available at http://localhost:6680/mywebclient/foo.html. :: - from __future__ import unicode_literals + from __future__ import absolute_import, unicode_literals import os @@ -95,7 +95,7 @@ Mopidy $version``. :: - from __future__ import unicode_literals + from __future__ import absolute_import, unicode_literals import os @@ -149,7 +149,7 @@ http://localhost:6680/mywebclient/. :: - from __future__ import unicode_literals + from __future__ import absolute_import, unicode_literals import os diff --git a/docs/conf.py b/docs/conf.py index 1eb6dd33..0715f326 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -2,7 +2,7 @@ """Mopidy documentation build configuration file""" -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os import sys diff --git a/docs/extensiondev.rst b/docs/extensiondev.rst index 100e5b85..c6a88619 100644 --- a/docs/extensiondev.rst +++ b/docs/extensiondev.rst @@ -159,7 +159,7 @@ class that will connect the rest of the dots. :: - from __future__ import unicode_literals + from __future__ import absolute_import, unicode_literals import re from setuptools import setup, find_packages @@ -255,7 +255,7 @@ default config in documentation without duplicating it. This is ``mopidy_soundspot/__init__.py``:: - from __future__ import unicode_literals + from __future__ import absolute_import, unicode_literals import logging import os @@ -449,7 +449,7 @@ Python conventions In general, it would be nice if Mopidy extensions followed the same :ref:`codestyle` as Mopidy itself, as they're part of the same ecosystem. Among other things, the code style guide explains why all the above examples start -with ``from __future__ import unicode_literals``. +with ``from __future__ import absolute_import, unicode_literals``. Use of Mopidy APIs diff --git a/mopidy/__init__.py b/mopidy/__init__.py index 8b5b8e18..18ecb22d 100644 --- a/mopidy/__init__.py +++ b/mopidy/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import platform import sys diff --git a/mopidy/__main__.py b/mopidy/__main__.py index 9620b936..96e10e18 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import logging import os diff --git a/mopidy/audio/__init__.py b/mopidy/audio/__init__.py index fd6d41c9..1d47e682 100644 --- a/mopidy/audio/__init__.py +++ b/mopidy/audio/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals # flake8: noqa from .actor import Audio diff --git a/mopidy/audio/actor.py b/mopidy/audio/actor.py index 95ccb841..190895dc 100644 --- a/mopidy/audio/actor.py +++ b/mopidy/audio/actor.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import os diff --git a/mopidy/audio/constants.py b/mopidy/audio/constants.py index 08ad9768..718fde1b 100644 --- a/mopidy/audio/constants.py +++ b/mopidy/audio/constants.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals class PlaybackState(object): diff --git a/mopidy/audio/dummy.py b/mopidy/audio/dummy.py index fe749888..f7fa9f0d 100644 --- a/mopidy/audio/dummy.py +++ b/mopidy/audio/dummy.py @@ -4,7 +4,7 @@ This class implements the audio API in the simplest way possible. It is used in tests of the core and backends. """ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import pykka diff --git a/mopidy/audio/listener.py b/mopidy/audio/listener.py index b272d15a..6beb4444 100644 --- a/mopidy/audio/listener.py +++ b/mopidy/audio/listener.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy import listener diff --git a/mopidy/audio/playlists.py b/mopidy/audio/playlists.py index 37ef2569..5688db4b 100644 --- a/mopidy/audio/playlists.py +++ b/mopidy/audio/playlists.py @@ -1,6 +1,5 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals -import ConfigParser as configparser import io import gobject @@ -9,6 +8,8 @@ import pygst pygst.require('0.10') import gst # noqa +from mopidy.compat import configparser + try: import xml.etree.cElementTree as elementtree except ImportError: diff --git a/mopidy/audio/scan.py b/mopidy/audio/scan.py index 53f00ac0..55ad6426 100644 --- a/mopidy/audio/scan.py +++ b/mopidy/audio/scan.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, division, unicode_literals import datetime import os @@ -81,7 +81,7 @@ class Scanner(object): def _collect(self): """Polls for messages to collect data.""" start = time.time() - timeout_s = self._timeout_ms / float(1000) + timeout_s = self._timeout_ms / 1000. tags = {} while time.time() - start < timeout_s: diff --git a/mopidy/audio/utils.py b/mopidy/audio/utils.py index f9036748..a94e4551 100644 --- a/mopidy/audio/utils.py +++ b/mopidy/audio/utils.py @@ -1,9 +1,11 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import pygst pygst.require('0.10') import gst # noqa +from mopidy import compat + def calculate_duration(num_samples, sample_rate): """Determine duration of samples using GStreamer helper for precise @@ -18,7 +20,7 @@ def create_buffer(data, capabilites=None, timestamp=None, duration=None): """ buffer_ = gst.Buffer(data) if capabilites: - if isinstance(capabilites, basestring): + if isinstance(capabilites, compat.string_types): capabilites = gst.caps_from_string(capabilites) buffer_.set_caps(capabilites) if timestamp: diff --git a/mopidy/backend/__init__.py b/mopidy/backend/__init__.py index 712bfafe..016f2575 100644 --- a/mopidy/backend/__init__.py +++ b/mopidy/backend/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import copy diff --git a/mopidy/backend/dummy.py b/mopidy/backend/dummy.py index 94b01433..dfddf5ae 100644 --- a/mopidy/backend/dummy.py +++ b/mopidy/backend/dummy.py @@ -4,7 +4,7 @@ This backend implements the backend API in the simplest way possible. It is used in tests of the frontends. """ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import pykka @@ -44,7 +44,7 @@ class DummyLibraryProvider(backend.LibraryProvider): return self.dummy_find_exact_result def lookup(self, uri): - return filter(lambda t: uri == t.uri, self.dummy_library) + return [t for t in self.dummy_library if uri == t.uri] def refresh(self, uri=None): pass diff --git a/mopidy/commands.py b/mopidy/commands.py index 237ec86b..4b00a685 100644 --- a/mopidy/commands.py +++ b/mopidy/commands.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import argparse import collections diff --git a/mopidy/compat.py b/mopidy/compat.py new file mode 100644 index 00000000..b563f735 --- /dev/null +++ b/mopidy/compat.py @@ -0,0 +1,30 @@ +import sys + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +if PY2: + import ConfigParser as configparser # noqa + import Queue as queue # noqa + import thread # noqa + + string_types = basestring + text_type = unicode + + input = raw_input + + def itervalues(dct, **kwargs): + return iter(dct.itervalues(**kwargs)) + +else: + import configparser # noqa + import queue # noqa + import _thread as thread # noqa + + string_types = (str,) + text_type = str + + input = input + + def itervalues(dct, **kwargs): + return iter(dct.values(**kwargs)) diff --git a/mopidy/config/__init__.py b/mopidy/config/__init__.py index 7c0898aa..6edca51c 100644 --- a/mopidy/config/__init__.py +++ b/mopidy/config/__init__.py @@ -1,12 +1,13 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals -import ConfigParser as configparser import io import itertools import logging import os.path import re +from mopidy import compat +from mopidy.compat import configparser from mopidy.config import keyring from mopidy.config.schemas import * # noqa from mopidy.config.types import * # noqa @@ -108,7 +109,7 @@ def _load(files, defaults, overrides): # all in the same way? logger.info('Loading config from builtin defaults') for default in defaults: - if isinstance(default, unicode): + if isinstance(default, compat.text_type): default = default.encode('utf-8') parser.readfp(io.BytesIO(default)) diff --git a/mopidy/config/keyring.py b/mopidy/config/keyring.py index 4d251f52..fb6eded3 100644 --- a/mopidy/config/keyring.py +++ b/mopidy/config/keyring.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging @@ -9,6 +9,8 @@ try: except ImportError: dbus = None +from mopidy import compat + # XXX: Hack to workaround introspection bug caused by gnome-keyring, should be # fixed by version 3.5 per: @@ -57,7 +59,7 @@ def fetch(): result = [] secrets = service.GetSecrets(items, session, byte_arrays=True) - for item_path, values in secrets.iteritems(): + for item_path, values in secrets.items(): session_path, parameters, value, content_type = values attrs = _item_attributes(bus, item_path) result.append((attrs['section'], attrs['key'], bytes(value))) @@ -92,7 +94,7 @@ def set(section, key, value): if not collection: return False - if isinstance(value, unicode): + if isinstance(value, compat.text_type): value = value.encode('utf-8') session = service.OpenSession('plain', EMPTY_STRING)[1] @@ -161,7 +163,7 @@ def _prompt(bus, path): def _item_attributes(bus, path): item = _interface(bus, path, 'org.freedesktop.DBus.Properties') result = item.Get('org.freedesktop.Secret.Item', 'Attributes') - return dict((bytes(k), bytes(v)) for k, v in result.iteritems()) + return dict((bytes(k), bytes(v)) for k, v in result.items()) def _interface(bus, path, interface): diff --git a/mopidy/config/schemas.py b/mopidy/config/schemas.py index 3d997ffe..56826a53 100644 --- a/mopidy/config/schemas.py +++ b/mopidy/config/schemas.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import collections diff --git a/mopidy/config/types.py b/mopidy/config/types.py index 4498cb67..cd3905ac 100644 --- a/mopidy/config/types.py +++ b/mopidy/config/types.py @@ -1,22 +1,23 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import re import socket +from mopidy import compat from mopidy.config import validators from mopidy.utils import path def decode(value): - if isinstance(value, unicode): + if isinstance(value, compat.text_type): return value # TODO: only unescape \n \t and \\? return value.decode('string-escape').decode('utf-8') def encode(value): - if not isinstance(value, unicode): + if not isinstance(value, compat.text_type): return value for char in ('\\', '\n', '\t'): # TODO: more escapes? value = value.replace(char, char.encode('unicode-escape')) @@ -278,7 +279,7 @@ class Path(ConfigValue): return ExpandedPath(value, expanded) def serialize(self, value, display=False): - if isinstance(value, unicode): + if isinstance(value, compat.text_type): raise ValueError('paths should always be bytes') if isinstance(value, ExpandedPath): return value.original diff --git a/mopidy/config/validators.py b/mopidy/config/validators.py index a0ca25d9..d0549659 100644 --- a/mopidy/config/validators.py +++ b/mopidy/config/validators.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals # TODO: add validate regexp? diff --git a/mopidy/core/__init__.py b/mopidy/core/__init__.py index 019034fc..7fa7e299 100644 --- a/mopidy/core/__init__.py +++ b/mopidy/core/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals # flake8: noqa from .actor import Core diff --git a/mopidy/core/actor.py b/mopidy/core/actor.py index edf13679..75c06f69 100644 --- a/mopidy/core/actor.py +++ b/mopidy/core/actor.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import collections import itertools diff --git a/mopidy/core/history.py b/mopidy/core/history.py index 379e3b34..9d7cf59f 100644 --- a/mopidy/core/history.py +++ b/mopidy/core/history.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import copy import logging diff --git a/mopidy/core/library.py b/mopidy/core/library.py index 50d7df19..2ada23d4 100644 --- a/mopidy/core/library.py +++ b/mopidy/core/library.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import collections import operator diff --git a/mopidy/core/listener.py b/mopidy/core/listener.py index f0bb1ea3..2c027e1b 100644 --- a/mopidy/core/listener.py +++ b/mopidy/core/listener.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy import listener diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index 8d5f05da..15a487b2 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import urlparse diff --git a/mopidy/core/playlists.py b/mopidy/core/playlists.py index d5c03bb3..c896bfa7 100644 --- a/mopidy/core/playlists.py +++ b/mopidy/core/playlists.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import itertools import urlparse @@ -53,7 +53,7 @@ class PlaylistsController(object): backend = self.backends.with_playlists[uri_scheme] else: # TODO: this fallback looks suspicious - backend = self.backends.with_playlists.values()[0] + backend = list(self.backends.with_playlists.values())[0] playlist = backend.playlists.create(name).get() listener.CoreListener.send('playlist_changed', playlist=playlist) return playlist diff --git a/mopidy/core/tracklist.py b/mopidy/core/tracklist.py index 4c567086..4b378a02 100644 --- a/mopidy/core/tracklist.py +++ b/mopidy/core/tracklist.py @@ -1,9 +1,10 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import collections import logging import random +from mopidy import compat from mopidy.core import listener from mopidy.models import TlTrack @@ -327,16 +328,16 @@ class TracklistController(object): """ criteria = criteria or kwargs matches = self._tl_tracks - for (key, values) in criteria.iteritems(): + for (key, values) in criteria.items(): if (not isinstance(values, collections.Iterable) - or isinstance(values, basestring)): + or isinstance(values, compat.string_types)): # Fail hard if anyone is using the <0.17 calling style raise ValueError('Filter values must be iterable: %r' % values) if key == 'tlid': - matches = filter(lambda ct: ct.tlid in values, matches) + matches = [ct for ct in matches if ct.tlid in values] else: - matches = filter( - lambda ct: getattr(ct.track, key) in values, matches) + matches = [ + ct for ct in matches if getattr(ct.track, key) in values] return matches def move(self, start, end, to_position): diff --git a/mopidy/exceptions.py b/mopidy/exceptions.py index 532f6853..85169794 100644 --- a/mopidy/exceptions.py +++ b/mopidy/exceptions.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals class MopidyException(Exception): diff --git a/mopidy/ext.py b/mopidy/ext.py index 3333ec3f..7666bb3a 100644 --- a/mopidy/ext.py +++ b/mopidy/ext.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import collections import logging diff --git a/mopidy/http/__init__.py b/mopidy/http/__init__.py index 95675386..3fa4bcd6 100644 --- a/mopidy/http/__init__.py +++ b/mopidy/http/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import os diff --git a/mopidy/http/actor.py b/mopidy/http/actor.py index 57e2f46a..d37a5672 100644 --- a/mopidy/http/actor.py +++ b/mopidy/http/actor.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import json import logging diff --git a/mopidy/http/handlers.py b/mopidy/http/handlers.py index 3bfc1eff..721e419c 100644 --- a/mopidy/http/handlers.py +++ b/mopidy/http/handlers.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import os diff --git a/mopidy/listener.py b/mopidy/listener.py index c8ecfa53..41f8e8e0 100644 --- a/mopidy/listener.py +++ b/mopidy/listener.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging diff --git a/mopidy/local/__init__.py b/mopidy/local/__init__.py index a0bb7bc4..73d07f75 100644 --- a/mopidy/local/__init__.py +++ b/mopidy/local/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import os diff --git a/mopidy/local/actor.py b/mopidy/local/actor.py index 590d7867..f315607a 100644 --- a/mopidy/local/actor.py +++ b/mopidy/local/actor.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging diff --git a/mopidy/local/commands.py b/mopidy/local/commands.py index 1b8981df..0110a6dd 100644 --- a/mopidy/local/commands.py +++ b/mopidy/local/commands.py @@ -1,10 +1,11 @@ -from __future__ import print_function, unicode_literals +from __future__ import ( + absolute_import, division, print_function, unicode_literals) import logging import os import time -from mopidy import commands, exceptions +from mopidy import commands, compat, exceptions from mopidy.audio import scan from mopidy.local import translator from mopidy.utils import path @@ -39,7 +40,7 @@ class ClearCommand(commands.Command): library = _get_library(args, config) prompt = '\nAre you sure you want to clear the library? [y/N] ' - if raw_input(prompt).lower() != 'y': + if compat.input(prompt).lower() != 'y': print('Clearing library aborted.') return 0 @@ -163,6 +164,6 @@ class _Progress(object): logger.info('Scanned %d of %d files in %ds.', self.count, self.total, duration) else: - remainder = duration / self.count * (self.total - self.count) + remainder = duration // self.count * (self.total - self.count) logger.info('Scanned %d of %d files in %ds, ~%ds left.', self.count, self.total, duration, remainder) diff --git a/mopidy/local/json.py b/mopidy/local/json.py index 30fbb562..70dc68c4 100644 --- a/mopidy/local/json.py +++ b/mopidy/local/json.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import, unicode_literals +from __future__ import absolute_import, absolute_import, unicode_literals import collections import gzip @@ -11,7 +11,7 @@ import tempfile import time import mopidy -from mopidy import local, models +from mopidy import compat, local, models from mopidy.local import search, storage, translator from mopidy.utils import encoding @@ -164,7 +164,7 @@ class JsonLibrary(local.Library): return search.search(tracks, query=query, uris=uris) def begin(self): - return self._tracks.itervalues() + return compat.itervalues(self._tracks) def add(self, track): self._tracks[track.uri] = track diff --git a/mopidy/local/library.py b/mopidy/local/library.py index ec5f4869..f3828f1b 100644 --- a/mopidy/local/library.py +++ b/mopidy/local/library.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging diff --git a/mopidy/local/playback.py b/mopidy/local/playback.py index aa0e5b3a..92dc6e15 100644 --- a/mopidy/local/playback.py +++ b/mopidy/local/playback.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging diff --git a/mopidy/local/playlists.py b/mopidy/local/playlists.py index f22c6fde..deeae2b5 100644 --- a/mopidy/local/playlists.py +++ b/mopidy/local/playlists.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, division, unicode_literals import glob import logging @@ -92,7 +92,7 @@ class LocalPlaylistsProvider(backend.PlaylistsProvider): def _write_m3u_extinf(self, file_handle, track): title = track.name.encode('latin-1', 'replace') - runtime = track.length / 1000 if track.length else -1 + runtime = track.length // 1000 if track.length else -1 file_handle.write('#EXTINF:' + str(runtime) + ',' + title + '\n') def _save_m3u(self, playlist): diff --git a/mopidy/local/search.py b/mopidy/local/search.py index 68d0a1f5..947902ed 100644 --- a/mopidy/local/search.py +++ b/mopidy/local/search.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.models import Album, SearchResult @@ -11,7 +11,7 @@ def find_exact(tracks, query=None, uris=None): _validate_query(query) - for (field, values) in query.iteritems(): + for (field, values) in query.items(): if not hasattr(values, '__iter__'): values = [values] # FIXME this is bound to be slow for large libraries @@ -91,7 +91,7 @@ def search(tracks, query=None, uris=None): _validate_query(query) - for (field, values) in query.iteritems(): + for (field, values) in query.items(): if not hasattr(values, '__iter__'): values = [values] # FIXME this is bound to be slow for large libraries @@ -165,7 +165,7 @@ def search(tracks, query=None, uris=None): def _validate_query(query): - for (_, values) in query.iteritems(): + for (_, values) in query.items(): if not values: raise LookupError('Missing query') for value in values: diff --git a/mopidy/local/storage.py b/mopidy/local/storage.py index d83bdf77..9cdcd12e 100644 --- a/mopidy/local/storage.py +++ b/mopidy/local/storage.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import os diff --git a/mopidy/local/translator.py b/mopidy/local/translator.py index 33b67775..7d7f0601 100644 --- a/mopidy/local/translator.py +++ b/mopidy/local/translator.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import os @@ -6,6 +6,7 @@ import re import urllib import urlparse +from mopidy import compat from mopidy.models import Track from mopidy.utils.encoding import locale_decode from mopidy.utils.path import path_to_uri, uri_to_path @@ -29,14 +30,14 @@ def local_track_uri_to_path(uri, media_dir): def path_to_local_track_uri(relpath): """Convert path releative to media_dir to local track URI.""" - if isinstance(relpath, unicode): + if isinstance(relpath, compat.text_type): relpath = relpath.encode('utf-8') return b'local:track:%s' % urllib.quote(relpath) def path_to_local_directory_uri(relpath): """Convert path relative to :confval:`local/media_dir` directory URI.""" - if isinstance(relpath, unicode): + if isinstance(relpath, compat.text_type): relpath = relpath.encode('utf-8') return b'local:directory:%s' % urllib.quote(relpath) diff --git a/mopidy/mixer.py b/mopidy/mixer.py index be793a7c..e277fe55 100644 --- a/mopidy/mixer.py +++ b/mopidy/mixer.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging diff --git a/mopidy/models.py b/mopidy/models.py index bedf8ca5..5508d4de 100644 --- a/mopidy/models.py +++ b/mopidy/models.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import json diff --git a/mopidy/mpd/__init__.py b/mopidy/mpd/__init__.py index 77aaf83f..05c83baa 100644 --- a/mopidy/mpd/__init__.py +++ b/mopidy/mpd/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os diff --git a/mopidy/mpd/actor.py b/mopidy/mpd/actor.py index 49d9556e..c8123c32 100644 --- a/mopidy/mpd/actor.py +++ b/mopidy/mpd/actor.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging diff --git a/mopidy/mpd/dispatcher.py b/mopidy/mpd/dispatcher.py index c947c13d..52b57258 100644 --- a/mopidy/mpd/dispatcher.py +++ b/mopidy/mpd/dispatcher.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import re diff --git a/mopidy/mpd/exceptions.py b/mopidy/mpd/exceptions.py index 6738b4c9..e7ab0068 100644 --- a/mopidy/mpd/exceptions.py +++ b/mopidy/mpd/exceptions.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.exceptions import MopidyException diff --git a/mopidy/mpd/protocol/__init__.py b/mopidy/mpd/protocol/__init__.py index f0ae814b..38fcb33a 100644 --- a/mopidy/mpd/protocol/__init__.py +++ b/mopidy/mpd/protocol/__init__.py @@ -10,7 +10,7 @@ implement our own MPD server which is compatible with the numerous existing `MPD clients `_. """ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import inspect diff --git a/mopidy/mpd/protocol/audio_output.py b/mopidy/mpd/protocol/audio_output.py index 2c7aea16..4a5310f5 100644 --- a/mopidy/mpd/protocol/audio_output.py +++ b/mopidy/mpd/protocol/audio_output.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.mpd import exceptions, protocol diff --git a/mopidy/mpd/protocol/channels.py b/mopidy/mpd/protocol/channels.py index 4ae00622..7699abe3 100644 --- a/mopidy/mpd/protocol/channels.py +++ b/mopidy/mpd/protocol/channels.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.mpd import exceptions, protocol diff --git a/mopidy/mpd/protocol/command_list.py b/mopidy/mpd/protocol/command_list.py index d8551105..028134a9 100644 --- a/mopidy/mpd/protocol/command_list.py +++ b/mopidy/mpd/protocol/command_list.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.mpd import exceptions, protocol diff --git a/mopidy/mpd/protocol/connection.py b/mopidy/mpd/protocol/connection.py index 41896acf..f087847a 100644 --- a/mopidy/mpd/protocol/connection.py +++ b/mopidy/mpd/protocol/connection.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.mpd import exceptions, protocol diff --git a/mopidy/mpd/protocol/current_playlist.py b/mopidy/mpd/protocol/current_playlist.py index a2d60e96..33c090e3 100644 --- a/mopidy/mpd/protocol/current_playlist.py +++ b/mopidy/mpd/protocol/current_playlist.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import warnings diff --git a/mopidy/mpd/protocol/music_db.py b/mopidy/mpd/protocol/music_db.py index a5757915..8dfc1d2c 100644 --- a/mopidy/mpd/protocol/music_db.py +++ b/mopidy/mpd/protocol/music_db.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import functools import itertools diff --git a/mopidy/mpd/protocol/playback.py b/mopidy/mpd/protocol/playback.py index 5b63c561..07102492 100644 --- a/mopidy/mpd/protocol/playback.py +++ b/mopidy/mpd/protocol/playback.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import warnings diff --git a/mopidy/mpd/protocol/reflection.py b/mopidy/mpd/protocol/reflection.py index 4308c560..7feccca1 100644 --- a/mopidy/mpd/protocol/reflection.py +++ b/mopidy/mpd/protocol/reflection.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.mpd import exceptions, protocol diff --git a/mopidy/mpd/protocol/status.py b/mopidy/mpd/protocol/status.py index 8f97c2e4..9dae635e 100644 --- a/mopidy/mpd/protocol/status.py +++ b/mopidy/mpd/protocol/status.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import pykka diff --git a/mopidy/mpd/protocol/stickers.py b/mopidy/mpd/protocol/stickers.py index 4d535423..30b917c6 100644 --- a/mopidy/mpd/protocol/stickers.py +++ b/mopidy/mpd/protocol/stickers.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.mpd import exceptions, protocol diff --git a/mopidy/mpd/protocol/stored_playlists.py b/mopidy/mpd/protocol/stored_playlists.py index f4d48ff0..f273e9b9 100644 --- a/mopidy/mpd/protocol/stored_playlists.py +++ b/mopidy/mpd/protocol/stored_playlists.py @@ -1,4 +1,4 @@ -from __future__ import division, unicode_literals +from __future__ import absolute_import, division, unicode_literals import datetime diff --git a/mopidy/mpd/session.py b/mopidy/mpd/session.py index f0317ede..0e606c8f 100644 --- a/mopidy/mpd/session.py +++ b/mopidy/mpd/session.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging diff --git a/mopidy/mpd/tokenize.py b/mopidy/mpd/tokenize.py index bc0d6b3f..70208ae9 100644 --- a/mopidy/mpd/tokenize.py +++ b/mopidy/mpd/tokenize.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import re diff --git a/mopidy/mpd/translator.py b/mopidy/mpd/translator.py index f3264a46..ec3a270b 100644 --- a/mopidy/mpd/translator.py +++ b/mopidy/mpd/translator.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import re @@ -59,13 +59,13 @@ def track_to_mpd_format(track, position=None): if track.album is not None and track.album.artists: artists = artists_to_mpd_format(track.album.artists) result.append(('AlbumArtist', artists)) - artists = filter( - lambda a: a.musicbrainz_id is not None, track.album.artists) + artists = [ + a for a in track.album.artists if a.musicbrainz_id is not None] if artists: result.append( ('MUSICBRAINZ_ALBUMARTISTID', artists[0].musicbrainz_id)) if track.artists: - artists = filter(lambda a: a.musicbrainz_id is not None, track.artists) + artists = [a for a in track.artists if a.musicbrainz_id is not None] if artists: result.append(('MUSICBRAINZ_ARTISTID', artists[0].musicbrainz_id)) diff --git a/mopidy/softwaremixer/__init__.py b/mopidy/softwaremixer/__init__.py index 242069eb..9e08a719 100644 --- a/mopidy/softwaremixer/__init__.py +++ b/mopidy/softwaremixer/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os diff --git a/mopidy/softwaremixer/mixer.py b/mopidy/softwaremixer/mixer.py index 71d178f5..dadbbec8 100644 --- a/mopidy/softwaremixer/mixer.py +++ b/mopidy/softwaremixer/mixer.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging diff --git a/mopidy/stream/__init__.py b/mopidy/stream/__init__.py index 2cb77365..de01cb84 100644 --- a/mopidy/stream/__init__.py +++ b/mopidy/stream/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os diff --git a/mopidy/stream/actor.py b/mopidy/stream/actor.py index b17dfcea..b6336fbe 100644 --- a/mopidy/stream/actor.py +++ b/mopidy/stream/actor.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import fnmatch import logging diff --git a/mopidy/utils/__init__.py b/mopidy/utils/__init__.py index baffc488..01e6d4f4 100644 --- a/mopidy/utils/__init__.py +++ b/mopidy/utils/__init__.py @@ -1 +1 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals diff --git a/mopidy/utils/deps.py b/mopidy/utils/deps.py index ea64a0a0..886b8818 100644 --- a/mopidy/utils/deps.py +++ b/mopidy/utils/deps.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import functools import os diff --git a/mopidy/utils/encoding.py b/mopidy/utils/encoding.py index a21b3384..27506816 100644 --- a/mopidy/utils/encoding.py +++ b/mopidy/utils/encoding.py @@ -1,10 +1,12 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import locale +from mopidy import compat + def locale_decode(bytestr): try: - return unicode(bytestr) + return compat.text_type(bytestr) except UnicodeError: - return str(bytestr).decode(locale.getpreferredencoding()) + return bytes(bytestr).decode(locale.getpreferredencoding()) diff --git a/mopidy/utils/formatting.py b/mopidy/utils/formatting.py index 3c313eae..9cef7afe 100644 --- a/mopidy/utils/formatting.py +++ b/mopidy/utils/formatting.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import re import unicodedata diff --git a/mopidy/utils/jsonrpc.py b/mopidy/utils/jsonrpc.py index 85565262..13199b26 100644 --- a/mopidy/utils/jsonrpc.py +++ b/mopidy/utils/jsonrpc.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import inspect import json @@ -6,6 +6,8 @@ import traceback import pykka +from mopidy import compat + class JsonRpcWrapper(object): """ @@ -137,13 +139,13 @@ class JsonRpcWrapper(object): except TypeError as error: raise JsonRpcInvalidParamsError(data={ 'type': error.__class__.__name__, - 'message': unicode(error), + 'message': compat.text_type(error), 'traceback': traceback.format_exc(), }) except Exception as error: raise JsonRpcApplicationError(data={ 'type': error.__class__.__name__, - 'message': unicode(error), + 'message': compat.text_type(error), 'traceback': traceback.format_exc(), }) except JsonRpcError as error: @@ -164,7 +166,7 @@ class JsonRpcWrapper(object): if 'method' not in request: raise JsonRpcInvalidRequestError( data='"method" member must be included') - if not isinstance(request['method'], unicode): + if not isinstance(request['method'], compat.text_type): raise JsonRpcInvalidRequestError( data='"method" must be a string') @@ -320,12 +322,12 @@ class JsonRpcInspector(object): available properties and methods. """ methods = {} - for mount, obj in self.objects.iteritems(): + for mount, obj in self.objects.items(): if inspect.isroutine(obj): methods[mount] = self._describe_method(obj) else: obj_methods = self._get_methods(obj) - for name, description in obj_methods.iteritems(): + for name, description in obj_methods.items(): if mount: name = '%s.%s' % (mount, name) methods[name] = description diff --git a/mopidy/utils/log.py b/mopidy/utils/log.py index c461b434..396c05b9 100644 --- a/mopidy/utils/log.py +++ b/mopidy/utils/log.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import logging.config diff --git a/mopidy/utils/network.py b/mopidy/utils/network.py index 4ea25026..ce02ef0e 100644 --- a/mopidy/utils/network.py +++ b/mopidy/utils/network.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import errno import logging diff --git a/mopidy/utils/path.py b/mopidy/utils/path.py index be735ae5..54f480b4 100644 --- a/mopidy/utils/path.py +++ b/mopidy/utils/path.py @@ -1,6 +1,5 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals -import Queue as queue import logging import os import stat @@ -11,6 +10,9 @@ import urlparse import glib +from mopidy import compat +from mopidy.compat import queue + logger = logging.getLogger(__name__) @@ -64,7 +66,7 @@ def path_to_uri(path): Returns a file:// URI as an unicode string. """ - if isinstance(path, unicode): + if isinstance(path, compat.text_type): path = path.encode('utf-8') path = urllib.quote(path) return urlparse.urlunsplit((b'file', b'', path, b'', b'')) @@ -81,7 +83,7 @@ def uri_to_path(uri): look up the matching dir or file on your file system because the exact path would be lost by ignoring its encoding. """ - if isinstance(uri, unicode): + if isinstance(uri, compat.text_type): uri = uri.encode('utf-8') return urllib.unquote(urlparse.urlsplit(uri).path) @@ -196,7 +198,7 @@ def _find(root, thread_count=10, relative=False, follow=False): def find_mtimes(root, follow=False): results, errors = _find(root, relative=False, follow=follow) - mtimes = dict((f, int(st.st_mtime)) for f, st in results.iteritems()) + mtimes = dict((f, int(st.st_mtime)) for f, st in results.items()) return mtimes, errors diff --git a/mopidy/utils/process.py b/mopidy/utils/process.py index 2887e705..5b2bb9c0 100644 --- a/mopidy/utils/process.py +++ b/mopidy/utils/process.py @@ -1,20 +1,20 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import signal -try: - import _thread as thread # Python 3 -except ImportError: - import thread # Python 2 import threading from pykka import ActorDeadError from pykka.registry import ActorRegistry +from mopidy.compat import thread + + logger = logging.getLogger(__name__) + SIGNALS = dict( - (k, v) for v, k in signal.__dict__.iteritems() + (k, v) for v, k in signal.__dict__.items() if v.startswith('SIG') and not v.startswith('SIG_')) diff --git a/mopidy/utils/versioning.py b/mopidy/utils/versioning.py index 94578121..db1aa949 100644 --- a/mopidy/utils/versioning.py +++ b/mopidy/utils/versioning.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os import subprocess diff --git a/mopidy/zeroconf.py b/mopidy/zeroconf.py index 9f726957..0c42dd74 100644 --- a/mopidy/zeroconf.py +++ b/mopidy/zeroconf.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import socket diff --git a/setup.py b/setup.py index 900fcf38..384aaec5 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import re diff --git a/tests/__init__.py b/tests/__init__.py index a384669e..82759578 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,7 +1,9 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os +from mopidy import compat + def path_to_data_dir(name): if not isinstance(name, bytes): @@ -31,4 +33,4 @@ class IsA(object): any_int = IsA(int) any_str = IsA(str) -any_unicode = IsA(unicode) +any_unicode = IsA(compat.text_type) diff --git a/tests/__main__.py b/tests/__main__.py index 164f1e66..ae7a18e6 100644 --- a/tests/__main__.py +++ b/tests/__main__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import nose diff --git a/tests/audio/test_actor.py b/tests/audio/test_actor.py index 8db7f61f..ab897595 100644 --- a/tests/audio/test_actor.py +++ b/tests/audio/test_actor.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import threading import unittest diff --git a/tests/audio/test_listener.py b/tests/audio/test_listener.py index 56574411..08b03e6c 100644 --- a/tests/audio/test_listener.py +++ b/tests/audio/test_listener.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/audio/test_playlists.py b/tests/audio/test_playlists.py index 51c36eac..eb79cfeb 100644 --- a/tests/audio/test_playlists.py +++ b/tests/audio/test_playlists.py @@ -1,6 +1,6 @@ # encoding: utf-8 -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import io import unittest diff --git a/tests/audio/test_scan.py b/tests/audio/test_scan.py index 2e91ce32..45a4aa6a 100644 --- a/tests/audio/test_scan.py +++ b/tests/audio/test_scan.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os import unittest diff --git a/tests/backend/__init__.py b/tests/backend/__init__.py index baffc488..01e6d4f4 100644 --- a/tests/backend/__init__.py +++ b/tests/backend/__init__.py @@ -1 +1 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals diff --git a/tests/backend/test_listener.py b/tests/backend/test_listener.py index 9e080d31..6ec39308 100644 --- a/tests/backend/test_listener.py +++ b/tests/backend/test_listener.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/config/test_config.py b/tests/config/test_config.py index da0e5192..cd97d9a8 100644 --- a/tests/config/test_config.py +++ b/tests/config/test_config.py @@ -1,6 +1,6 @@ # encoding: utf-8 -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/config/test_schemas.py b/tests/config/test_schemas.py index 86cd69f1..910b5004 100644 --- a/tests/config/test_schemas.py +++ b/tests/config/test_schemas.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import unittest diff --git a/tests/config/test_types.py b/tests/config/test_types.py index dfb439be..939d028b 100644 --- a/tests/config/test_types.py +++ b/tests/config/test_types.py @@ -1,6 +1,6 @@ # encoding: utf-8 -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import logging import socket @@ -8,6 +8,7 @@ import unittest import mock +from mopidy import compat from mopidy.config import types # TODO: DecodeTest and EncodeTest @@ -48,7 +49,7 @@ class StringTest(unittest.TestCase): def test_deserialize_conversion_success(self): value = types.String() self.assertEqual('foo', value.deserialize(b' foo ')) - self.assertIsInstance(value.deserialize(b'foo'), unicode) + self.assertIsInstance(value.deserialize(b'foo'), compat.text_type) def test_deserialize_decodes_utf8(self): value = types.String() @@ -119,7 +120,7 @@ class SecretTest(unittest.TestCase): def test_deserialize_decodes_utf8(self): value = types.Secret() result = value.deserialize('æøå'.encode('utf-8')) - self.assertIsInstance(result, unicode) + self.assertIsInstance(result, compat.text_type) self.assertEqual('æøå', result) def test_deserialize_enforces_required(self): diff --git a/tests/config/test_validator.py b/tests/config/test_validator.py index ce773340..8172df0c 100644 --- a/tests/config/test_validator.py +++ b/tests/config/test_validator.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/core/__init__.py b/tests/core/__init__.py index baffc488..01e6d4f4 100644 --- a/tests/core/__init__.py +++ b/tests/core/__init__.py @@ -1 +1 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals diff --git a/tests/core/test_actor.py b/tests/core/test_actor.py index 79d778af..a3cb93da 100644 --- a/tests/core/test_actor.py +++ b/tests/core/test_actor.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/core/test_events.py b/tests/core/test_events.py index ab7906a8..ebe099f3 100644 --- a/tests/core/test_events.py +++ b/tests/core/test_events.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/core/test_history.py b/tests/core/test_history.py index 75b4dc76..eb1404b5 100644 --- a/tests/core/test_history.py +++ b/tests/core/test_history.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/core/test_library.py b/tests/core/test_library.py index 9eac3ebd..cbbea2e3 100644 --- a/tests/core/test_library.py +++ b/tests/core/test_library.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/core/test_listener.py b/tests/core/test_listener.py index c0075450..22bb9146 100644 --- a/tests/core/test_listener.py +++ b/tests/core/test_listener.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/core/test_playback.py b/tests/core/test_playback.py index ce6c8571..18b73b17 100644 --- a/tests/core/test_playback.py +++ b/tests/core/test_playback.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/core/test_playlists.py b/tests/core/test_playlists.py index 49f617b5..20577763 100644 --- a/tests/core/test_playlists.py +++ b/tests/core/test_playlists.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/core/test_tracklist.py b/tests/core/test_tracklist.py index b681e097..38885912 100644 --- a/tests/core/test_tracklist.py +++ b/tests/core/test_tracklist.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/http/test_events.py b/tests/http/test_events.py index d03778a6..43d9db58 100644 --- a/tests/http/test_events.py +++ b/tests/http/test_events.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import json import unittest diff --git a/tests/http/test_handlers.py b/tests/http/test_handlers.py index 28e53855..5c958d9a 100644 --- a/tests/http/test_handlers.py +++ b/tests/http/test_handlers.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os diff --git a/tests/http/test_server.py b/tests/http/test_server.py index b3cfa92c..3c7d7c88 100644 --- a/tests/http/test_server.py +++ b/tests/http/test_server.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os diff --git a/tests/local/__init__.py b/tests/local/__init__.py index f408139f..b1520768 100644 --- a/tests/local/__init__.py +++ b/tests/local/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals def generate_song(i): diff --git a/tests/local/test_events.py b/tests/local/test_events.py index f6ae5360..7a85731e 100644 --- a/tests/local/test_events.py +++ b/tests/local/test_events.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/local/test_json.py b/tests/local/test_json.py index 54afefe7..2da13632 100644 --- a/tests/local/test_json.py +++ b/tests/local/test_json.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/local/test_library.py b/tests/local/test_library.py index c1f2bcbd..3be41333 100644 --- a/tests/local/test_library.py +++ b/tests/local/test_library.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os import shutil diff --git a/tests/local/test_playback.py b/tests/local/test_playback.py index ba051fa0..67e49178 100644 --- a/tests/local/test_playback.py +++ b/tests/local/test_playback.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import time import unittest diff --git a/tests/local/test_playlists.py b/tests/local/test_playlists.py index f054ffc9..4210f248 100644 --- a/tests/local/test_playlists.py +++ b/tests/local/test_playlists.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os import shutil diff --git a/tests/local/test_tracklist.py b/tests/local/test_tracklist.py index 9c1d09d7..69dd6400 100644 --- a/tests/local/test_tracklist.py +++ b/tests/local/test_tracklist.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import random import unittest diff --git a/tests/local/test_translator.py b/tests/local/test_translator.py index b7ffd5cf..a473a0ff 100644 --- a/tests/local/test_translator.py +++ b/tests/local/test_translator.py @@ -1,6 +1,6 @@ # encoding: utf-8 -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os import tempfile diff --git a/tests/mpd/__init__.py b/tests/mpd/__init__.py index baffc488..01e6d4f4 100644 --- a/tests/mpd/__init__.py +++ b/tests/mpd/__init__.py @@ -1 +1 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals diff --git a/tests/mpd/protocol/__init__.py b/tests/mpd/protocol/__init__.py index f4776f4f..813d91fe 100644 --- a/tests/mpd/protocol/__init__.py +++ b/tests/mpd/protocol/__init__.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/mpd/protocol/test_audio_output.py b/tests/mpd/protocol/test_audio_output.py index 643682ef..4815c2db 100644 --- a/tests/mpd/protocol/test_audio_output.py +++ b/tests/mpd/protocol/test_audio_output.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from tests.mpd import protocol diff --git a/tests/mpd/protocol/test_authentication.py b/tests/mpd/protocol/test_authentication.py index 4937c04f..6785ff98 100644 --- a/tests/mpd/protocol/test_authentication.py +++ b/tests/mpd/protocol/test_authentication.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from tests.mpd import protocol diff --git a/tests/mpd/protocol/test_channels.py b/tests/mpd/protocol/test_channels.py index be3b96a8..1c04974e 100644 --- a/tests/mpd/protocol/test_channels.py +++ b/tests/mpd/protocol/test_channels.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from tests.mpd import protocol diff --git a/tests/mpd/protocol/test_command_list.py b/tests/mpd/protocol/test_command_list.py index 9d66bd5d..330af176 100644 --- a/tests/mpd/protocol/test_command_list.py +++ b/tests/mpd/protocol/test_command_list.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from tests.mpd import protocol diff --git a/tests/mpd/protocol/test_connection.py b/tests/mpd/protocol/test_connection.py index 34cce6a0..2a21a1c3 100644 --- a/tests/mpd/protocol/test_connection.py +++ b/tests/mpd/protocol/test_connection.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mock import patch diff --git a/tests/mpd/protocol/test_current_playlist.py b/tests/mpd/protocol/test_current_playlist.py index e9898dd9..6501e5c7 100644 --- a/tests/mpd/protocol/test_current_playlist.py +++ b/tests/mpd/protocol/test_current_playlist.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.models import Ref, Track diff --git a/tests/mpd/protocol/test_idle.py b/tests/mpd/protocol/test_idle.py index cc937119..4c987647 100644 --- a/tests/mpd/protocol/test_idle.py +++ b/tests/mpd/protocol/test_idle.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mock import patch diff --git a/tests/mpd/protocol/test_music_db.py b/tests/mpd/protocol/test_music_db.py index ff39c081..3d8eefbf 100644 --- a/tests/mpd/protocol/test_music_db.py +++ b/tests/mpd/protocol/test_music_db.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/mpd/protocol/test_playback.py b/tests/mpd/protocol/test_playback.py index 67b4e787..d13cf65f 100644 --- a/tests/mpd/protocol/test_playback.py +++ b/tests/mpd/protocol/test_playback.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/mpd/protocol/test_reflection.py b/tests/mpd/protocol/test_reflection.py index 160c9876..e721d799 100644 --- a/tests/mpd/protocol/test_reflection.py +++ b/tests/mpd/protocol/test_reflection.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from tests.mpd import protocol diff --git a/tests/mpd/protocol/test_regression.py b/tests/mpd/protocol/test_regression.py index 3389573f..b0e9d450 100644 --- a/tests/mpd/protocol/test_regression.py +++ b/tests/mpd/protocol/test_regression.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import random diff --git a/tests/mpd/protocol/test_status.py b/tests/mpd/protocol/test_status.py index 7d30ea89..87e63a1a 100644 --- a/tests/mpd/protocol/test_status.py +++ b/tests/mpd/protocol/test_status.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.models import Track diff --git a/tests/mpd/protocol/test_stickers.py b/tests/mpd/protocol/test_stickers.py index c3ce264a..9eae1ac6 100644 --- a/tests/mpd/protocol/test_stickers.py +++ b/tests/mpd/protocol/test_stickers.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from tests.mpd import protocol diff --git a/tests/mpd/protocol/test_stored_playlists.py b/tests/mpd/protocol/test_stored_playlists.py index 4dc7dbbb..bc66387a 100644 --- a/tests/mpd/protocol/test_stored_playlists.py +++ b/tests/mpd/protocol/test_stored_playlists.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals from mopidy.models import Playlist, Track diff --git a/tests/mpd/test_commands.py b/tests/mpd/test_commands.py index 2b4205fe..4699dfe0 100644 --- a/tests/mpd/test_commands.py +++ b/tests/mpd/test_commands.py @@ -1,6 +1,6 @@ # encoding: utf-8 -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/mpd/test_dispatcher.py b/tests/mpd/test_dispatcher.py index cee4531a..24d03bf1 100644 --- a/tests/mpd/test_dispatcher.py +++ b/tests/mpd/test_dispatcher.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/mpd/test_exceptions.py b/tests/mpd/test_exceptions.py index 7f50c41b..d055ef7e 100644 --- a/tests/mpd/test_exceptions.py +++ b/tests/mpd/test_exceptions.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest @@ -13,7 +13,7 @@ class MpdExceptionsTest(unittest.TestCase): try: raise KeyError('Track X not found') except KeyError as e: - raise MpdAckError(e[0]) + raise MpdAckError(e.message) except MpdAckError as e: self.assertEqual(e.message, 'Track X not found') diff --git a/tests/mpd/test_status.py b/tests/mpd/test_status.py index 6a455136..57b2d4d4 100644 --- a/tests/mpd/test_status.py +++ b/tests/mpd/test_status.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/mpd/test_tokenizer.py b/tests/mpd/test_tokenizer.py index 01ecd17d..b4a1df09 100644 --- a/tests/mpd/test_tokenizer.py +++ b/tests/mpd/test_tokenizer.py @@ -1,6 +1,6 @@ # encoding: utf-8 -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/mpd/test_translator.py b/tests/mpd/test_translator.py index 2bd6cff6..b38a93e8 100644 --- a/tests/mpd/test_translator.py +++ b/tests/mpd/test_translator.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import datetime import unittest diff --git a/tests/test_commands.py b/tests/test_commands.py index 570647c2..58f681be 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import argparse import unittest diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py index 19127aaa..fc19f60a 100644 --- a/tests/test_exceptions.py +++ b/tests/test_exceptions.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/test_ext.py b/tests/test_ext.py index 428f3712..0e850e60 100644 --- a/tests/test_ext.py +++ b/tests/test_ext.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/test_help.py b/tests/test_help.py index 6499cac1..d8058cb7 100644 --- a/tests/test_help.py +++ b/tests/test_help.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os import subprocess diff --git a/tests/test_mixer.py b/tests/test_mixer.py index 53c10292..d0f1b0f2 100644 --- a/tests/test_mixer.py +++ b/tests/test_mixer.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/test_models.py b/tests/test_models.py index 7838a6ba..ed1586da 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import json import unittest diff --git a/tests/test_version.py b/tests/test_version.py index 96063a1b..32b40fca 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest from distutils.version import StrictVersion as SV diff --git a/tests/utils/__init__.py b/tests/utils/__init__.py index baffc488..01e6d4f4 100644 --- a/tests/utils/__init__.py +++ b/tests/utils/__init__.py @@ -1 +1 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals diff --git a/tests/utils/network/__init__.py b/tests/utils/network/__init__.py index baffc488..01e6d4f4 100644 --- a/tests/utils/network/__init__.py +++ b/tests/utils/network/__init__.py @@ -1 +1 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals diff --git a/tests/utils/network/test_connection.py b/tests/utils/network/test_connection.py index c3200689..031ea385 100644 --- a/tests/utils/network/test_connection.py +++ b/tests/utils/network/test_connection.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import errno import logging diff --git a/tests/utils/network/test_lineprotocol.py b/tests/utils/network/test_lineprotocol.py index 52d6901c..28bfbad2 100644 --- a/tests/utils/network/test_lineprotocol.py +++ b/tests/utils/network/test_lineprotocol.py @@ -1,12 +1,13 @@ # encoding: utf-8 -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import re import unittest from mock import Mock, sentinel +from mopidy import compat from mopidy.utils import network from tests import any_unicode @@ -259,13 +260,13 @@ class LineProtocolTest(unittest.TestCase): def test_decode_plain_ascii(self): result = network.LineProtocol.decode(self.mock, 'abc') self.assertEqual('abc', result) - self.assertEqual(unicode, type(result)) + self.assertEqual(compat.text_type, type(result)) def test_decode_utf8(self): result = network.LineProtocol.decode( self.mock, 'æøå'.encode('utf-8')) self.assertEqual('æøå', result) - self.assertEqual(unicode, type(result)) + self.assertEqual(compat.text_type, type(result)) def test_decode_invalid_data(self): string = Mock() diff --git a/tests/utils/network/test_server.py b/tests/utils/network/test_server.py index eebc9ea2..f5f61101 100644 --- a/tests/utils/network/test_server.py +++ b/tests/utils/network/test_server.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import errno import socket diff --git a/tests/utils/network/test_utils.py b/tests/utils/network/test_utils.py index d0886cfc..d5f558b4 100644 --- a/tests/utils/network/test_utils.py +++ b/tests/utils/network/test_utils.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import socket import unittest diff --git a/tests/utils/test_deps.py b/tests/utils/test_deps.py index 103f478c..3144fe30 100644 --- a/tests/utils/test_deps.py +++ b/tests/utils/test_deps.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import platform import unittest diff --git a/tests/utils/test_encoding.py b/tests/utils/test_encoding.py index 912f38c0..68634855 100644 --- a/tests/utils/test_encoding.py +++ b/tests/utils/test_encoding.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import unittest diff --git a/tests/utils/test_jsonrpc.py b/tests/utils/test_jsonrpc.py index 8f97f37e..bf7da541 100644 --- a/tests/utils/test_jsonrpc.py +++ b/tests/utils/test_jsonrpc.py @@ -1,4 +1,4 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import json import unittest diff --git a/tests/utils/test_path.py b/tests/utils/test_path.py index 8dafd951..d82bcbe6 100644 --- a/tests/utils/test_path.py +++ b/tests/utils/test_path.py @@ -1,6 +1,6 @@ # encoding: utf-8 -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals import os import shutil @@ -9,6 +9,7 @@ import unittest import glib +from mopidy import compat from mopidy.utils import path import tests @@ -57,7 +58,7 @@ class GetOrCreateDirTest(unittest.TestCase): def test_create_dir_with_unicode(self): with self.assertRaises(ValueError): - dir_path = unicode(os.path.join(self.parent, b'test')) + dir_path = compat.text_type(os.path.join(self.parent, b'test')) path.get_or_create_dir(dir_path) def test_create_dir_with_none(self): @@ -108,7 +109,7 @@ class GetOrCreateFileTest(unittest.TestCase): def test_create_dir_with_unicode(self): with self.assertRaises(ValueError): - file_path = unicode(os.path.join(self.parent, b'test')) + file_path = compat.text_type(os.path.join(self.parent, b'test')) path.get_or_create_file(file_path) def test_create_file_with_none(self):