def create_or_update_numu_release(mb_release): """Parse an MB release and turn it into a release object. Returns (unsaved) release object.""" numu_date = get_numu_date(mb_release.get('first-release-date')) if numu_date is None or mb_release.get('artist-credit') is None: return None release = get_numu_release(mb_release.get('id')) if release is None: release = Release() release.mbid = mb_release.get('id') release.title = mb_release.get('title') release.type = get_numu_type(mb_release) release.date_release = numu_date release.artists_string = mb_release.get('artist-credit-phrase') release.date_updated = func.now() db.session.add(release) db.session.commit() for mb_artist in mb_release.get('artist-credit'): if type(mb_artist) == dict and mb_artist['artist']: artist = get_numu_artist_by_mbid(mb_artist['artist']['id']) if artist is None: artist = add_numu_artist_from_mb( artist_mbid=mb_artist['artist']['id']) if artist and artist not in release.artists: release.artists.append(artist) db.session.add(release) db.session.commit() return release