playlists: Add urilist fallback parser

This commit is contained in:
Stein Magnus Jodal 2015-07-25 19:13:37 +02:00
parent 80adc100ae
commit ea2017c968
2 changed files with 38 additions and 1 deletions

View File

@ -7,6 +7,7 @@ pygst.require('0.10')
import gst # noqa
from mopidy.compat import configparser
from mopidy.internal import validation
try:
import xml.etree.cElementTree as elementtree
@ -24,7 +25,7 @@ def parse(data):
for detector, parser in handlers.items():
if detector(data):
return list(parser(data))
return []
return parse_urilist(data) # Fallback
def detect_extm3u_header(data):
@ -116,3 +117,16 @@ def parse_asx(data):
for entry in element.findall('entry[@href]'):
yield entry.get('href', '').strip()
def parse_urilist(data):
result = []
for line in data.splitlines():
if not line.strip() or line.startswith('#'):
continue
try:
validation.check_uri(line)
except ValueError:
return []
result.append(line)
return result

View File

@ -21,6 +21,14 @@ file:///tmp/bar
file:///tmp/baz
"""
URILIST = b"""
file:///tmp/foo
# a comment
file:///tmp/bar
file:///tmp/baz
"""
PLS = b"""[Playlist]
NumberOfEntries=3
File1=file:///tmp/foo
@ -84,6 +92,7 @@ EXPECTED = [b'file:///tmp/foo', b'file:///tmp/bar', b'file:///tmp/baz']
@pytest.mark.parametrize('data,result', [
(BAD, []),
(URILIST, EXPECTED),
(EXTM3U, EXPECTED),
(PLS, EXPECTED),
(ASX, EXPECTED),
@ -148,3 +157,17 @@ class XspfPlaylistTest(BasePlaylistTest, unittest.TestCase):
invalid = BAD
detect = staticmethod(playlists.detect_xspf_header)
parse = staticmethod(playlists.parse_xspf)
class UriListPlaylistTest(unittest.TestCase):
valid = URILIST
invalid = BAD
parse = staticmethod(playlists.parse_urilist)
def test_parse_valid_playlist(self):
uris = list(self.parse(self.valid))
self.assertEqual(uris, EXPECTED)
def test_parse_invalid_playlist(self):
uris = list(self.parse(self.invalid))
self.assertEqual(uris, [])