album.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import demixed.utils
  2. from generic.album import Album
  3. import demixed.track
  4. import demixed.artist
  5. class DeezerAlbum(Album):
  6. def set_raw_data(self, raw_data):
  7. is_page = "ALB_ID" not in raw_data
  8. album_data = raw_data["DATA"] if is_page else raw_data
  9. songs_data = raw_data["SONGS"]["data"] if is_page else album_data["SONGS"]["data"]
  10. return self.set_values(
  11. album_id = album_data["ALB_ID"],
  12. title = album_data["ALB_TITLE"],
  13. date = album_data["PHYSICAL_RELEASE_DATE"],
  14. picture_url = demixed.utils.ALBUM_PICTURES_URL % album_data["ALB_PICTURE"],
  15. picture_thumbnail_url = demixed.utils.ALBUM_PICTURES_URL_THUMBNAIL % album_data["ALB_PICTURE"],
  16. artists = list(map(
  17. lambda a: demixed.artist.DeezerArtist.grab_or_create(
  18. a["ART_ID"],
  19. artist_id = a["ART_ID"],
  20. name = a["ART_NAME"],
  21. picture_url = demixed.utils.ARTIST_PICTURES_URL % a["ART_PICTURE"]
  22. ),
  23. album_data["ARTISTS"]
  24. )),
  25. songs = list(map(
  26. lambda s: demixed.track.DeezerTrack.grab_or_create(
  27. s["SNG_ID"],
  28. raw_data = s
  29. ),
  30. songs_data
  31. )),
  32. is_full = True
  33. )
  34. def set_values(
  35. self,
  36. album_id = None,
  37. title = None,
  38. date = None,
  39. picture_url = None,
  40. picture_thumbnail_url = None,
  41. artists = None,
  42. songs = None,
  43. is_full = False, # if the album is fully loaded
  44. raw_data = None
  45. ):
  46. if raw_data != None:
  47. self.set_raw_data(raw_data)
  48. return
  49. self.album_id = album_id
  50. self.title = title
  51. self.date = date
  52. self.picture_url = picture_url
  53. self.picture_thumbnail_url = picture_thumbnail_url
  54. self.artists = artists
  55. self.songs = songs
  56. if self.songs != None:
  57. for song in self.songs:
  58. song.album = self
  59. self.is_full = is_full
  60. def get_full_data(self, deezer_instance):
  61. if not self.is_full:
  62. raw_data = deezer_instance.get_album_data(self.album_id)
  63. self.set_raw_data(raw_data)
  64. if self.artists != None:
  65. for artist in self.artists:
  66. if not artist.is_full:
  67. artist.get_full_data(deezer_instance)
  68. if self.songs != None:
  69. for song in self.songs:
  70. if not song.is_full:
  71. song.get_full_data(deezer_instance)