def test_songData(test_params): input_song_link = test_params["link"] expectation = test_params["expectation"] print("\n") print(input_song_link) if expectation is Expected.NO_METADATA_FOUND: song_data = SongData(input_song_link) print(song_data) assert song_data.track is None assert len(song_data.artists) == 0 assert song_data.extraAttrs is not None assert song_data.extraAttrs["youtube"]["views"] is not None assert song_data.extraAttrs["youtube"]["posted_date"] is not None elif expectation is Expected.VIDEO_UNABAILABLE_TO_PARSER: with pytest.raises(ValueError, match="Error while parsing YouTube page"): song_data = SongData(input_song_link) elif expectation is Expected.UNSUPPORTED_LINK: with pytest.raises(ValueError, match="Unsupported URL!"): song_data = SongData(input_song_link) elif expectation is Expected.VIDEO_UNAVAILABLE: with pytest.raises(ValueError, match="Unable to fetch metadata for input link"): song_data = SongData(input_song_link) else: song_data = SongData(input_song_link) expected_data = test_params["result"] print(song_data) assert song_data is not None track = song_data.track artists = song_data.artists assert track.name == expected_data["name"] assert artists[0].name == expected_data["artists"][0]
def insert_metadata(raw_data): url = raw_data.get("link") if url: with session_scope() as session: try: data = SongData(url) # This is a placeholder for until we can fetch real user details user = _insert_default_user(session) new_link = _insert_post(url, user, data.extraAttrs, raw_data, session) if new_link: if data.track and data.artists: new_song = _insert_song(data.track, session) new_link.song_id = new_song.id for artist_data in data.artists: new_artist = _insert_artist(artist_data, session) _insert_artist_song(new_artist, new_song, session) _insert_song_genre(artist_data, new_song, session) else: new_song = _insert_song(data.extraAttrs, session) new_link.song_id = new_song.id except ServerNotFoundError as e: logger.error("Google API unreachable!") raise e except Exception as e: if str(e) == "Unsupported URL!" or str( e) == "Video unavailable!": logger.error(str(e)) logger.error(f"FB Post URL: {raw_data['id']}") raise e else: data = SongData(url) user = _insert_default_user(session) new_link = _insert_post(url, user, data.extraAttrs, raw_data, session)
def test_songData(): song_data = SongData("https://www.youtube.com/watch?v=XoYu7K6Ywkg") assert song_data is not None track = song_data.track artists = song_data.artists assert track.name == "Last Hope" assert artists[0].name == "Paramore"
def insert_metadata(raw_data): url = raw_data["link"] with session_scope() as session: data = SongData(url) # This is a placeholder for until we can fetch real user details user = _insert_default_user(session) new_link = _insert_post(url, user, raw_data, session) if new_link: new_song = _insert_song(data.track, session) new_link.song_id = new_song.id for artist_data in data.artists: new_artist = _insert_artist(artist_data, session) _insert_artist_song(new_artist, new_song, session)
def get_spotify_id(url): spotify_pattern = re.compile( r""" https?:\/\/open\.spotify\.com\/track\/(?P<id>[a-zA-Z0-9]+) """, re.VERBOSE) spotify_match = spotify_pattern.match(url) if spotify_match: return spotify_match.group("id") else: yt_pattern = re.compile( r""" (https?://)?(www\.)?(youtube|youtu|youtube-nocookie)\. (com|be)/(watch\?v=|embed/|v/|.+\?v=)? (?P<id>[A-Za-z0-9\-=_]{11})""", re.VERBOSE, ) yt_match = yt_pattern.match(url) if (yt_match): data = SongData(url) if data.track: return data.track.provider_id