mpd: Install new commands helpers in _call_handler

This means we now tokenize every request, and then try in call the appropriate
handler. If none is found we simply fall back to the old handlers.
This commit is contained in:
Thomas Adamcik 2014-01-22 22:44:40 +01:00
parent 066fed1522
commit d3db5c4fe1
2 changed files with 16 additions and 4 deletions

View File

@ -5,7 +5,7 @@ import re
import pykka
from mopidy.mpd import exceptions, protocol
from mopidy.mpd import exceptions, protocol, tokenize
logger = logging.getLogger(__name__)
@ -164,6 +164,15 @@ class MpdDispatcher(object):
raise exceptions.MpdSystemError(e)
def _call_handler(self, request):
tokens = tokenize.split(request)
try:
return protocol.commands.call(tokens, context=self.context)
except exceptions.MpdAckError as exc:
if exc.command is None:
exc.command = tokens[0]
raise
except LookupError:
pass # Command has not been converted, i.e. fallback...
(command_name, handler, kwargs) = self._find_handler(request)
try:
return handler(self.context, **kwargs)

View File

@ -150,7 +150,10 @@ class Commands(object):
def call(self, args, context=None):
if not args:
raise TypeError('No args provided')
command = args.pop(0)
if command not in self.handlers:
if args[0] not in self.handlers:
raise LookupError('Unknown command')
return self.handlers[command](context, *args)
return self.handlers[args[0]](context, *args[1:])
#: Global instance to install commands into
commands = Commands()