diff --git a/pylast/__init__.py b/pylast/__init__.py index f31be7b..67e1533 100644 --- a/pylast/__init__.py +++ b/pylast/__init__.py @@ -230,13 +230,6 @@ class _Network(object): return Country(country_name, self) - def get_metro(self, metro_name, country_name): - """ - Returns a metro object - """ - - return Metro(metro_name, country_name, self) - def get_user(self, username): """ Returns a user object @@ -332,46 +325,6 @@ class _Network(object): return seq - def get_metro_weekly_chart_dates(self, cacheable=True): - """ - Returns a list of From and To tuples for the available metro charts. - """ - - doc = _Request(self, "geo.getMetroWeeklyChartlist").execute(cacheable) - - seq = [] - for node in doc.getElementsByTagName("chart"): - seq.append((node.getAttribute("from"), node.getAttribute("to"))) - - return seq - - def get_metros(self, country=None, cacheable=True): - """ - Get a list of valid countries and metros for use in the other - webservices. - Parameters: - country (Optional) : Optionally restrict the results to those Metros - from a particular country, as defined by the ISO 3166-1 country - names standard. - """ - params = {} - - if country: - params["country"] = country - - doc = _Request(self, "geo.getMetros", params).execute(cacheable) - - metros = doc.getElementsByTagName("metro") - seq = [] - - for metro in metros: - name = _extract(metro, "name") - country = _extract(metro, "country") - - seq.append(Metro(name, country, self)) - - return seq - def get_geo_top_artists(self, country, limit=None, cacheable=True): """Get the most popular artists on Last.fm by country. Parameters: @@ -1912,169 +1865,6 @@ class Country(_BaseObject): domain_name, "country") % {'country_name': country_name} -class Metro(_BaseObject): - """A metro at Last.fm.""" - - name = None - country = None - - __hash__ = _BaseObject.__hash__ - - def __init__(self, name, country, network): - _BaseObject.__init__(self, network, None) - - self.name = name - self.country = country - - def __repr__(self): - return "pylast.Metro(%s, %s, %s)" % ( - repr(self.name), repr(self.country), repr(self.network)) - - @_string_output - def __str__(self): - return self.get_name() + ", " + self.get_country() - - def __eq__(self, other): - return (self.get_name().lower() == other.get_name().lower() and - self.get_country().lower() == other.get_country().lower()) - - def __ne__(self, other): - return (self.get_name() != other.get_name() or - self.get_country().lower() != other.get_country().lower()) - - def _get_params(self): - return {'metro': self.get_name(), 'country': self.get_country()} - - def get_name(self): - """Returns the metro name.""" - - return self.name - - def get_country(self): - """Returns the metro country.""" - - return self.country - - def _get_chart( - self, method, tag="artist", limit=None, from_date=None, - to_date=None, cacheable=True): - """Internal helper for getting geo charts.""" - params = self._get_params() - if limit: - params["limit"] = limit - if from_date and to_date: - params["from"] = from_date - params["to"] = to_date - - doc = self._request(method, cacheable, params) - - seq = [] - for node in doc.getElementsByTagName(tag): - if tag == "artist": - item = Artist(_extract(node, "name"), self.network) - elif tag == "track": - title = _extract(node, "name") - artist = _extract_element_tree(node).get('artist')['name'] - item = Track(artist, title, self.network) - else: - return None - weight = _number(_extract(node, "listeners")) - seq.append(TopItem(item, weight)) - - return seq - - def get_artist_chart( - self, tag="artist", limit=None, from_date=None, to_date=None, - cacheable=True): - """Get a chart of artists for a metro. - Parameters: - from_date (Optional) : Beginning timestamp of the weekly range - requested - to_date (Optional) : Ending timestamp of the weekly range requested - limit (Optional) : The number of results to fetch per page. - Defaults to 50. - """ - return self._get_chart( - "geo.getMetroArtistChart", tag=tag, limit=limit, - from_date=from_date, to_date=to_date, cacheable=cacheable) - - def get_hype_artist_chart( - self, tag="artist", limit=None, from_date=None, to_date=None, - cacheable=True): - """Get a chart of hyped (up and coming) artists for a metro. - Parameters: - from_date (Optional) : Beginning timestamp of the weekly range - requested - to_date (Optional) : Ending timestamp of the weekly range requested - limit (Optional) : The number of results to fetch per page. - Defaults to 50. - """ - return self._get_chart( - "geo.getMetroHypeArtistChart", tag=tag, limit=limit, - from_date=from_date, to_date=to_date, cacheable=cacheable) - - def get_unique_artist_chart( - self, tag="artist", limit=None, from_date=None, to_date=None, - cacheable=True): - """Get a chart of the artists which make that metro unique. - Parameters: - from_date (Optional) : Beginning timestamp of the weekly range - requested - to_date (Optional) : Ending timestamp of the weekly range requested - limit (Optional) : The number of results to fetch per page. - Defaults to 50. - """ - return self._get_chart( - "geo.getMetroUniqueArtistChart", tag=tag, limit=limit, - from_date=from_date, to_date=to_date, cacheable=cacheable) - - def get_track_chart( - self, tag="track", limit=None, from_date=None, to_date=None, - cacheable=True): - """Get a chart of tracks for a metro. - Parameters: - from_date (Optional) : Beginning timestamp of the weekly range - requested - to_date (Optional) : Ending timestamp of the weekly range requested - limit (Optional) : The number of results to fetch per page. - Defaults to 50. - """ - return self._get_chart( - "geo.getMetroTrackChart", tag=tag, limit=limit, - from_date=from_date, to_date=to_date, cacheable=cacheable) - - def get_hype_track_chart( - self, tag="track", limit=None, from_date=None, to_date=None, - cacheable=True): - """Get a chart of tracks for a metro. - Parameters: - from_date (Optional) : Beginning timestamp of the weekly range - requested - to_date (Optional) : Ending timestamp of the weekly range requested - limit (Optional) : The number of results to fetch per page. - Defaults to 50. - """ - return self._get_chart( - "geo.getMetroHypeTrackChart", tag=tag, - limit=limit, from_date=from_date, to_date=to_date, - cacheable=cacheable) - - def get_unique_track_chart( - self, tag="track", limit=None, from_date=None, to_date=None, - cacheable=True): - """Get a chart of tracks for a metro. - Parameters: - from_date (Optional) : Beginning timestamp of the weekly range - requested - to_date (Optional) : Ending timestamp of the weekly range requested - limit (Optional) : The number of results to fetch per page. - Defaults to 50. - """ - return self._get_chart( - "geo.getMetroUniqueTrackChart", tag=tag, limit=limit, - from_date=from_date, to_date=to_date, cacheable=cacheable) - - class Library(_BaseObject): """A user's Last.fm library.""" diff --git a/tests/test_pylast.py b/tests/test_pylast.py index 21671ff..0281631 100755 --- a/tests/test_pylast.py +++ b/tests/test_pylast.py @@ -260,13 +260,6 @@ class TestPyLast(unittest.TestCase): # Act/Assert self.helper_is_thing_hashable(country) - def test_metro_is_hashable(self): - # Arrange - metro = self.network.get_metro("Helsinki", "Finland") - - # Act/Assert - self.helper_is_thing_hashable(metro) - def test_library_is_hashable(self): # Arrange library = pylast.Library(user=self.username, network=self.network) @@ -578,67 +571,6 @@ class TestPyLast(unittest.TestCase): (start, end) = dates[0] self.assertLess(start, end) - def test_get_metro_weekly_chart_dates(self): - # Arrange - # Act - dates = self.network.get_metro_weekly_chart_dates() - - # Assert - self.helper_dates_valid(dates) - - def helper_geo_chart(self, function_name, expected_type=pylast.Artist): - # Arrange - metro = self.network.get_metro("Madrid", "Spain") - dates = self.network.get_metro_weekly_chart_dates() - (from_date, to_date) = dates[0] - - # get metro.function_name() - func = getattr(metro, function_name, None) - - # Act - chart = func(from_date=from_date, to_date=to_date, limit=1) - - # Assert - self.assertEqual(len(chart), 1) - self.assertIsInstance(chart[0], pylast.TopItem) - self.assertIsInstance(chart[0].item, expected_type) - - def test_get_metro_artist_chart(self): - # Arrange/Act/Assert - self.helper_geo_chart("get_artist_chart") - - def test_get_metro_hype_artist_chart(self): - # Arrange/Act/Assert - self.helper_geo_chart("get_hype_artist_chart") - - def test_get_metro_unique_artist_chart(self): - # Arrange/Act/Assert - self.helper_geo_chart("get_unique_artist_chart") - - def test_get_metro_track_chart(self): - # Arrange/Act/Assert - self.helper_geo_chart("get_track_chart", expected_type=pylast.Track) - - def test_get_metro_hype_track_chart(self): - # Arrange/Act/Assert - self.helper_geo_chart( - "get_hype_track_chart", expected_type=pylast.Track) - - def test_get_metro_unique_track_chart(self): - # Arrange/Act/Assert - self.helper_geo_chart( - "get_unique_track_chart", expected_type=pylast.Track) - - def test_geo_get_metros(self): - # Arrange - # Act - metros = self.network.get_metros(country="Poland") - - # Assert - self.assertGreaterEqual(len(metros), 1) - self.assertIsInstance(metros[0], pylast.Metro) - self.assertEqual(metros[0].get_country(), "Poland") - def test_geo_get_top_artists(self): # Arrange # Act @@ -661,20 +593,6 @@ class TestPyLast(unittest.TestCase): self.assertIsInstance(tracks[0], pylast.TopItem) self.assertIsInstance(tracks[0].item, pylast.Track) - def test_metro_class(self): - # Arrange - # Act - metro = self.network.get_metro("Bergen", "Norway") - - # Assert - self.assertEqual(metro.get_name(), "Bergen") - self.assertEqual(metro.get_country(), "Norway") - self.assertEqual(str(metro), "Bergen, Norway") - self.assertEqual(metro, pylast.Metro("Bergen", "Norway", self.network)) - self.assertNotEqual( - metro, - pylast.Metro("Wellington", "New Zealand", self.network)) - def helper_at_least_one_thing_in_top_list(self, things, expected_type): # Assert self.assertGreater(len(things), 1)