LyricsGenius icon indicating copy to clipboard operation
LyricsGenius copied to clipboard

Album.release_date should be a datetime object, not Album.release_date_components

Open allerter opened this issue 3 years ago β€’ 0 comments

This occurred to me when I first saw #182. Looking at the Album attributes got me thinking. The album dict already has a release_date key alongside the release_date_components. I don't know why I chose to use release_date_components instead because release_date is just what we need for converting the release date to a datetime type. We should've used release_date for three reasons:

  1. release_date_components has the accurate date; if the release date has no month or day, its value will just be None. But that's not the case for release_date. The release_date value will display what it has and replaces what it doesn't with 01, just how Python does in datetime objects!
  2. We should convert release_date to datetime to offer a convenient way for accessing the date. And we should keep release_date_compnents as it is for users who want an accurate date.
  3. Converting release_date to datetime is easy; it's either None or a string with the %Y-%m-%d format.

To sum up, this is how we should've created Album objects:

def __init__(self, client, json_dict, tracks):
    body = json_dict
    ...
    self.release_date = convert_to_datetime(body["release_date_components"])
    self.release_date_components = body['release_date_components']
    ...

This will be a breaking change and we should hold off on changing Album.release_date_components till v4.

allerter avatar Apr 25 '21 12:04 allerter