From b4bc81e19e3d07bc6be3b6add96883dd6a2f7485 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sat, 20 Mar 2010 03:22:44 +0100 Subject: [PATCH] Move utility functions to mopidy.utils --- mopidy/__init__.py | 24 ---------------------- mopidy/__main__.py | 3 ++- mopidy/backends/__init__.py | 3 ++- mopidy/core.py | 3 ++- mopidy/mpd/frontend.py | 10 +-------- mopidy/mpd/server.py | 16 ++++----------- mopidy/utils.py | 41 +++++++++++++++++++++++++++++++++++++ 7 files changed, 52 insertions(+), 48 deletions(-) create mode 100644 mopidy/utils.py diff --git a/mopidy/__init__.py b/mopidy/__init__.py index 5e7b9988..1969e9c8 100644 --- a/mopidy/__init__.py +++ b/mopidy/__init__.py @@ -1,35 +1,11 @@ -import logging -from multiprocessing.reduction import reduce_connection -import pickle - from mopidy import settings as raw_settings -logger = logging.getLogger('mopidy') - def get_version(): return u'0.1.dev' def get_mpd_protocol_version(): return u'0.16.0' -def get_class(name): - module_name = name[:name.rindex('.')] - class_name = name[name.rindex('.') + 1:] - logger.info('Loading: %s from %s', class_name, module_name) - module = __import__(module_name, globals(), locals(), [class_name], -1) - class_object = getattr(module, class_name) - return class_object - -def pickle_connection(connection): - return pickle.dumps(reduce_connection(connection)) - -def unpickle_connection(pickled_connection): - # From http://stackoverflow.com/questions/1446004 - unpickled = pickle.loads(pickled_connection) - func = unpickled[0] - args = unpickled[1] - return func(*args) - class SettingsError(Exception): pass diff --git a/mopidy/__main__.py b/mopidy/__main__.py index 0666d99b..b2dc9123 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -7,8 +7,9 @@ import sys sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../'))) -from mopidy import get_class, settings, SettingsError +from mopidy import settings, SettingsError from mopidy.core import CoreProcess +from mopidy.utils import get_class logger = logging.getLogger('mopidy.main') diff --git a/mopidy/backends/__init__.py b/mopidy/backends/__init__.py index ac9fcb41..b9ec17d6 100644 --- a/mopidy/backends/__init__.py +++ b/mopidy/backends/__init__.py @@ -3,8 +3,9 @@ import logging import random import time -from mopidy import get_class, settings +from mopidy import settings from mopidy.models import Playlist +from mopidy.utils import get_class logger = logging.getLogger('mopidy.backends.base') diff --git a/mopidy/core.py b/mopidy/core.py index acb3b984..4eb65fbb 100644 --- a/mopidy/core.py +++ b/mopidy/core.py @@ -1,7 +1,8 @@ import logging import multiprocessing -from mopidy import get_class, settings, unpickle_connection +from mopidy import settings +from mopidy.utils import get_class, unpickle_connection logger = logging.getLogger('mopidy.core') diff --git a/mopidy/mpd/frontend.py b/mopidy/mpd/frontend.py index f2c10bbb..71aea66e 100644 --- a/mopidy/mpd/frontend.py +++ b/mopidy/mpd/frontend.py @@ -16,6 +16,7 @@ import re import sys from mopidy.mpd import MpdAckError, MpdNotImplemented +from mopidy.utils import flatten logger = logging.getLogger('mopidy.mpd.frontend') @@ -49,15 +50,6 @@ def handle_pattern(pattern): return func return decorator -def flatten(the_list): - result = [] - for element in the_list: - if isinstance(element, list): - result.extend(flatten(element)) - else: - result.append(element) - return result - class MpdFrontend(object): def __init__(self, backend=None): self.backend = backend diff --git a/mopidy/mpd/server.py b/mopidy/mpd/server.py index f995d99e..3b4d42ad 100644 --- a/mopidy/mpd/server.py +++ b/mopidy/mpd/server.py @@ -9,14 +9,16 @@ import multiprocessing import socket import sys -from mopidy import get_mpd_protocol_version, pickle_connection, settings +from mopidy import get_mpd_protocol_version, settings from mopidy.mpd import MpdAckError +from mopidy.utils import indent, pickle_connection logger = logging.getLogger('mopidy.mpd.server') -#: All data between the client and the server is encoded in UTF-8. +#: The MPD protocol uses UTF-8 for encoding all data. ENCODING = u'utf-8' +#: The MPD protocol uses ``\n`` as line terminator. LINE_TERMINATOR = u'\n' class MpdServer(asyncore.dispatcher): @@ -87,13 +89,3 @@ class MpdSession(asynchat.async_chat): output = u'%s%s' % (output, LINE_TERMINATOR) data = output.encode(ENCODING) self.push(data) - - -def indent(string, places=4, linebreak=LINE_TERMINATOR): - lines = string.split(linebreak) - if len(lines) == 1: - return string - result = u'' - for line in lines: - result += linebreak + ' ' * places + line - return result diff --git a/mopidy/utils.py b/mopidy/utils.py new file mode 100644 index 00000000..90bd8d75 --- /dev/null +++ b/mopidy/utils.py @@ -0,0 +1,41 @@ +import logging +from multiprocessing.reduction import reduce_connection +import pickle + +logger = logging.getLogger('mopidy.utils') + +def flatten(the_list): + result = [] + for element in the_list: + if isinstance(element, list): + result.extend(flatten(element)) + else: + result.append(element) + return result + +def get_class(name): + module_name = name[:name.rindex('.')] + class_name = name[name.rindex('.') + 1:] + logger.info('Loading: %s', name) + module = __import__(module_name, globals(), locals(), [class_name], -1) + class_object = getattr(module, class_name) + return class_object + +def indent(string, places=4, linebreak='\n'): + lines = string.split(linebreak) + if len(lines) == 1: + return string + result = u'' + for line in lines: + result += linebreak + ' ' * places + line + return result + +def pickle_connection(connection): + return pickle.dumps(reduce_connection(connection)) + +def unpickle_connection(pickled_connection): + # From http://stackoverflow.com/questions/1446004 + unpickled = pickle.loads(pickled_connection) + func = unpickled[0] + args = unpickled[1] + return func(*args)