views.py 文件源码

python
阅读 49 收藏 0 点赞 0 评论 0

项目:scrobbler 作者: hatarist 项目源码 文件源码
def scrobble():
    session_id, scrobbles = parse_scrobble_request(request.form)
    if not session_id:
        return api_response('BADREQUEST'), 400

    session = db.session.query(Session).filter(Session.session_id == session_id).first()

    for data in scrobbles:
        artist = db.session.query(Artist).filter(Artist.name == data['artist']).first()
        artist_id = None
        album_id = None

        if artist:
            artist_id = artist.id
            artist.local_playcount += 1

            album = db.session.query(Album).filter(
                Album.artist_id == artist_id,
                Album.name == data['album']
            ).first()

            if album:
                album_id = album.id
                album.local_playcount += 1

        # PG 9.5+: DO NOTHING if duplicate
        query = insert(Scrobble).values(
            user_id=session.user_id,
            token_id=session.token_id,
            played_at=data.pop('timestamp'),
            artist_id=artist_id,
            album_id=album_id,
            **data
        ).on_conflict_do_nothing(
            index_elements=['user_id', 'played_at', 'artist', 'track']
        )
        db.session.execute(query)
        # PG <9.5
        # scrobble = Scrobble(
        #     user_id=session.user_id,
        #     played_at=data.pop('timestamp'),
        #     artist_id=artist_id,
        #     **data
        # )
        # db.session.add(scrobble)

    db.session.commit()

    return api_response('OK')
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号