[docs]@classmethodasyncdefget_or_create(cls,track:Track,)->TrackRow:asyncwith_LOCK:try:kwargs={TrackRow.identifier:track.info.identifier,TrackRow.sourceName:track.info.sourceName,TrackRow.title:track.info.title,TrackRow.uri:track.info.uri,TrackRow.isrc:track.info.isrc,TrackRow.encoded:track.encoded,TrackRow.artworkUrl:track.info.artworkUrl,TrackRow.info:track.info.to_dict(),TrackRow.pluginInfo:track.pluginInfo.to_dict()iftrack.pluginInfoelseNone,}track=awaitcls.objects().get_or_create(cls.encoded==track.encoded,kwargs)if(nottrack._was_created)and((track.infoisNoneandkwargs.get(cls.info._meta.db_column_name))or(track.pluginInfoisNoneandkwargs.get(cls.pluginInfo._meta.db_column_name))):awaitcls.update({k._meta.db_column_name:vfork,vinkwargs.items()}).where(cls.encoded==track.encoded)returntrackexceptUniqueViolationError:obj=cls(encoded=track.encoded,**{k._meta.db_column_name:vfork,vinkwargs.items()})obj._exists_in_db=TruereturnobjexceptExceptionase:LOGGER.trace("Error while creating track: %s",e,exc_info=True)raisee