def from_string(input_str): pattern = r'(?P<name>' + Artist.__field + r') ' + \ r'\((?P<country>' + Artist.__field + r')\)' + \ r'\n---Dicography---\n(?P<albums>.*)' match = re.search(pattern, input_str, re.DOTALL) if not match: raise ValueError() name = match.group('name') country = match.group('country') albums = match.group('albums') artist = Artist(name, country) for a in albums.split('\n---\n'): if a.strip(): artist.add_album(Album.from_string(a)) return artist
def test_to_and_from_str_empty(self): album = Album('album title', 2020) assert Album.from_string(str(album)) == album
def test_to_and_from_str_single_track(self): album = Album('album title', 2020) album.add(Song('song title')) assert Album.from_string(str(album)) == album
def test_to_and_from_str_multiple_tracks(self): album = Album('album title', 2020) album.add(Song('first song title')) album.add(Song('second song title')) de = Album.from_string(str(album)) assert Album.from_string(str(album)) == album