Example #1
0
    def test_get_events_for_feed_honors_count_parameter(self):
        db_user_timeline_event.create_user_track_recommendation_event(
            user_id=self.user['id'],
            metadata=RecordingRecommendationMetadata(
                track_name="Sunflower",
                artist_name="Swae Lee & Post Malone",
                recording_msid=str(uuid.uuid4()),
                artist_msid=str(uuid.uuid4()),
            ))
        db_user_timeline_event.create_user_track_recommendation_event(
            user_id=self.user['id'],
            metadata=RecordingRecommendationMetadata(
                track_name="Da Funk",
                artist_name="Daft Punk",
                recording_msid=str(uuid.uuid4()),
                artist_msid=str(uuid.uuid4()),
            ))

        events = db_user_timeline_event.get_recording_recommendation_events_for_feed(
            user_ids=(self.user['id'], ),
            min_ts=0,
            max_ts=int(time.time()) + 10,
            count=1,
        )

        # 2 events exist, should return only one, the one that is newer
        self.assertEqual(1, len(events))
        self.assertEqual('Da Funk', events[0].metadata.track_name)
Example #2
0
    def test_get_events_for_feed_returns_events(self):
        db_user_timeline_event.create_user_track_recommendation_event(
            user_id=self.user['id'],
            metadata=RecordingRecommendationMetadata(
                track_name="Sunflower",
                artist_name="Swae Lee & Post Malone",
                recording_msid=str(uuid.uuid4()),
                artist_msid=str(uuid.uuid4()),
            ))

        new_user = db_user.get_or_create(2, 'superman')
        db_user_timeline_event.create_user_track_recommendation_event(
            user_id=new_user['id'],
            metadata=RecordingRecommendationMetadata(
                track_name="Sunflower",
                artist_name="Swae Lee & Post Malone",
                recording_msid=str(uuid.uuid4()),
                artist_msid=str(uuid.uuid4()),
            ))

        events = db_user_timeline_event.get_recording_recommendation_events_for_feed(
            user_ids=(self.user['id'], new_user['id']),
            min_ts=0,
            max_ts=int(time.time()) + 10,
            count=50,
        )
        self.assertEqual(2, len(events))
        self.assertEqual(new_user['id'], events[0].user_id)
        self.assertEqual(self.user['id'], events[1].user_id)
Example #3
0
    def test_get_events_for_feed_honors_time_parameters(self):
        ts = int(time.time())
        db_user_timeline_event.create_user_track_recommendation_event(
            user_id=self.user['id'],
            metadata=RecordingRecommendationMetadata(
                track_name="Sunflower",
                artist_name="Swae Lee & Post Malone",
                recording_msid=str(uuid.uuid4()),
                artist_msid=str(uuid.uuid4()),
            ))
        db_user_timeline_event.create_user_track_recommendation_event(
            user_id=self.user['id'],
            metadata=RecordingRecommendationMetadata(
                track_name="Da Funk",
                artist_name="Daft Punk",
                recording_msid=str(uuid.uuid4()),
                artist_msid=str(uuid.uuid4()),
            ))

        time.sleep(3)
        new_user = db_user.get_or_create(4, 'new_user')
        db_user_timeline_event.create_user_track_recommendation_event(
            user_id=new_user['id'],
            metadata=RecordingRecommendationMetadata(
                track_name="Da Funk",
                artist_name="Daft Punk",
                recording_msid=str(uuid.uuid4()),
                artist_msid=str(uuid.uuid4()),
            ))

        # max_ts is too low, won't return anything
        events = db_user_timeline_event.get_recording_recommendation_events_for_feed(
            user_ids=(self.user['id'], new_user['id']),
            min_ts=0,
            max_ts=ts,
            count=50,
        )
        self.assertListEqual([], events)

        # check that it honors min_ts as well
        events = db_user_timeline_event.get_recording_recommendation_events_for_feed(
            user_ids=(self.user['id'], new_user['id']),
            min_ts=ts + 1,
            max_ts=ts + 10,
            count=50,
        )
        self.assertEqual(1, len(events))
def get_recording_recommendation_events(users_for_events: List[dict],
                                        min_ts: int, max_ts: int,
                                        count: int) -> List[APITimelineEvent]:
    """ Gets all recording recommendation events in the feed.
    """

    id_username_map = {
        user['id']: user['musicbrainz_id']
        for user in users_for_events
    }
    recording_recommendation_events_db = db_user_timeline_event.get_recording_recommendation_events_for_feed(
        user_ids=(user['id'] for user in users_for_events),
        min_ts=min_ts,
        max_ts=max_ts,
        count=count,
    )

    events = []
    for event in recording_recommendation_events_db:
        try:
            listen = APIListen(
                user_name=id_username_map[event.user_id],
                track_metadata=TrackMetadata(
                    artist_name=event.metadata.artist_name,
                    track_name=event.metadata.track_name,
                    release_name=event.metadata.release_name,
                    additional_info=AdditionalInfo(
                        recording_msid=event.metadata.recording_msid,
                        recording_mbid=event.metadata.recording_mbid,
                        artist_msid=event.metadata.artist_msid,
                    )),
            )

            events.append(
                APITimelineEvent(
                    id=event.id,
                    event_type=UserTimelineEventType.RECORDING_RECOMMENDATION,
                    user_name=listen.user_name,
                    created=event.created.timestamp(),
                    metadata=listen,
                ))
        except pydantic.ValidationError as e:
            current_app.logger.error('Validation error: ' + str(e),
                                     exc_info=True)
            continue
    return events