Merge pull request #107 from hugovk/master
Fix comparison with None; fix tests; use Docker; badges
This commit is contained in:
commit
f74451a9af
|
@ -1,15 +1,22 @@
|
||||||
language: python
|
language: python
|
||||||
|
|
||||||
python:
|
python:
|
||||||
- "2.7"
|
- "2.7"
|
||||||
- "3.3"
|
- "3.3"
|
||||||
- "3.4"
|
- "3.4"
|
||||||
- "pypy"
|
- "pypy"
|
||||||
|
|
||||||
|
sudo: false
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- pip install -r test_requirements.txt
|
- pip install -r test_requirements.txt
|
||||||
- pip install coveralls
|
- pip install coveralls
|
||||||
|
|
||||||
script: coverage run --source=pylast ./test_pylast.py
|
script: coverage run --source=pylast ./test_pylast.py
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
coveralls
|
coveralls
|
||||||
|
|
||||||
after_script:
|
after_script:
|
||||||
- coverage report
|
- coverage report
|
||||||
- ./check.sh
|
- ./check.sh
|
||||||
|
@ -17,6 +24,7 @@ after_script:
|
||||||
- clonedigger pylast.py
|
- clonedigger pylast.py
|
||||||
- grep "Clones detected" output.html
|
- grep "Clones detected" output.html
|
||||||
- grep "lines are duplicates" output.html
|
- grep "lines are duplicates" output.html
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- secure: ivg6II471E9HV8xyqnawLIuP/sZ0J63Y+BC0BQcRVKtLn/K3zmD1ozM3TFL9S549Nxd0FqDKHXJvXsgaTGIDpK8sxE2AMKV5IojyM0iAVuN7YjPK9vwSlRw1u0EysPMFqxOZVQnoDyHrSGIUrP/VMdnhBu6dbUX0FyEkvZshXhY=
|
- secure: ivg6II471E9HV8xyqnawLIuP/sZ0J63Y+BC0BQcRVKtLn/K3zmD1ozM3TFL9S549Nxd0FqDKHXJvXsgaTGIDpK8sxE2AMKV5IojyM0iAVuN7YjPK9vwSlRw1u0EysPMFqxOZVQnoDyHrSGIUrP/VMdnhBu6dbUX0FyEkvZshXhY=
|
||||||
|
@ -28,3 +36,4 @@ matrix:
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- python: "3.4"
|
- python: "3.4"
|
||||||
- python: "pypy"
|
- python: "pypy"
|
||||||
|
fast_finish: true
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
pyLast
|
pyLast
|
||||||
======
|
======
|
||||||
|
|
||||||
[](https://travis-ci.org/pylast/pylast) [](https://pypi.python.org/pypi/pylast/) [](https://pypi.python.org/pypi/pylast/) [](https://coveralls.io/r/pylast/pylast?branch=master)
|
[](https://travis-ci.org/pylast/pylast) [](https://pypi.python.org/pypi/pylast/) [](https://pypi.python.org/pypi/pylast/) [](https://coveralls.io/r/pylast/pylast?branch=master) [](https://scrutinizer-ci.com/g/hugovk/pylast/?branch=master) [](https://landscape.io/github/hugovk/pylast/master)
|
||||||
|
|
||||||
|
|
||||||
A Python interface to [Last.fm](http://www.last.fm/) and other api-compatible websites such as [Libre.fm](http://libre.fm/).
|
A Python interface to [Last.fm](http://www.last.fm/) and other api-compatible websites such as [Libre.fm](http://libre.fm/).
|
||||||
|
|
27
pylast.py
27
pylast.py
|
@ -4,6 +4,7 @@
|
||||||
# A Python interface to Last.fm (and other API compatible social networks)
|
# A Python interface to Last.fm (and other API compatible social networks)
|
||||||
#
|
#
|
||||||
# Copyright 2008-2010 Amr Hassan
|
# Copyright 2008-2010 Amr Hassan
|
||||||
|
# Copyright 2013-2014 hugovk
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
|
@ -20,8 +21,8 @@
|
||||||
# http://code.google.com/p/pylast/
|
# http://code.google.com/p/pylast/
|
||||||
|
|
||||||
__version__ = '1.0.0'
|
__version__ = '1.0.0'
|
||||||
__author__ = 'Amr Hassan'
|
__author__ = 'Amr Hassan, hugovk'
|
||||||
__copyright__ = "Copyright (C) 2008-2010 Amr Hassan"
|
__copyright__ = "Copyright (C) 2008-2010 Amr Hassan, 2013-2014 hugovk"
|
||||||
__license__ = "apache2"
|
__license__ = "apache2"
|
||||||
__email__ = 'amr.hassan@gmail.com'
|
__email__ = 'amr.hassan@gmail.com'
|
||||||
|
|
||||||
|
@ -1759,13 +1760,7 @@ class _Opus(_BaseObject, _Taggable):
|
||||||
return (a == b) and (c == d)
|
return (a == b) and (c == d)
|
||||||
|
|
||||||
def __ne__(self, other):
|
def __ne__(self, other):
|
||||||
if type(self) != type(other):
|
return not self.__eq__(other)
|
||||||
return True
|
|
||||||
a = self.get_title().lower()
|
|
||||||
b = other.get_title().lower()
|
|
||||||
c = self.get_artist().get_name().lower()
|
|
||||||
d = other.get_artist().get_name().lower()
|
|
||||||
return (a != b) or (c != d)
|
|
||||||
|
|
||||||
def _get_params(self):
|
def _get_params(self):
|
||||||
return {
|
return {
|
||||||
|
@ -1919,10 +1914,13 @@ class Artist(_BaseObject, _Taggable):
|
||||||
return self.get_name()
|
return self.get_name()
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return self.get_name().lower() == other.get_name().lower()
|
if type(self) is type(other):
|
||||||
|
return self.get_name().lower() == other.get_name().lower()
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def __ne__(self, other):
|
def __ne__(self, other):
|
||||||
return self.get_name().lower() != other.get_name().lower()
|
return not self.__eq__(other)
|
||||||
|
|
||||||
def _get_params(self):
|
def _get_params(self):
|
||||||
return {self.ws_prefix: self.get_name()}
|
return {self.ws_prefix: self.get_name()}
|
||||||
|
@ -2137,10 +2135,13 @@ class Event(_BaseObject):
|
||||||
return "Event #" + str(self.get_id())
|
return "Event #" + str(self.get_id())
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return self.get_id() == other.get_id()
|
if type(self) is type(other):
|
||||||
|
return self.get_id() == other.get_id()
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def __ne__(self, other):
|
def __ne__(self, other):
|
||||||
return self.get_id() != other.get_id()
|
return not self.__eq__(other)
|
||||||
|
|
||||||
def _get_params(self):
|
def _get_params(self):
|
||||||
return {'event': self.get_id()}
|
return {'event': self.get_id()}
|
||||||
|
|
3
setup.py
3
setup.py
|
@ -27,7 +27,8 @@ setup(
|
||||||
name="pylast",
|
name="pylast",
|
||||||
version="1.0." + get_build(),
|
version="1.0." + get_build(),
|
||||||
author="Amr Hassan <amr.hassan@gmail.com>",
|
author="Amr Hassan <amr.hassan@gmail.com>",
|
||||||
description="A Python interface to Last.fm (and other API compatible social networks)",
|
description=("A Python interface to Last.fm "
|
||||||
|
"(and other API compatible social networks)"),
|
||||||
author_email="amr.hassan@gmail.com",
|
author_email="amr.hassan@gmail.com",
|
||||||
url="https://github.com/pylast/pylast",
|
url="https://github.com/pylast/pylast",
|
||||||
classifiers=[
|
classifiers=[
|
||||||
|
|
|
@ -377,7 +377,7 @@ class TestPyLast(unittest.TestCase):
|
||||||
def test_artist_is_hashable(self):
|
def test_artist_is_hashable(self):
|
||||||
# Arrange
|
# Arrange
|
||||||
test_artist = self.network.get_artist("Test Artist")
|
test_artist = self.network.get_artist("Test Artist")
|
||||||
artist = test_artist.get_similar(limit=1)[0].item
|
artist = test_artist.get_similar(limit=2)[0].item
|
||||||
self.assertIsInstance(artist, pylast.Artist)
|
self.assertIsInstance(artist, pylast.Artist)
|
||||||
|
|
||||||
# Act/Assert
|
# Act/Assert
|
||||||
|
@ -863,7 +863,8 @@ class TestPyLast(unittest.TestCase):
|
||||||
self.assertEqual(len(events), 1)
|
self.assertEqual(len(events), 1)
|
||||||
event = events[0]
|
event = events[0]
|
||||||
self.assertIsInstance(event, pylast.Event)
|
self.assertIsInstance(event, pylast.Event)
|
||||||
self.assertEqual(event.get_venue().location['city'], "London")
|
self.assertIn(event.get_venue().location['city'],
|
||||||
|
["London", "Camden"])
|
||||||
|
|
||||||
def test_geo_get_events_in_latlong(self):
|
def test_geo_get_events_in_latlong(self):
|
||||||
# Arrange
|
# Arrange
|
||||||
|
@ -1213,7 +1214,7 @@ class TestPyLast(unittest.TestCase):
|
||||||
self.helper_dates_valid(dates)
|
self.helper_dates_valid(dates)
|
||||||
|
|
||||||
# Act/Assert
|
# Act/Assert
|
||||||
self.helper_get_assert_charts(tag, dates[-1])
|
self.helper_get_assert_charts(tag, dates[-2])
|
||||||
|
|
||||||
def test_user_charts(self):
|
def test_user_charts(self):
|
||||||
# Arrange
|
# Arrange
|
||||||
|
@ -1222,7 +1223,7 @@ class TestPyLast(unittest.TestCase):
|
||||||
self.helper_dates_valid(dates)
|
self.helper_dates_valid(dates)
|
||||||
|
|
||||||
# Act/Assert
|
# Act/Assert
|
||||||
self.helper_get_assert_charts(lastfm_user, dates[-1])
|
self.helper_get_assert_charts(lastfm_user, dates[1])
|
||||||
|
|
||||||
def test_track_top_fans(self):
|
def test_track_top_fans(self):
|
||||||
# Arrange
|
# Arrange
|
||||||
|
@ -1818,6 +1819,56 @@ class TestPyLast(unittest.TestCase):
|
||||||
# Act / Assert
|
# Act / Assert
|
||||||
self.assertTrue(track1 != track2)
|
self.assertTrue(track1 != track2)
|
||||||
|
|
||||||
|
def test_artist_eq_none_is_false(self):
|
||||||
|
# Arrange
|
||||||
|
artist1 = None
|
||||||
|
artist2 = pylast.Artist("Test Artist", self.network)
|
||||||
|
|
||||||
|
# Act / Assert
|
||||||
|
self.assertFalse(artist1 == artist2)
|
||||||
|
|
||||||
|
def test_artist_ne_none_is_true(self):
|
||||||
|
# Arrange
|
||||||
|
artist1 = None
|
||||||
|
artist2 = pylast.Artist("Test Artist", self.network)
|
||||||
|
|
||||||
|
# Act / Assert
|
||||||
|
self.assertTrue(artist1 != artist2)
|
||||||
|
|
||||||
|
def test_album_eq_none_is_false(self):
|
||||||
|
# Arrange
|
||||||
|
album1 = None
|
||||||
|
album2 = pylast.Album("Test Artist", "Test Album", self.network)
|
||||||
|
|
||||||
|
# Act / Assert
|
||||||
|
self.assertFalse(album1 == album2)
|
||||||
|
|
||||||
|
def test_album_ne_none_is_true(self):
|
||||||
|
# Arrange
|
||||||
|
album1 = None
|
||||||
|
album2 = pylast.Album("Test Artist", "Test Album", self.network)
|
||||||
|
|
||||||
|
# Act / Assert
|
||||||
|
self.assertTrue(album1 != album2)
|
||||||
|
|
||||||
|
def test_event_eq_none_is_false(self):
|
||||||
|
# Arrange
|
||||||
|
event1 = None
|
||||||
|
event_id = 3478520 # Glasto 2014
|
||||||
|
event2 = pylast.Event(event_id, self.network)
|
||||||
|
|
||||||
|
# Act / Assert
|
||||||
|
self.assertFalse(event1 == event2)
|
||||||
|
|
||||||
|
def test_event_ne_none_is_true(self):
|
||||||
|
# Arrange
|
||||||
|
event1 = None
|
||||||
|
event_id = 3478520 # Glasto 2014
|
||||||
|
event2 = pylast.Event(event_id, self.network)
|
||||||
|
|
||||||
|
# Act / Assert
|
||||||
|
self.assertTrue(event1 != event2)
|
||||||
|
|
||||||
def test_band_members(self):
|
def test_band_members(self):
|
||||||
# Arrange
|
# Arrange
|
||||||
artist = pylast.Artist("The Beatles", self.network)
|
artist = pylast.Artist("The Beatles", self.network)
|
||||||
|
|
Loading…
Reference in a new issue