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