Skip to content

Commit

Permalink
Release v2.0.2
Browse files Browse the repository at this point in the history
  • Loading branch information
jodal committed Jan 19, 2016
2 parents c566175 + 830d757 commit 3d9aa6b
Show file tree
Hide file tree
Showing 8 changed files with 1,083 additions and 22 deletions.
13 changes: 5 additions & 8 deletions .gitignore
@@ -1,13 +1,10 @@
*.egg-info
*.pyc
MANIFEST
.tox
*.swp
/_projects
.cache/
.coverage
.tox/
MANIFEST
build/
.idea/
dist/
xunit-*.xml
*.egg-info
/_builds
.coverage
/_steps
1 change: 1 addition & 0 deletions .mailmap
@@ -1,2 +1,3 @@
Janez Troha <dz0ny@ubuntu.si>
Janez Troha <dz0ny@ubuntu.si> <dz0ny@users.noreply.github.com>
John Cass <john.cass77@gmail.com>
9 changes: 8 additions & 1 deletion README.rst
Expand Up @@ -72,12 +72,19 @@ Project resources

- `Source code <https://github.com/mopidy/mopidy-youtube>`_
- `Issue tracker <https://github.com/mopidy/mopidy-youtube/issues>`_
- `Download development snapshot <https://github.com/mopidy/mopidy-youtube/archive/develop.tar.gz#egg=Mopidy-Youtube-dev>`_


Changelog
=========

v2.0.2 (2016-01-19)
-------------------

- Fix resolving of ``youtube:video`` URIs when looking up tracks. (Fixes: #21,
PR: #50)

- Ensure ``None`` doesn't get includes in track image lists. (PR: #48)

v2.0.1 (2015-08-19)
-------------------

Expand Down
2 changes: 1 addition & 1 deletion mopidy_youtube/__init__.py
Expand Up @@ -6,7 +6,7 @@
from mopidy import config, ext


__version__ = '2.0.1'
__version__ = '2.0.2'

logger = logging.getLogger(__name__)

Expand Down
24 changes: 16 additions & 8 deletions mopidy_youtube/backend.py
Expand Up @@ -23,6 +23,9 @@
yt_key = 'AIzaSyAl1Xq9DwdE_KD4AtPaE4EJl3WZe2zCqg4'
session = requests.Session()

video_uri_prefix = 'youtube:video'
search_uri = 'youtube:search'


def resolve_track(track, stream=False):
logger.debug("Resolving YouTube for track '%s'", track)
Expand All @@ -49,9 +52,8 @@ def resolve_url(url, stream=False):
try:
video = pafy.new(url)
if not stream:
uri = 'youtube:video/%s.%s' % (
safe_url(video.title), video.videoid
)
uri = '%s/%s.%s' % (
video_uri_prefix, safe_url(video.title), video.videoid)
else:
uri = video.getbestaudio()
if not uri: # get video url
Expand All @@ -66,13 +68,19 @@ def resolve_url(url, stream=False):
logger.info(e.message)
return

images = []
if video.bigthumb is not None:
images.append(video.bigthumb)
if video.bigthumbhd is not None:
images.append(video.bigthumbhd)

track = Track(
name=video.title,
comment=video.videoid,
length=video.length * 1000,
album=Album(
name='YouTube',
images=[video.bigthumb, video.bigthumbhd]
images=images
),
uri=uri
)
Expand Down Expand Up @@ -151,7 +159,7 @@ def lookup(self, track):
else:
return [item for item in [resolve_url(track)] if item]
else:
return [item for item in [resolve_url(track)] if item]
return [item for item in [resolve_track(track)] if item]

def search(self, query=None, uris=None, exact=False):
# TODO Support exact search
Expand All @@ -166,21 +174,21 @@ def search(self, query=None, uris=None, exact=False):
req = parse_qs(url.query)
if 'list' in req:
return SearchResult(
uri='youtube:search',
uri=search_uri,
tracks=resolve_playlist(req.get('list')[0])
)
else:
logger.info(
"Resolving YouTube for track '%s'", search_query)
return SearchResult(
uri='youtube:search',
uri=search_uri,
tracks=[t for t in [resolve_url(search_query)] if t]
)
else:
search_query = ' '.join(query.values()[0])
logger.info("Searching YouTube for query '%s'", search_query)
return SearchResult(
uri='youtube:search',
uri=search_uri,
tracks=search_youtube(search_query)
)

Expand Down
1,023 changes: 1,023 additions & 0 deletions tests/fixtures/lookup_video_uri.yaml

Large diffs are not rendered by default.

30 changes: 28 additions & 2 deletions tests/test_backend.py
Expand Up @@ -9,6 +9,7 @@
import vcr

from mopidy_youtube import backend
from mopidy_youtube.backend import YouTubeLibraryProvider


@pytest.yield_fixture
Expand Down Expand Up @@ -47,7 +48,7 @@ def test_search_yt(pafy_mock_with_video):

@vcr.use_cassette('tests/fixtures/resolve_track.yaml')
def test_resolve_track(pafy_mock_with_video):
video = backend.resolve_track('TU3b1qyEGsE')
video = backend.resolve_track('C0DPdy98e4c')

assert video

Expand All @@ -63,6 +64,31 @@ def test_resolve_track_failed(pafy_mock):

@vcr.use_cassette('tests/fixtures/resolve_track_stream.yaml')
def test_resolve_track_stream(pafy_mock_with_video):
video = backend.resolve_track('TU3b1qyEGsE', stream=True)
video = backend.resolve_track('C0DPdy98e4c', stream=True)

assert video


@vcr.use_cassette('tests/fixtures/resolve_video_track_stream.yaml')
def test_resolve_video_track_stream(pafy_mock_with_video):
video = backend.resolve_track('youtube:video/a title.a video id',
stream=True)

assert video
assert video.uri == "http://example.com/"


@vcr.use_cassette('tests/fixtures/lookup_video_uri.yaml')
def test_lookup_video_uri(caplog):
provider = YouTubeLibraryProvider(mock.PropertyMock())

track = provider.lookup(backend.video_uri_prefix +
'/a title.C0DPdy98e4c')

assert 'Need 11 character video id or the URL of the video.' \
not in caplog.text()

assert track

assert track[0].uri == backend.video_uri_prefix + \
'/TEST VIDEO.C0DPdy98e4c'
3 changes: 1 addition & 2 deletions tox.ini
Expand Up @@ -6,13 +6,12 @@ sitepackages = true
# vcrpy tries to patch tornado, so if it is present, it must be recent.
deps =
mock
mopidy==dev
pytest
pytest-cov
pytest-capturelog
pytest-xdist
tornado >= 4
vcrpy
install_command = pip install --allow-unverified=mopidy --pre {opts} {packages}
commands =
py.test \
--basetemp={envtmpdir} \
Expand Down

0 comments on commit 3d9aa6b

Please sign in to comment.