From d7453982b85ba79bd6a3b59cc682a50f2edc6f54 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 29 Apr 2013 19:21:21 +0200 Subject: [PATCH 1/4] Require Python 2.7 --- docs/changelog.rst | 5 +++++ docs/installation/index.rst | 8 +------- mopidy/__init__.py | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 7bff7946..b3247e83 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -9,6 +9,11 @@ v0.15.0 (UNRELEASED) (no description yet) +**Dependencies** + +- Mopidy no longer supports Python 2.6. Currently, the only Python version + supported by Mopidy is Python 2.7. + v0.14.1 (2013-04-28) ==================== diff --git a/docs/installation/index.rst b/docs/installation/index.rst index ae8f6b01..85e07c9d 100644 --- a/docs/installation/index.rst +++ b/docs/installation/index.rst @@ -131,12 +131,6 @@ Pip. PYTHONPATH=$(brew --prefix)/lib/python2.7/site-packages mopidy - Note that you need to replace ``python2.7`` with ``python2.6`` in the above - ``PYTHONPATH`` examples if you are using Python 2.6. To find your Python - version, run:: - - python --version - #. Next up, you need to install some Python packages. To do so, we use Pip. If you don't have the ``pip`` command, you can install it now:: @@ -157,7 +151,7 @@ Otherwise: Install from source using Pip If you are on on Linux, but can't install from the APT archive or from AUR, you can install Mopidy from PyPI using Pip. -#. First of all, you need Python >= 2.6, < 3. Check if you have Python and what +#. First of all, you need Python 2.7. Check if you have Python and what version by running:: python --version diff --git a/mopidy/__init__.py b/mopidy/__init__.py index 14646df6..12694927 100644 --- a/mopidy/__init__.py +++ b/mopidy/__init__.py @@ -9,9 +9,9 @@ import warnings import pykka -if not (2, 6) <= sys.version_info < (3,): +if not (2, 7) <= sys.version_info < (3,): sys.exit( - 'Mopidy requires Python >= 2.6, < 3, but found %s' % + 'Mopidy requires Python >= 2.7, < 3, but found %s' % '.'.join(map(str, sys.version_info[:3]))) if (isinstance(pykka.__version__, basestring) From 2d80621b70bd9a2048ebccebcc146b1c40a0ea14 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 29 Apr 2013 19:26:07 +0200 Subject: [PATCH 2/4] tests: Remove unittest2 --- requirements/tests.txt | 2 -- tests/__init__.py | 6 +----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index 7c4d99cd..c093682b 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -3,5 +3,3 @@ flake8 mock >= 1.0 nose pylint -tox -unittest2 diff --git a/tests/__init__.py b/tests/__init__.py index 98df0370..60edf5ce 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -2,11 +2,7 @@ from __future__ import unicode_literals import os import sys - -if sys.version_info < (2, 7): - import unittest2 as unittest -else: - import unittest # noqa +import unittest # noqa def path_to_data_dir(name): From 52ee45669261d15f4a958fe6aa3bb7065c2b8ac7 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 29 Apr 2013 19:45:25 +0200 Subject: [PATCH 3/4] tests: Import unittest directly from the stdlib --- tests/__init__.py | 1 - tests/audio/actor_test.py | 4 +++- tests/audio/listener_test.py | 3 +-- tests/backends/base/library.py | 4 +++- tests/backends/base/playback.py | 2 +- tests/backends/base/playlists.py | 4 ++-- tests/backends/listener_test.py | 3 +-- tests/backends/local/events_test.py | 4 +++- tests/backends/local/library_test.py | 4 +++- tests/backends/local/playback_test.py | 4 +++- tests/backends/local/playlists_test.py | 3 ++- tests/backends/local/tracklist_test.py | 4 +++- tests/backends/local/translator_test.py | 3 ++- tests/config/config_test.py | 12 ++++++++---- tests/config/schemas_test.py | 5 +++-- tests/config/types_test.py | 3 +-- tests/config/validator_tests.py | 4 ++-- tests/core/actor_test.py | 4 ++-- tests/core/events_test.py | 4 ++-- tests/core/library_test.py | 3 +-- tests/core/listener_test.py | 3 +-- tests/core/playback_test.py | 3 +-- tests/core/playlists_test.py | 3 +-- tests/core/tracklist_test.py | 3 +-- tests/exceptions_test.py | 4 ++-- tests/ext_test.py | 4 ++-- tests/frontends/http/events_test.py | 5 ++--- tests/frontends/mpd/dispatcher_test.py | 4 ++-- tests/frontends/mpd/exception_test.py | 4 ++-- tests/frontends/mpd/protocol/__init__.py | 4 ++-- tests/frontends/mpd/protocol/playback_test.py | 3 ++- tests/frontends/mpd/status_test.py | 4 ++-- tests/frontends/mpd/translator_test.py | 3 +-- tests/frontends/mpris/events_test.py | 3 +-- tests/frontends/mpris/player_interface_test.py | 4 ++-- tests/frontends/mpris/playlists_interface_test.py | 5 ++--- tests/frontends/mpris/root_interface_test.py | 4 ++-- tests/help_test.py | 3 +-- tests/models_test.py | 3 +-- tests/scanner_test.py | 4 +++- tests/utils/deps_test.py | 5 ++--- tests/utils/encoding_test.py | 3 +-- tests/utils/jsonrpc_test.py | 5 ++--- tests/utils/network/connection_test.py | 10 ++++++---- tests/utils/network/lineprotocol_test.py | 5 ++--- tests/utils/network/server_test.py | 8 +++++--- tests/utils/network/utils_test.py | 5 ++--- tests/utils/path_test.py | 6 ++++-- tests/version_test.py | 3 +-- 49 files changed, 104 insertions(+), 97 deletions(-) diff --git a/tests/__init__.py b/tests/__init__.py index 60edf5ce..b358f32b 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -2,7 +2,6 @@ from __future__ import unicode_literals import os import sys -import unittest # noqa def path_to_data_dir(name): diff --git a/tests/audio/actor_test.py b/tests/audio/actor_test.py index a40b0572..c311bdc3 100644 --- a/tests/audio/actor_test.py +++ b/tests/audio/actor_test.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +import unittest + import pygst pygst.require('0.10') import gst @@ -9,7 +11,7 @@ import pykka from mopidy import audio from mopidy.utils.path import path_to_uri -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir class AudioTest(unittest.TestCase): diff --git a/tests/audio/listener_test.py b/tests/audio/listener_test.py index 2c6da8f4..08286cf9 100644 --- a/tests/audio/listener_test.py +++ b/tests/audio/listener_test.py @@ -1,11 +1,10 @@ from __future__ import unicode_literals import mock +import unittest from mopidy import audio -from tests import unittest - class AudioListenerTest(unittest.TestCase): def setUp(self): diff --git a/tests/backends/base/library.py b/tests/backends/base/library.py index 8390d2d6..4bc525c8 100644 --- a/tests/backends/base/library.py +++ b/tests/backends/base/library.py @@ -1,11 +1,13 @@ from __future__ import unicode_literals +import unittest + import pykka from mopidy import core from mopidy.models import Track, Album, Artist -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir class LibraryControllerTest(object): diff --git a/tests/backends/base/playback.py b/tests/backends/base/playback.py index 9ce73d31..44ae40f9 100644 --- a/tests/backends/base/playback.py +++ b/tests/backends/base/playback.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import mock import random import time +import unittest import pykka @@ -10,7 +11,6 @@ from mopidy import audio, core from mopidy.core import PlaybackState from mopidy.models import Track -from tests import unittest from tests.backends.base import populate_tracklist # TODO Test 'playlist repeat', e.g. repeat=1,single=0 diff --git a/tests/backends/base/playlists.py b/tests/backends/base/playlists.py index ad5648f9..139c21c6 100644 --- a/tests/backends/base/playlists.py +++ b/tests/backends/base/playlists.py @@ -1,12 +1,12 @@ from __future__ import unicode_literals +import unittest + import pykka from mopidy import audio, core from mopidy.models import Playlist -from tests import unittest - class PlaylistsControllerTest(object): config = {} diff --git a/tests/backends/listener_test.py b/tests/backends/listener_test.py index 4aee451e..ae2eb997 100644 --- a/tests/backends/listener_test.py +++ b/tests/backends/listener_test.py @@ -1,11 +1,10 @@ from __future__ import unicode_literals import mock +import unittest from mopidy.backends.listener import BackendListener -from tests import unittest - class BackendListenerTest(unittest.TestCase): def setUp(self): diff --git a/tests/backends/local/events_test.py b/tests/backends/local/events_test.py index 1218afc4..7b7ceadd 100644 --- a/tests/backends/local/events_test.py +++ b/tests/backends/local/events_test.py @@ -1,8 +1,10 @@ from __future__ import unicode_literals +import unittest + from mopidy.backends.local import actor -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir from tests.backends.base import events diff --git a/tests/backends/local/library_test.py b/tests/backends/local/library_test.py index 1cb933ce..c249a10e 100644 --- a/tests/backends/local/library_test.py +++ b/tests/backends/local/library_test.py @@ -1,8 +1,10 @@ from __future__ import unicode_literals +import unittest + from mopidy.backends.local import actor -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir from tests.backends.base.library import LibraryControllerTest diff --git a/tests/backends/local/playback_test.py b/tests/backends/local/playback_test.py index 7381113a..4c699699 100644 --- a/tests/backends/local/playback_test.py +++ b/tests/backends/local/playback_test.py @@ -1,11 +1,13 @@ from __future__ import unicode_literals +import unittest + from mopidy.backends.local import actor from mopidy.core import PlaybackState from mopidy.models import Track from mopidy.utils.path import path_to_uri -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir from tests.backends.base.playback import PlaybackControllerTest from tests.backends.local import generate_song diff --git a/tests/backends/local/playlists_test.py b/tests/backends/local/playlists_test.py index acaac941..2882e476 100644 --- a/tests/backends/local/playlists_test.py +++ b/tests/backends/local/playlists_test.py @@ -3,12 +3,13 @@ from __future__ import unicode_literals import os import shutil import tempfile +import unittest from mopidy.backends.local import actor from mopidy.models import Track from mopidy.utils.path import path_to_uri -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir from tests.backends.base.playlists import ( PlaylistsControllerTest) from tests.backends.local import generate_song diff --git a/tests/backends/local/tracklist_test.py b/tests/backends/local/tracklist_test.py index 44e4d004..c7650ac0 100644 --- a/tests/backends/local/tracklist_test.py +++ b/tests/backends/local/tracklist_test.py @@ -1,9 +1,11 @@ from __future__ import unicode_literals +import unittest + from mopidy.backends.local import actor from mopidy.models import Track -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir from tests.backends.base.tracklist import TracklistControllerTest from tests.backends.local import generate_song diff --git a/tests/backends/local/translator_test.py b/tests/backends/local/translator_test.py index 67907ff1..096d9a0d 100644 --- a/tests/backends/local/translator_test.py +++ b/tests/backends/local/translator_test.py @@ -4,12 +4,13 @@ from __future__ import unicode_literals import os import tempfile +import unittest from mopidy.backends.local.translator import parse_m3u, parse_mpd_tag_cache from mopidy.models import Track, Artist, Album from mopidy.utils.path import path_to_uri -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir data_dir = path_to_data_dir('') song1_path = path_to_data_dir('song1.mp3') diff --git a/tests/config/config_test.py b/tests/config/config_test.py index 1fbe07b0..a792839a 100644 --- a/tests/config/config_test.py +++ b/tests/config/config_test.py @@ -3,10 +3,11 @@ from __future__ import unicode_literals import mock +import unittest from mopidy import config -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir class LoadConfigTest(unittest.TestCase): @@ -111,9 +112,12 @@ class ParseOverrideTest(unittest.TestCase): def test_valid_override(self): expected = (b'section', b'key', b'value') self.assertEqual(expected, config.parse_override(b'section/key=value')) - self.assertEqual(expected, config.parse_override(b'section/key=value ')) - self.assertEqual(expected, config.parse_override(b'section/key =value')) - self.assertEqual(expected, config.parse_override(b'section /key=value')) + self.assertEqual( + expected, config.parse_override(b'section/key=value ')) + self.assertEqual( + expected, config.parse_override(b'section/key =value')) + self.assertEqual( + expected, config.parse_override(b'section /key=value')) def test_valid_override_is_bytes(self): section, key, value = config.parse_override(b'section/key=value') diff --git a/tests/config/schemas_test.py b/tests/config/schemas_test.py index 1595b508..8bcfc651 100644 --- a/tests/config/schemas_test.py +++ b/tests/config/schemas_test.py @@ -2,10 +2,11 @@ from __future__ import unicode_literals import logging import mock +import unittest -from mopidy.config import schemas, types +from mopidy.config import schemas -from tests import unittest, any_unicode +from tests import any_unicode class ConfigSchemaTest(unittest.TestCase): diff --git a/tests/config/types_test.py b/tests/config/types_test.py index eee32af1..24f1265e 100644 --- a/tests/config/types_test.py +++ b/tests/config/types_test.py @@ -6,11 +6,10 @@ import logging import mock import socket import sys +import unittest from mopidy.config import types -from tests import unittest - # TODO: DecodeTest and EncodeTest diff --git a/tests/config/validator_tests.py b/tests/config/validator_tests.py index 63ef8ca6..ce773340 100644 --- a/tests/config/validator_tests.py +++ b/tests/config/validator_tests.py @@ -1,8 +1,8 @@ from __future__ import unicode_literals -from mopidy.config import validators +import unittest -from tests import unittest +from mopidy.config import validators class ValidateChoiceTest(unittest.TestCase): diff --git a/tests/core/actor_test.py b/tests/core/actor_test.py index d86b8702..c4952af3 100644 --- a/tests/core/actor_test.py +++ b/tests/core/actor_test.py @@ -1,12 +1,12 @@ from __future__ import unicode_literals import mock +import unittest + import pykka from mopidy.core import Core -from tests import unittest - class CoreActorTest(unittest.TestCase): def setUp(self): diff --git a/tests/core/events_test.py b/tests/core/events_test.py index 7f673b02..6d192b87 100644 --- a/tests/core/events_test.py +++ b/tests/core/events_test.py @@ -1,14 +1,14 @@ from __future__ import unicode_literals import mock +import unittest + import pykka from mopidy import core from mopidy.backends import dummy from mopidy.models import Track -from tests import unittest - @mock.patch.object(core.CoreListener, 'send') class BackendEventsTest(unittest.TestCase): diff --git a/tests/core/library_test.py b/tests/core/library_test.py index 6e9d240a..f4028d2f 100644 --- a/tests/core/library_test.py +++ b/tests/core/library_test.py @@ -1,13 +1,12 @@ from __future__ import unicode_literals import mock +import unittest from mopidy.backends import base from mopidy.core import Core from mopidy.models import SearchResult, Track -from tests import unittest - class CoreLibraryTest(unittest.TestCase): def setUp(self): diff --git a/tests/core/listener_test.py b/tests/core/listener_test.py index 2d7182d9..bf3a235d 100644 --- a/tests/core/listener_test.py +++ b/tests/core/listener_test.py @@ -1,12 +1,11 @@ from __future__ import unicode_literals import mock +import unittest from mopidy.core import CoreListener, PlaybackState from mopidy.models import Playlist, TlTrack -from tests import unittest - class CoreListenerTest(unittest.TestCase): def setUp(self): diff --git a/tests/core/playback_test.py b/tests/core/playback_test.py index ffbca506..74f8a105 100644 --- a/tests/core/playback_test.py +++ b/tests/core/playback_test.py @@ -1,13 +1,12 @@ from __future__ import unicode_literals import mock +import unittest from mopidy.backends import base from mopidy.core import Core, PlaybackState from mopidy.models import Track -from tests import unittest - class CorePlaybackTest(unittest.TestCase): def setUp(self): diff --git a/tests/core/playlists_test.py b/tests/core/playlists_test.py index f11e1776..01c2b881 100644 --- a/tests/core/playlists_test.py +++ b/tests/core/playlists_test.py @@ -1,13 +1,12 @@ from __future__ import unicode_literals import mock +import unittest from mopidy.backends import base from mopidy.core import Core from mopidy.models import Playlist, Track -from tests import unittest - class PlaylistsTest(unittest.TestCase): def setUp(self): diff --git a/tests/core/tracklist_test.py b/tests/core/tracklist_test.py index 93d914ed..9f17f6de 100644 --- a/tests/core/tracklist_test.py +++ b/tests/core/tracklist_test.py @@ -1,13 +1,12 @@ from __future__ import unicode_literals import mock +import unittest from mopidy.backends import base from mopidy.core import Core from mopidy.models import Track -from tests import unittest - class TracklistTest(unittest.TestCase): def setUp(self): diff --git a/tests/exceptions_test.py b/tests/exceptions_test.py index 5c244872..da8fed90 100644 --- a/tests/exceptions_test.py +++ b/tests/exceptions_test.py @@ -1,8 +1,8 @@ from __future__ import unicode_literals -from mopidy import exceptions +import unittest -from tests import unittest +from mopidy import exceptions class ExceptionsTest(unittest.TestCase): diff --git a/tests/ext_test.py b/tests/ext_test.py index 7bbe5cc4..f6b0ccfe 100644 --- a/tests/ext_test.py +++ b/tests/ext_test.py @@ -1,8 +1,8 @@ from __future__ import unicode_literals -from mopidy import config, ext +import unittest -from tests import unittest +from mopidy import config, ext class ExtensionTest(unittest.TestCase): diff --git a/tests/frontends/http/events_test.py b/tests/frontends/http/events_test.py index ee08a60a..2c6b241e 100644 --- a/tests/frontends/http/events_test.py +++ b/tests/frontends/http/events_test.py @@ -1,6 +1,8 @@ from __future__ import unicode_literals import json +import mock +import unittest try: import cherrypy @@ -15,9 +17,6 @@ except ImportError: if cherrypy and ws4py: from mopidy.frontends.http import actor -import mock -from tests import unittest - @unittest.skipUnless(cherrypy, 'cherrypy not found') @unittest.skipUnless(ws4py, 'ws4py not found') diff --git a/tests/frontends/mpd/dispatcher_test.py b/tests/frontends/mpd/dispatcher_test.py index 35e18c3b..9ef88e44 100644 --- a/tests/frontends/mpd/dispatcher_test.py +++ b/tests/frontends/mpd/dispatcher_test.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +import unittest + import pykka from mopidy import core @@ -8,8 +10,6 @@ from mopidy.frontends.mpd.dispatcher import MpdDispatcher from mopidy.frontends.mpd.exceptions import MpdAckError from mopidy.frontends.mpd.protocol import request_handlers, handle_request -from tests import unittest - class MpdDispatcherTest(unittest.TestCase): def setUp(self): diff --git a/tests/frontends/mpd/exception_test.py b/tests/frontends/mpd/exception_test.py index fe834673..3b42f1b9 100644 --- a/tests/frontends/mpd/exception_test.py +++ b/tests/frontends/mpd/exception_test.py @@ -1,11 +1,11 @@ from __future__ import unicode_literals +import unittest + from mopidy.frontends.mpd.exceptions import ( MpdAckError, MpdPermissionError, MpdUnknownCommand, MpdSystemError, MpdNotImplemented) -from tests import unittest - class MpdExceptionsTest(unittest.TestCase): def test_key_error_wrapped_in_mpd_ack_error(self): diff --git a/tests/frontends/mpd/protocol/__init__.py b/tests/frontends/mpd/protocol/__init__.py index 21ba1c25..aa9a5a6d 100644 --- a/tests/frontends/mpd/protocol/__init__.py +++ b/tests/frontends/mpd/protocol/__init__.py @@ -1,14 +1,14 @@ from __future__ import unicode_literals import mock +import unittest + import pykka from mopidy import core from mopidy.backends import dummy from mopidy.frontends.mpd import session -from tests import unittest - class MockConnection(mock.Mock): def __init__(self, *args, **kwargs): diff --git a/tests/frontends/mpd/protocol/playback_test.py b/tests/frontends/mpd/protocol/playback_test.py index cc49a8cd..2cfc1b98 100644 --- a/tests/frontends/mpd/protocol/playback_test.py +++ b/tests/frontends/mpd/protocol/playback_test.py @@ -1,9 +1,10 @@ from __future__ import unicode_literals +import unittest + from mopidy.core import PlaybackState from mopidy.models import Track -from tests import unittest from tests.frontends.mpd import protocol diff --git a/tests/frontends/mpd/status_test.py b/tests/frontends/mpd/status_test.py index 8868eef7..ded0c3b2 100644 --- a/tests/frontends/mpd/status_test.py +++ b/tests/frontends/mpd/status_test.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +import unittest + import pykka from mopidy import core @@ -9,8 +11,6 @@ from mopidy.frontends.mpd import dispatcher from mopidy.frontends.mpd.protocol import status from mopidy.models import Track -from tests import unittest - PAUSED = PlaybackState.PAUSED PLAYING = PlaybackState.PLAYING diff --git a/tests/frontends/mpd/translator_test.py b/tests/frontends/mpd/translator_test.py index e4755d01..860e01e9 100644 --- a/tests/frontends/mpd/translator_test.py +++ b/tests/frontends/mpd/translator_test.py @@ -2,13 +2,12 @@ from __future__ import unicode_literals import datetime import os +import unittest from mopidy.utils.path import mtime, uri_to_path from mopidy.frontends.mpd import translator, protocol from mopidy.models import Album, Artist, TlTrack, Playlist, Track -from tests import unittest - class TrackMpdFormatTest(unittest.TestCase): track = Track( diff --git a/tests/frontends/mpris/events_test.py b/tests/frontends/mpris/events_test.py index b336cbc7..0a4bc79f 100644 --- a/tests/frontends/mpris/events_test.py +++ b/tests/frontends/mpris/events_test.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals import mock +import unittest try: import dbus @@ -12,8 +13,6 @@ from mopidy.models import Playlist, TlTrack if dbus: from mopidy.frontends.mpris import actor, objects -from tests import unittest - @unittest.skipUnless(dbus, 'dbus not found') class BackendEventsTest(unittest.TestCase): diff --git a/tests/frontends/mpris/player_interface_test.py b/tests/frontends/mpris/player_interface_test.py index 2353d831..52cd964b 100644 --- a/tests/frontends/mpris/player_interface_test.py +++ b/tests/frontends/mpris/player_interface_test.py @@ -1,6 +1,8 @@ from __future__ import unicode_literals import mock +import unittest + import pykka try: @@ -16,8 +18,6 @@ from mopidy.models import Album, Artist, Track if dbus: from mopidy.frontends.mpris import objects -from tests import unittest - PLAYING = PlaybackState.PLAYING PAUSED = PlaybackState.PAUSED STOPPED = PlaybackState.STOPPED diff --git a/tests/frontends/mpris/playlists_interface_test.py b/tests/frontends/mpris/playlists_interface_test.py index 06f7f45e..f8e2cf3e 100644 --- a/tests/frontends/mpris/playlists_interface_test.py +++ b/tests/frontends/mpris/playlists_interface_test.py @@ -1,8 +1,9 @@ from __future__ import unicode_literals import datetime - import mock +import unittest + import pykka try: @@ -18,8 +19,6 @@ from mopidy.models import Track if dbus: from mopidy.frontends.mpris import objects -from tests import unittest - @unittest.skipUnless(dbus, 'dbus not found') class PlayerInterfaceTest(unittest.TestCase): diff --git a/tests/frontends/mpris/root_interface_test.py b/tests/frontends/mpris/root_interface_test.py index 85c72c97..f95f0969 100644 --- a/tests/frontends/mpris/root_interface_test.py +++ b/tests/frontends/mpris/root_interface_test.py @@ -1,6 +1,8 @@ from __future__ import unicode_literals import mock +import unittest + import pykka try: @@ -14,8 +16,6 @@ from mopidy.backends import dummy if dbus: from mopidy.frontends.mpris import objects -from tests import unittest - @unittest.skipUnless(dbus, 'dbus not found') class RootInterfaceTest(unittest.TestCase): diff --git a/tests/help_test.py b/tests/help_test.py index b1ba9d64..4f210031 100644 --- a/tests/help_test.py +++ b/tests/help_test.py @@ -3,11 +3,10 @@ from __future__ import unicode_literals import os import subprocess import sys +import unittest import mopidy -from tests import unittest - class HelpTest(unittest.TestCase): def test_help_has_mopidy_options(self): diff --git a/tests/models_test.py b/tests/models_test.py index c2d65ec6..a0fe08c7 100644 --- a/tests/models_test.py +++ b/tests/models_test.py @@ -2,13 +2,12 @@ from __future__ import unicode_literals import datetime import json +import unittest from mopidy.models import ( Artist, Album, TlTrack, Track, Playlist, SearchResult, ModelJSONEncoder, model_json_decoder) -from tests import unittest - class GenericCopyTest(unittest.TestCase): def compare(self, orig, other): diff --git a/tests/scanner_test.py b/tests/scanner_test.py index edcc2242..63383806 100644 --- a/tests/scanner_test.py +++ b/tests/scanner_test.py @@ -1,9 +1,11 @@ from __future__ import unicode_literals +import unittest + from mopidy.scanner import Scanner, translator from mopidy.models import Track, Artist, Album -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir class FakeGstDate(object): diff --git a/tests/utils/deps_test.py b/tests/utils/deps_test.py index 017fe27a..4ad04ed7 100644 --- a/tests/utils/deps_test.py +++ b/tests/utils/deps_test.py @@ -1,18 +1,17 @@ from __future__ import unicode_literals import platform +import mock +import unittest import pygst pygst.require('0.10') import gst -import mock import pkg_resources from mopidy.utils import deps -from tests import unittest - class DepsTest(unittest.TestCase): def test_format_dependency_list(self): diff --git a/tests/utils/encoding_test.py b/tests/utils/encoding_test.py index b7292de0..88ad5899 100644 --- a/tests/utils/encoding_test.py +++ b/tests/utils/encoding_test.py @@ -1,11 +1,10 @@ from __future__ import unicode_literals import mock +import unittest from mopidy.utils.encoding import locale_decode -from tests import unittest - @mock.patch('mopidy.utils.encoding.locale.getpreferredencoding') class LocaleDecodeTest(unittest.TestCase): diff --git a/tests/utils/jsonrpc_test.py b/tests/utils/jsonrpc_test.py index 7fb8a55e..f60bdccd 100644 --- a/tests/utils/jsonrpc_test.py +++ b/tests/utils/jsonrpc_test.py @@ -1,16 +1,15 @@ from __future__ import unicode_literals import json +import mock +import unittest import pykka -import mock from mopidy import core, models from mopidy.backends import dummy from mopidy.utils import jsonrpc -from tests import unittest - class Calculator(object): def model(self): diff --git a/tests/utils/network/connection_test.py b/tests/utils/network/connection_test.py index 3e63cdfc..c0a74542 100644 --- a/tests/utils/network/connection_test.py +++ b/tests/utils/network/connection_test.py @@ -1,15 +1,17 @@ from __future__ import unicode_literals import errno -import gobject import logging -import pykka -import socket from mock import patch, sentinel, Mock +import socket +import unittest + +import gobject +import pykka from mopidy.utils import network -from tests import unittest, any_int, any_unicode +from tests import any_int, any_unicode class ConnectionTest(unittest.TestCase): diff --git a/tests/utils/network/lineprotocol_test.py b/tests/utils/network/lineprotocol_test.py index 530c708c..4919754d 100644 --- a/tests/utils/network/lineprotocol_test.py +++ b/tests/utils/network/lineprotocol_test.py @@ -2,13 +2,12 @@ from __future__ import unicode_literals -import re from mock import sentinel, Mock +import re +import unittest from mopidy.utils import network -from tests import unittest - class LineProtocolTest(unittest.TestCase): def setUp(self): diff --git a/tests/utils/network/server_test.py b/tests/utils/network/server_test.py index 3f7da337..123f535c 100644 --- a/tests/utils/network/server_test.py +++ b/tests/utils/network/server_test.py @@ -1,13 +1,15 @@ from __future__ import unicode_literals import errno -import gobject -import socket from mock import patch, sentinel, Mock +import socket +import unittest + +import gobject from mopidy.utils import network -from tests import unittest, any_int +from tests import any_int class ServerTest(unittest.TestCase): diff --git a/tests/utils/network/utils_test.py b/tests/utils/network/utils_test.py index ff8af9bd..527e9196 100644 --- a/tests/utils/network/utils_test.py +++ b/tests/utils/network/utils_test.py @@ -1,12 +1,11 @@ from __future__ import unicode_literals -import socket from mock import patch, Mock +import socket +import unittest from mopidy.utils import network -from tests import unittest - class FormatHostnameTest(unittest.TestCase): @patch('mopidy.utils.network.has_ipv6', True) diff --git a/tests/utils/path_test.py b/tests/utils/path_test.py index f7306f3d..54a9a8a4 100644 --- a/tests/utils/path_test.py +++ b/tests/utils/path_test.py @@ -2,15 +2,17 @@ from __future__ import unicode_literals -import glib import os import shutil import sys import tempfile +import unittest + +import glib from mopidy.utils import path -from tests import unittest, path_to_data_dir +from tests import path_to_data_dir class GetOrCreateDirTest(unittest.TestCase): diff --git a/tests/version_test.py b/tests/version_test.py index ce16d435..10c35c8f 100644 --- a/tests/version_test.py +++ b/tests/version_test.py @@ -1,11 +1,10 @@ from __future__ import unicode_literals from distutils.version import StrictVersion as SV +import unittest from mopidy import __version__ -from tests import unittest - class VersionTest(unittest.TestCase): def test_current_version_is_parsable_as_a_strict_version_number(self): From de84fdfef46bfc3bd5de953a3ed17f9051adf30f Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 29 Apr 2013 19:52:29 +0200 Subject: [PATCH 4/4] Remove hacks required by #302 to run on older Python 2.6.x --- mopidy/__main__.py | 16 ++++------ mopidy/backends/local/translator.py | 39 +++++++++++------------ mopidy/frontends/mpd/actor.py | 6 ++-- mopidy/frontends/mpd/protocol/__init__.py | 7 +--- mopidy/frontends/mpd/translator.py | 4 +-- mopidy/models.py | 38 +++++++--------------- mopidy/scanner.py | 23 ++++++------- tests/scanner_test.py | 36 ++++++++++----------- tests/utils/jsonrpc_test.py | 4 +-- 9 files changed, 67 insertions(+), 106 deletions(-) diff --git a/mopidy/__main__.py b/mopidy/__main__.py index bc5f248d..33f23269 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -140,35 +140,33 @@ def parse_options(): optparse.Option.TYPES += ('config_override',) optparse.Option.TYPE_CHECKER['config_override'] = check_config_override - # NOTE First argument to add_option must be bytestrings on Python < 2.6.2 - # See https://github.com/mopidy/mopidy/issues/302 for details parser.add_option( - b'-q', '--quiet', + '-q', '--quiet', action='store_const', const=0, dest='verbosity_level', help='less output (warning level)') parser.add_option( - b'-v', '--verbose', + '-v', '--verbose', action='count', default=1, dest='verbosity_level', help='more output (debug level)') parser.add_option( - b'--save-debug-log', + '--save-debug-log', action='store_true', dest='save_debug_log', help='save debug log to "./mopidy.log"') parser.add_option( - b'--show-config', + '--show-config', action='callback', callback=show_config_callback, help='show current config') parser.add_option( - b'--show-deps', + '--show-deps', action='callback', callback=deps.show_deps_optparse_callback, help='show dependencies and their versions') parser.add_option( - b'--config', + '--config', action='store', dest='config', default=b'$XDG_CONFIG_DIR/mopidy/mopidy.conf', help='config files to use, colon seperated, later files override') parser.add_option( - b'-o', b'--option', + '-o', '--option', action='append', dest='overrides', type='config_override', help='`section/key=value` values to override config options') return parser.parse_args(args=mopidy_args)[0] diff --git a/mopidy/backends/local/translator.py b/mopidy/backends/local/translator.py index c53011f6..d2ee0d45 100644 --- a/mopidy/backends/local/translator.py +++ b/mopidy/backends/local/translator.py @@ -100,9 +100,6 @@ def _convert_mpd_data(data, tracks, music_dir): if not data: return - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details. - track_kwargs = {} album_kwargs = {} artist_kwargs = {} @@ -110,51 +107,51 @@ def _convert_mpd_data(data, tracks, music_dir): if 'track' in data: if '/' in data['track']: - album_kwargs[b'num_tracks'] = int(data['track'].split('/')[1]) - track_kwargs[b'track_no'] = int(data['track'].split('/')[0]) + album_kwargs['num_tracks'] = int(data['track'].split('/')[1]) + track_kwargs['track_no'] = int(data['track'].split('/')[0]) else: - track_kwargs[b'track_no'] = int(data['track']) + track_kwargs['track_no'] = int(data['track']) if 'artist' in data: - artist_kwargs[b'name'] = data['artist'] - albumartist_kwargs[b'name'] = data['artist'] + artist_kwargs['name'] = data['artist'] + albumartist_kwargs['name'] = data['artist'] if 'albumartist' in data: - albumartist_kwargs[b'name'] = data['albumartist'] + albumartist_kwargs['name'] = data['albumartist'] if 'album' in data: - album_kwargs[b'name'] = data['album'] + album_kwargs['name'] = data['album'] if 'title' in data: - track_kwargs[b'name'] = data['title'] + track_kwargs['name'] = data['title'] if 'date' in data: - track_kwargs[b'date'] = data['date'] + track_kwargs['date'] = data['date'] if 'musicbrainz_trackid' in data: - track_kwargs[b'musicbrainz_id'] = data['musicbrainz_trackid'] + track_kwargs['musicbrainz_id'] = data['musicbrainz_trackid'] if 'musicbrainz_albumid' in data: - album_kwargs[b'musicbrainz_id'] = data['musicbrainz_albumid'] + album_kwargs['musicbrainz_id'] = data['musicbrainz_albumid'] if 'musicbrainz_artistid' in data: - artist_kwargs[b'musicbrainz_id'] = data['musicbrainz_artistid'] + artist_kwargs['musicbrainz_id'] = data['musicbrainz_artistid'] if 'musicbrainz_albumartistid' in data: - albumartist_kwargs[b'musicbrainz_id'] = ( + albumartist_kwargs['musicbrainz_id'] = ( data['musicbrainz_albumartistid']) if artist_kwargs: artist = Artist(**artist_kwargs) - track_kwargs[b'artists'] = [artist] + track_kwargs['artists'] = [artist] if albumartist_kwargs: albumartist = Artist(**albumartist_kwargs) - album_kwargs[b'artists'] = [albumartist] + album_kwargs['artists'] = [albumartist] if album_kwargs: album = Album(**album_kwargs) - track_kwargs[b'album'] = album + track_kwargs['album'] = album if data['file'][0] == '/': path = data['file'][1:] @@ -167,9 +164,9 @@ def _convert_mpd_data(data, tracks, music_dir): # Make sure we only pass bytestrings to path_to_uri to avoid implicit # decoding of bytestrings to unicode strings - track_kwargs[b'uri'] = path_to_uri(music_dir, path) + track_kwargs['uri'] = path_to_uri(music_dir, path) - track_kwargs[b'length'] = int(data.get('time', 0)) * 1000 + track_kwargs['length'] = int(data.get('time', 0)) * 1000 track = Track(**track_kwargs) tracks.add(track) diff --git a/mopidy/frontends/mpd/actor.py b/mopidy/frontends/mpd/actor.py index 45ed753e..f1fefae4 100644 --- a/mopidy/frontends/mpd/actor.py +++ b/mopidy/frontends/mpd/actor.py @@ -18,15 +18,13 @@ class MpdFrontend(pykka.ThreadingActor, CoreListener): hostname = network.format_hostname(config['mpd']['hostname']) port = config['mpd']['port'] - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details. try: network.Server( hostname, port, protocol=session.MpdSession, protocol_kwargs={ - b'config': config, - b'core': core, + 'config': config, + 'core': core, }, max_connections=config['mpd']['max_connections'], timeout=config['mpd']['connection_timeout']) diff --git a/mopidy/frontends/mpd/protocol/__init__.py b/mopidy/frontends/mpd/protocol/__init__.py index 2b2260ef..1827624b 100644 --- a/mopidy/frontends/mpd/protocol/__init__.py +++ b/mopidy/frontends/mpd/protocol/__init__.py @@ -56,12 +56,7 @@ def handle_request(pattern, auth_required=True): if match is not None: mpd_commands.add( MpdCommand(name=match.group(), auth_required=auth_required)) - # NOTE Make pattern a bytestring to get bytestring keys in the dict - # returned from matches.groupdict(), which is again used as a **kwargs - # dict. This is needed to work on Python < 2.6.5. - # See https://github.com/mopidy/mopidy/issues/302 for details. - bytestring_pattern = pattern.encode('utf-8') - compiled_pattern = re.compile(bytestring_pattern, flags=re.UNICODE) + compiled_pattern = re.compile(pattern, flags=re.UNICODE) if compiled_pattern in request_handlers: raise ValueError('Tried to redefine handler for %s with %s' % ( pattern, func)) diff --git a/mopidy/frontends/mpd/translator.py b/mopidy/frontends/mpd/translator.py index e164883d..b646732f 100644 --- a/mopidy/frontends/mpd/translator.py +++ b/mopidy/frontends/mpd/translator.py @@ -139,8 +139,6 @@ def query_from_mpd_list_format(field, mpd_query): """ Converts an MPD ``list`` query to a Mopidy query. """ - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details if mpd_query is None: return {} try: @@ -156,7 +154,7 @@ def query_from_mpd_list_format(field, mpd_query): if field == 'album': if not tokens[0]: raise ValueError - return {b'artist': [tokens[0]]} # See above NOTE + return {'artist': [tokens[0]]} # See above NOTE else: raise MpdArgError( 'should be "Album" for 3 arguments', command='list') diff --git a/mopidy/models.py b/mopidy/models.py index 4020febb..d138b490 100644 --- a/mopidy/models.py +++ b/mopidy/models.py @@ -66,15 +66,13 @@ class ImmutableObject(object): :type values: dict :rtype: new instance of the model being copied """ - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details data = {} for key in self.__dict__.keys(): public_key = key.lstrip('_') - data[str(public_key)] = values.pop(public_key, self.__dict__[key]) + data[public_key] = values.pop(public_key, self.__dict__[key]) for key in values.keys(): if hasattr(self, key): - data[str(key)] = values.pop(key) + data[key] = values.pop(key) if values: raise TypeError( 'copy() got an unexpected keyword argument "%s"' % key) @@ -127,15 +125,13 @@ def model_json_decoder(dct): {u'a_track': Track(artists=[], name=u'name')} """ - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details. if '__model__' in dct: model_name = dct.pop('__model__') cls = globals().get(model_name, None) if issubclass(cls, ImmutableObject): kwargs = {} for key, value in dct.items(): - kwargs[str(key)] = value + kwargs[key] = value return cls(**kwargs) return dct @@ -208,10 +204,8 @@ class Album(ImmutableObject): # actual usage of this field with more than one image. def __init__(self, *args, **kwargs): - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details - self.__dict__[b'artists'] = frozenset(kwargs.pop('artists', [])) - self.__dict__[b'images'] = frozenset(kwargs.pop('images', [])) + self.__dict__['artists'] = frozenset(kwargs.pop('artists', [])) + self.__dict__['images'] = frozenset(kwargs.pop('images', [])) super(Album, self).__init__(*args, **kwargs) @@ -270,9 +264,7 @@ class Track(ImmutableObject): musicbrainz_id = None def __init__(self, *args, **kwargs): - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details - self.__dict__[b'artists'] = frozenset(kwargs.pop('artists', [])) + self.__dict__['artists'] = frozenset(kwargs.pop('artists', [])) super(Track, self).__init__(*args, **kwargs) @@ -304,11 +296,9 @@ class TlTrack(ImmutableObject): track = None def __init__(self, *args, **kwargs): - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details if len(args) == 2 and len(kwargs) == 0: - kwargs[b'tlid'] = args[0] - kwargs[b'track'] = args[1] + kwargs['tlid'] = args[0] + kwargs['track'] = args[1] args = [] super(TlTrack, self).__init__(*args, **kwargs) @@ -343,9 +333,7 @@ class Playlist(ImmutableObject): last_modified = None def __init__(self, *args, **kwargs): - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details - self.__dict__[b'tracks'] = tuple(kwargs.pop('tracks', [])) + self.__dict__['tracks'] = tuple(kwargs.pop('tracks', [])) super(Playlist, self).__init__(*args, **kwargs) # TODO: def insert(self, pos, track): ... ? @@ -381,9 +369,7 @@ class SearchResult(ImmutableObject): albums = tuple() def __init__(self, *args, **kwargs): - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details - self.__dict__[b'tracks'] = tuple(kwargs.pop('tracks', [])) - self.__dict__[b'artists'] = tuple(kwargs.pop('artists', [])) - self.__dict__[b'albums'] = tuple(kwargs.pop('albums', [])) + self.__dict__['tracks'] = tuple(kwargs.pop('tracks', [])) + self.__dict__['artists'] = tuple(kwargs.pop('artists', [])) + self.__dict__['albums'] = tuple(kwargs.pop('albums', [])) super(SearchResult, self).__init__(*args, **kwargs) diff --git a/mopidy/scanner.py b/mopidy/scanner.py index fc80f95b..61257add 100644 --- a/mopidy/scanner.py +++ b/mopidy/scanner.py @@ -90,14 +90,12 @@ def main(): def parse_options(): parser = optparse.OptionParser( version='Mopidy %s' % versioning.get_version()) - # NOTE First argument to add_option must be bytestrings on Python < 2.6.2 - # See https://github.com/mopidy/mopidy/issues/302 for details parser.add_option( - b'-q', '--quiet', + '-q', '--quiet', action='store_const', const=0, dest='verbosity_level', help='less output (warning level)') parser.add_option( - b'-v', '--verbose', + '-v', '--verbose', action='count', default=1, dest='verbosity_level', help='more output (debug level)') return parser.parse_args(args=mopidy_args)[0] @@ -109,12 +107,9 @@ def translator(data): artist_kwargs = {} track_kwargs = {} - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details. - def _retrieve(source_key, target_key, target): if source_key in data: - target[str(target_key)] = data[source_key] + target[target_key] = data[source_key] _retrieve(gst.TAG_ALBUM, 'name', album_kwargs) _retrieve(gst.TAG_TRACK_COUNT, 'num_tracks', album_kwargs) @@ -127,7 +122,7 @@ def translator(data): except ValueError: pass # Ignore invalid dates else: - track_kwargs[b'date'] = date.isoformat() + track_kwargs['date'] = date.isoformat() _retrieve(gst.TAG_TITLE, 'name', track_kwargs) _retrieve(gst.TAG_TRACK_NUMBER, 'track_no', track_kwargs) @@ -141,12 +136,12 @@ def translator(data): 'musicbrainz-albumartistid', 'musicbrainz_id', albumartist_kwargs) if albumartist_kwargs: - album_kwargs[b'artists'] = [Artist(**albumartist_kwargs)] + album_kwargs['artists'] = [Artist(**albumartist_kwargs)] - track_kwargs[b'uri'] = data['uri'] - track_kwargs[b'length'] = data[gst.TAG_DURATION] - track_kwargs[b'album'] = Album(**album_kwargs) - track_kwargs[b'artists'] = [Artist(**artist_kwargs)] + track_kwargs['uri'] = data['uri'] + track_kwargs['length'] = data[gst.TAG_DURATION] + track_kwargs['album'] = Album(**album_kwargs) + track_kwargs['artists'] = [Artist(**artist_kwargs)] return Track(**track_kwargs) diff --git a/tests/scanner_test.py b/tests/scanner_test.py index 63383806..75fc60fd 100644 --- a/tests/scanner_test.py +++ b/tests/scanner_test.py @@ -34,40 +34,36 @@ class TranslatorTest(unittest.TestCase): 'musicbrainz-albumartistid': 'mbalbumartistid', } - # NOTE: kwargs are explicitly made bytestrings to work on Python - # 2.6.0/2.6.1. See https://github.com/mopidy/mopidy/issues/302 for - # details. - self.album = { - b'name': 'albumname', - b'num_tracks': 2, - b'musicbrainz_id': 'mbalbumid', + 'name': 'albumname', + 'num_tracks': 2, + 'musicbrainz_id': 'mbalbumid', } self.artist = { - b'name': 'name', - b'musicbrainz_id': 'mbartistid', + 'name': 'name', + 'musicbrainz_id': 'mbartistid', } self.albumartist = { - b'name': 'albumartistname', - b'musicbrainz_id': 'mbalbumartistid', + 'name': 'albumartistname', + 'musicbrainz_id': 'mbalbumartistid', } self.track = { - b'uri': 'uri', - b'name': 'trackname', - b'date': '2006-01-01', - b'track_no': 1, - b'length': 4531, - b'musicbrainz_id': 'mbtrackid', + 'uri': 'uri', + 'name': 'trackname', + 'date': '2006-01-01', + 'track_no': 1, + 'length': 4531, + 'musicbrainz_id': 'mbtrackid', } def build_track(self): if self.albumartist: - self.album[b'artists'] = [Artist(**self.albumartist)] - self.track[b'album'] = Album(**self.album) - self.track[b'artists'] = [Artist(**self.artist)] + self.album['artists'] = [Artist(**self.albumartist)] + self.track['album'] = Album(**self.album) + self.track['artists'] = [Artist(**self.artist)] return Track(**self.track) def check(self): diff --git a/tests/utils/jsonrpc_test.py b/tests/utils/jsonrpc_test.py index f60bdccd..5dccbe05 100644 --- a/tests/utils/jsonrpc_test.py +++ b/tests/utils/jsonrpc_test.py @@ -218,12 +218,10 @@ class JsonRpcSingleCommandTest(JsonRpcTestBase): self.assertEqual(self.core.playback.get_volume().get(), 37) def test_call_methods_with_named_params(self): - # NOTE kwargs dict keys must be bytestrings to work on Python < 2.6.5 - # See https://github.com/mopidy/mopidy/issues/302 for details. request = { 'jsonrpc': '2.0', 'method': 'core.playback.set_volume', - 'params': {b'volume': 37}, + 'params': {'volume': 37}, 'id': 1, } response = self.jrw.handle_data(request)