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]
Пример #2
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"
Пример #4
0
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)
Пример #5
0
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