예제 #1
0
def clear_users_played_tracks(username):
    username = username.lower()
    user = User.get_by_key_name(username)
    users_played_tracks = PlayedTrack.all().ancestor(user)
    tracks_count = users_played_tracks.count()
    db.delete(users_played_tracks)
    reset_user_download_stats(user, 0, 0)

    logger.info('Deleted %s Tracks for %s' % (tracks_count, username))
    return "OK"
예제 #2
0
def clear_users_played_tracks(username):
    username = username.lower()
    user = User.get_by_key_name(username)
    users_played_tracks = PlayedTrack.all().ancestor(user)
    tracks_count = users_played_tracks.count()
    db.delete(users_played_tracks)
    reset_user_download_stats(user, 0, 0)

    logger.info('Deleted %s Tracks for %s' % (tracks_count, username))
    return "OK"
예제 #3
0
def clear_all():
    tracks = PlayedTrack.all()
    users = User.all()

    tracks_count = tracks.count()
    users_count = users.count()

    # delete data in bulk
    db.delete(tracks)
    db.delete(users)

    logger.info('Deleted %s Users and %s Tracks' % (tracks_count, users_count))
    return "OK"
예제 #4
0
def clear_all():
    tracks = PlayedTrack.all()
    users = User.all()

    tracks_count = tracks.count()
    users_count = users.count()

    # delete data in bulk
    db.delete(tracks)
    db.delete(users)

    logger.info('Deleted %s Users and %s Tracks' % (tracks_count, users_count))
    return "OK"
예제 #5
0
    def _generate_played_track(self, raw_track):
        track_id = raw_track['mbid']
        track_name = raw_track['name']
        timestamp = int(raw_track['date']['uts'])

        # generate a unique play id for this track play
        play_id = self._get_play_id(track_id, track_name, timestamp)

        return PlayedTrack(key_name=play_id,
                           parent=self.user,
                           artist_id=raw_track['artist'].get('mbid'),
                           artist_name=raw_track['artist']['#text'],
                           album_id=raw_track['album'].get('mbid'),
                           album_name=raw_track['album']['#text'],
                           track_id=track_id,
                           track_name=track_name,
                           timestamp=timestamp)
예제 #6
0
def get_played_tracks(username):
    username = username.lower()
    page_limit = int(request.args.get('page_limit', 5))
    include_ids = bool(request.args.get('include_ids', False))
    user = User.get_by_key_name(username)

    if not user:
        warning = "User %s doesn't exist" % username
        return warning, 404

    cache_key = "%s:%s:%s" % (username, user.downloaded_tracks, page_limit)
    cached_tracks = UserTracks.get_by_key_name(cache_key)
    if cached_tracks:
        logger.info("Found all tracks for %s" % username)
        return cached_tracks.all_tracks
    else:
        all_tracks_query = PlayedTrack.all()
        all_tracks_query.order('-timestamp')
        all_tracks_query.ancestor(user)
        all_tracks = []
        for track in all_tracks_query.run(limit=page_limit * 200):
            all_tracks.append(track.to_dict(include_ids=include_ids))

        response_data = json.dumps(all_tracks)

        if user.download_finished:
            logger.info("Finished downloading all tracks for %s. Caching" % username)
            cached_tracks = UserTracks(
                key_name=cache_key,
                username=username,
                all_tracks=response_data
            )
            try:
                cached_tracks.put()
            except:
                logger.exception("request was probably too large")
            
        return response_data
예제 #7
0
def get_played_tracks(username):
    username = username.lower()
    page_limit = int(request.args.get('page_limit', 5))
    include_ids = bool(request.args.get('include_ids', False))
    user = User.get_by_key_name(username)

    if not user:
        warning = "User %s doesn't exist" % username
        return warning, 404

    cache_key = "%s:%s:%s" % (username, user.downloaded_tracks, page_limit)
    cached_tracks = UserTracks.get_by_key_name(cache_key)
    if cached_tracks:
        logger.info("Found all tracks for %s" % username)
        return cached_tracks.all_tracks
    else:
        all_tracks_query = PlayedTrack.all()
        all_tracks_query.order('-timestamp')
        all_tracks_query.ancestor(user)
        all_tracks = []
        for track in all_tracks_query.run(limit=page_limit * 200):
            all_tracks.append(track.to_dict(include_ids=include_ids))

        response_data = json.dumps(all_tracks)

        if user.download_finished:
            logger.info("Finished downloading all tracks for %s. Caching" %
                        username)
            cached_tracks = UserTracks(key_name=cache_key,
                                       username=username,
                                       all_tracks=response_data)
            try:
                cached_tracks.put()
            except:
                logger.exception("request was probably too large")

        return response_data