local: Add local_uri_to_file_uri()

Which replaces local_track_uri_to_file_uri() and also handles
local:directory: URIs.
This commit is contained in:
Stein Magnus Jodal 2015-05-08 00:33:13 +02:00
parent e30cd2cfa5
commit 4d5b485760
2 changed files with 80 additions and 3 deletions

View File

@ -12,16 +12,25 @@ logger = logging.getLogger(__name__)
def local_uri_to_file_uri(uri, media_dir):
return path.path_to_uri(local_track_uri_to_path(uri, media_dir))
"""Convert local track or directory URI to file URI."""
return path.path_to_uri(local_uri_to_path(uri, media_dir))
def local_track_uri_to_path(uri, media_dir):
if not uri.startswith('local:track:'):
def local_uri_to_path(uri, media_dir):
"""Convert local track or directory URI to absolute path."""
if (
not uri.startswith('local:directory:') and
not uri.startswith('local:track:')):
raise ValueError('Invalid URI.')
file_path = path.uri_to_path(uri).split(b':', 1)[1]
return os.path.join(media_dir, file_path)
def local_track_uri_to_path(uri, media_dir):
# Deprecated version to keep old versions of Mopidy-Local-Sqlite working.
return local_uri_to_path(uri, media_dir)
def path_to_local_track_uri(relpath):
"""Convert path relative to media_dir to local track URI."""
if isinstance(relpath, compat.text_type):

View File

@ -0,0 +1,68 @@
# encoding: utf-8
from __future__ import unicode_literals
import pytest
from mopidy.local import translator
@pytest.mark.parametrize('local_uri,file_uri', [
('local:directory:A/B', 'file:///home/alice/Music/A/B'),
('local:directory:A%20B', 'file:///home/alice/Music/A%20B'),
('local:directory:A+B', 'file:///home/alice/Music/A%2BB'),
(
'local:directory:%C3%A6%C3%B8%C3%A5',
'file:///home/alice/Music/%C3%A6%C3%B8%C3%A5'),
('local:track:A/B.mp3', 'file:///home/alice/Music/A/B.mp3'),
('local:track:A%20B.mp3', 'file:///home/alice/Music/A%20B.mp3'),
('local:track:A+B.mp3', 'file:///home/alice/Music/A%2BB.mp3'),
(
'local:track:%C3%A6%C3%B8%C3%A5.mp3',
'file:///home/alice/Music/%C3%A6%C3%B8%C3%A5.mp3'),
])
def test_local_uri_to_file_uri(local_uri, file_uri):
media_dir = b'/home/alice/Music'
assert translator.local_uri_to_file_uri(local_uri, media_dir) == file_uri
@pytest.mark.parametrize('uri', [
'A/B',
'local:foo:A/B',
])
def test_local_uri_to_file_uri_errors(uri):
media_dir = b'/home/alice/Music'
with pytest.raises(ValueError):
translator.local_uri_to_file_uri(uri, media_dir)
@pytest.mark.parametrize('uri,path', [
('local:directory:A/B', b'/home/alice/Music/A/B'),
('local:directory:A%20B', b'/home/alice/Music/A B'),
('local:directory:A+B', b'/home/alice/Music/A+B'),
('local:directory:%C3%A6%C3%B8%C3%A5', b'/home/alice/Music/æøå'),
('local:track:A/B.mp3', b'/home/alice/Music/A/B.mp3'),
('local:track:A%20B.mp3', b'/home/alice/Music/A B.mp3'),
('local:track:A+B.mp3', b'/home/alice/Music/A+B.mp3'),
('local:track:%C3%A6%C3%B8%C3%A5.mp3', b'/home/alice/Music/æøå.mp3'),
])
def test_local_uri_to_path(uri, path):
media_dir = b'/home/alice/Music'
assert translator.local_uri_to_path(uri, media_dir) == path
# Legacy version to keep old versions of Mopidy-Local-Sqlite working
assert translator.local_track_uri_to_path(uri, media_dir) == path
@pytest.mark.parametrize('uri', [
'A/B',
'local:foo:A/B',
])
def test_local_uri_to_path_errors(uri):
media_dir = b'/home/alice/Music'
with pytest.raises(ValueError):
translator.local_uri_to_path(uri, media_dir)