def test_reindex_users_that_contributed_yesterday(self): yesterday = datetime.now() - timedelta(days=1) # Verify for answers. u = user(username='******', save=True) profile(user=u) answer(creator=u, created=yesterday, save=True) reindex_users_that_contributed_yesterday() self.refresh() data = UserMappingType.search().query(username__match='answerer')[0] eq_(data['last_contribution_date'].date(), yesterday.date()) # Verify for edits. u = user(username='******', save=True) profile(user=u) revision(creator=u, created=yesterday, save=True) reindex_users_that_contributed_yesterday() self.refresh() data = UserMappingType.search().query(username__match='editor')[0] eq_(data['last_contribution_date'].date(), yesterday.date()) # Verify for reviews. u = user(username='******', save=True) profile(user=u) revision(reviewer=u, reviewed=yesterday, save=True) reindex_users_that_contributed_yesterday() self.refresh() data = UserMappingType.search().query(username__match='reviewer')[0] eq_(data['last_contribution_date'].date(), yesterday.date())
def test_suggest_completions(self): u1 = UserFactory(username='******', profile__name='Rick Róss') u2 = UserFactory(username='******', profile__name='Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions('wi') eq_(1, len(results)) eq_('Will Cage (Willkg)', results[0]['text']) eq_(u2.id, results[0]['payload']['user_id']) results = UserMappingType.suggest_completions('R1') eq_(1, len(results)) eq_('Rick Róss (r1cky)', results[0]['text']) eq_(u1.id, results[0]['payload']['user_id']) # Add another Ri.... UserFactory(username='******', profile__name='Richard Smith') self.refresh() eq_(UserMappingType.search().count(), 3) results = UserMappingType.suggest_completions('ri') eq_(2, len(results)) texts = [r['text'] for r in results] assert 'Rick Róss (r1cky)' in texts assert 'Richard Smith (richard)' in texts results = UserMappingType.suggest_completions('Rick Ró') eq_(1, len(results)) texts = [r['text'] for r in results] eq_('Rick Róss (r1cky)', results[0]['text'])
def test_suggest_completions(self): u1 = UserFactory(username='******', profile__name=u'Rick Róss') u2 = UserFactory(username='******', profile__name=u'Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions('wi') eq_(1, len(results)) eq_('Will Cage (Willkg)', results[0]['text']) eq_(u2.id, results[0]['payload']['user_id']) results = UserMappingType.suggest_completions('R1') eq_(1, len(results)) eq_(u'Rick Róss (r1cky)', results[0]['text']) eq_(u1.id, results[0]['payload']['user_id']) # Add another Ri.... UserFactory(username='******', profile__name=u'Richard Smith') self.refresh() eq_(UserMappingType.search().count(), 3) results = UserMappingType.suggest_completions('ri') eq_(2, len(results)) texts = [r['text'] for r in results] assert u'Rick Róss (r1cky)' in texts assert u'Richard Smith (richard)' in texts results = UserMappingType.suggest_completions(u'Rick Ró') eq_(1, len(results)) texts = [r['text'] for r in results] eq_(u'Rick Róss (r1cky)', results[0]['text'])
def test_reindex_users_that_contributed_yesterday(self): yesterday = datetime.now() - timedelta(days=1) # Verify for answers. u = user(username='******', save=True) profile(user=u) answer(creator=u, created=yesterday, save=True) reindex_users_that_contributed_yesterday() self.refresh() data = UserMappingType.search().query(username__match='answerer')[0] eq_(data['last_contribution_date'].date(), yesterday.date()) # Verify for edits. u = user(username='******', save=True) profile(user=u) revision(creator=u, created=yesterday, save=True) reindex_users_that_contributed_yesterday() self.refresh() data = UserMappingType.search().query(username__match='editor')[0] eq_(data['last_contribution_date'].date(), yesterday.date()) # Verify for reviews. u = user(username='******', save=True) profile(user=u) revision(reviewer=u, reviewed=yesterday, save=True) reindex_users_that_contributed_yesterday() self.refresh() data = UserMappingType.search().query(username__match='reviewer')[0] eq_(data['last_contribution_date'].date(), yesterday.date())
def test_reindex_users_that_contributed_yesterday(self): yesterday = datetime.now() - timedelta(days=1) # Verify for answers. u = UserFactory(username="******") AnswerFactory(creator=u, created=yesterday) call_command("reindex_users_that_contributed_yesterday") self.refresh() data = UserMappingType.search().query(username__match="answerer")[0] eq_(data["last_contribution_date"].date(), yesterday.date()) # Verify for edits. u = UserFactory(username="******") RevisionFactory(creator=u, created=yesterday) call_command("reindex_users_that_contributed_yesterday") self.refresh() data = UserMappingType.search().query(username__match="editor")[0] eq_(data["last_contribution_date"].date(), yesterday.date()) # Verify for reviews. u = UserFactory(username="******") RevisionFactory(reviewer=u, reviewed=yesterday) call_command("reindex_users_that_contributed_yesterday") self.refresh() data = UserMappingType.search().query(username__match="reviewer")[0] eq_(data["last_contribution_date"].date(), yesterday.date())
def test_suggest_completions(self): u1 = UserFactory(username="******", profile__name="Rick Róss") u2 = UserFactory(username="******", profile__name="Will Cage") self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions("wi") eq_(1, len(results)) eq_("Will Cage (Willkg)", results[0]["text"]) eq_(u2.id, results[0]["payload"]["user_id"]) results = UserMappingType.suggest_completions("R1") eq_(1, len(results)) eq_("Rick Róss (r1cky)", results[0]["text"]) eq_(u1.id, results[0]["payload"]["user_id"]) # Add another Ri.... UserFactory(username="******", profile__name="Richard Smith") self.refresh() eq_(UserMappingType.search().count(), 3) results = UserMappingType.suggest_completions("ri") eq_(2, len(results)) texts = [r["text"] for r in results] assert "Rick Róss (r1cky)" in texts assert "Richard Smith (richard)" in texts results = UserMappingType.suggest_completions("Rick Ró") eq_(1, len(results)) texts = [r["text"] for r in results] eq_("Rick Róss (r1cky)", results[0]["text"])
def test_last_contribution_date(self): """Verify the last_contribution_date field works properly.""" u = UserFactory(username="******") self.refresh() data = UserMappingType.search().query(username__match="satdav")[0] assert not data["last_contribution_date"] # Add a Support Forum answer. It should be the last contribution. d = datetime(2014, 1, 2) AnswerFactory(creator=u, created=d) u.profile.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query(username__match="satdav")[0] eq_(data["last_contribution_date"], d) # Add a Revision edit. It should be the last contribution. d = datetime(2014, 1, 3) RevisionFactory(created=d, creator=u) u.profile.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query(username__match="satdav")[0] eq_(data["last_contribution_date"], d) # Add a Revision review. It should be the last contribution. d = datetime(2014, 1, 4) RevisionFactory(reviewed=d, reviewer=u) u.profile.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query(username__match="satdav")[0] eq_(data["last_contribution_date"], d)
def test_reindex_users_that_contributed_yesterday(self): yesterday = datetime.now() - timedelta(days=1) # Verify for answers. u = UserFactory(username='******') AnswerFactory(creator=u, created=yesterday) call_command('reindex_users_that_contributed_yesterday') self.refresh() data = UserMappingType.search().query(username__match='answerer')[0] eq_(data['last_contribution_date'].date(), yesterday.date()) # Verify for edits. u = UserFactory(username='******') RevisionFactory(creator=u, created=yesterday) call_command('reindex_users_that_contributed_yesterday') self.refresh() data = UserMappingType.search().query(username__match='editor')[0] eq_(data['last_contribution_date'].date(), yesterday.date()) # Verify for reviews. u = UserFactory(username='******') RevisionFactory(reviewer=u, reviewed=yesterday) call_command('reindex_users_that_contributed_yesterday') self.refresh() data = UserMappingType.search().query(username__match='reviewer')[0] eq_(data['last_contribution_date'].date(), yesterday.date())
def test_query_display_name_with_whitespace(self): UserFactory(username="******", profile__name="Elite Mike") UserFactory(username="******", profile__name="NotElite Mike") self.refresh() eq_(UserMappingType.search().count(), 2) eq_(UserMappingType.search().query(idisplay_name__match_whitespace="elite").count(), 1)
def test_query_display_name_with_whitespace(self): UserFactory(username='******', profile__name='Elite Mike') UserFactory(username='******', profile__name='NotElite Mike') self.refresh() eq_(UserMappingType.search().count(), 2) eq_(UserMappingType.search().query( idisplay_name__match_whitespace='elite').count(), 1)
def test_query_display_name_with_whitespace(self): UserFactory(username='******', profile__name=u'Elite Mike') UserFactory(username='******', profile__name=u'NotElite Mike') self.refresh() eq_(UserMappingType.search().count(), 2) eq_(UserMappingType.search().query( idisplay_name__match_whitespace='elite').count(), 1)
def test_query_display_name_with_whitespace(self): u1 = user(username="******", save=True) p = profile(user=u1, name=u"Elite Mike") u2 = user(username="******", save=True) profile(user=u2, name=u"NotElite Mike") self.refresh() eq_(UserMappingType.search().count(), 2) eq_(UserMappingType.search().query(idisplay_name__match_whitespace="elite").count(), 1)
def test_query_username_with_numbers(self): u = UserFactory(username='******', profile__name=u'Elite Mike') UserFactory(username='******', profile__name=u'NotElite Mike') self.refresh() eq_(UserMappingType.search().query(iusername__match='1337mike').count(), 1) data = UserMappingType.search().query(iusername__match='1337mike')[0] eq_(data['username'], u.username) eq_(data['display_name'], u.profile.name)
def test_query_username_with_numbers(self): u = UserFactory(username="******", profile__name="Elite Mike") UserFactory(username="******", profile__name="NotElite Mike") self.refresh() eq_(UserMappingType.search().query(iusername__match="1337mike").count(), 1) data = UserMappingType.search().query(iusername__match="1337mike")[0] eq_(data["username"], u.username) eq_(data["display_name"], u.profile.name)
def test_query_username_with_numbers(self): u = UserFactory(username='******', profile__name='Elite Mike') UserFactory(username='******', profile__name='NotElite Mike') self.refresh() eq_(UserMappingType.search().query(iusername__match='1337mike').count(), 1) data = UserMappingType.search().query(iusername__match='1337mike')[0] eq_(data['username'], u.username) eq_(data['display_name'], u.profile.name)
def test_last_contribution_date(self): """Verify the last_contribution_date field works properly.""" u = user(username='******', save=True) p = profile(user=u) self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] assert not data['last_contribution_date'] # Add a AoA reply. It should be the last contribution. d = datetime(2014, 1, 1) reply(user=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Support Forum answer. It should be the last contribution. d = datetime(2014, 1, 2) answer(creator=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Revision edit. It should be the last contribution. d = datetime(2014, 1, 3) revision(creator=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Revision review. It should be the last contribution. d = datetime(2014, 1, 4) revision(reviewer=u, reviewed=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d)
def test_query_display_name_with_whitespace(self): u1 = user(username='******', save=True) profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'NotElite Mike') self.refresh() eq_(UserMappingType.search().count(), 2) eq_(UserMappingType.search().query( idisplay_name__match_whitespace='elite').count(), 1)
def test_add_and_delete(self): """Adding a user with a profile should add it to the index. Deleting should delete it. """ p = profile() self.refresh() eq_(UserMappingType.search().count(), 1) p.user.delete() self.refresh() eq_(UserMappingType.search().count(), 0)
def test_query_display_name_with_whitespace(self): u1 = user(username='******', save=True) p = profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'NotElite Mike') self.refresh() eq_(UserMappingType.search().count(), 2) eq_( UserMappingType.search().query( idisplay_name__match_whitespace='elite').count(), 1)
def test_last_contribution_date(self): """Verify the last_contribution_date field works properly.""" u = user(username='******', save=True) p = profile(user=u) self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] assert not data['last_contribution_date'] # Add a AoA reply. It should be the last contribution. d = datetime(2014, 1, 1) reply(user=u, created=d, save=True) self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Support Forum answer. It should be the last contribution. d = datetime(2014, 1, 2) answer(creator=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Revision edit. It should be the last contribution. d = datetime(2014, 1, 3) revision(creator=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Revision review. It should be the last contribution. d = datetime(2014, 1, 4) revision(reviewer=u, reviewed=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d)
def test_add_and_delete(self): """Adding a user with a profile should add it to the index. Deleting should delete it. """ p = ProfileFactory() self.refresh() eq_(UserMappingType.search().count(), 1) p.user.delete() self.refresh() eq_(UserMappingType.search().count(), 0)
def test_query_username_with_numbers(self): u1 = user(username="******", save=True) p = profile(user=u1, name=u"Elite Mike") u2 = user(username="******", save=True) profile(user=u2, name=u"NotElite Mike") self.refresh() eq_(UserMappingType.search().query(iusername__match="1337mike").count(), 1) data = UserMappingType.search().query(iusername__match="1337mike").values_dict()[0] eq_(data["username"], p.user.username) eq_(data["display_name"], p.name)
def test_query_username_with_numbers(self): u1 = user(username='******', save=True) p = profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'NotElite Mike') self.refresh() eq_(UserMappingType.search().query( iusername__match='1337mike').count(), 1) data = UserMappingType.search().query(iusername__match='1337mike')[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name)
def test_query_twitter_usernames(self): u1 = UserFactory(username='******', profile__name=u'Elite Mike') u2 = UserFactory(username='******', profile__name=u'NotElite Mike') r1 = ReplyFactory(user=u1, twitter_username='******') ReplyFactory(user=u2, twitter_username='******') self.refresh() eq_(UserMappingType.search().query(itwitter_usernames__match='l33tmike').count(), 1) data = UserMappingType.search().query(itwitter_usernames__match='l33tmike')[0] eq_(data['username'], u1.username) eq_(data['display_name'], u1.profile.name) assert r1.twitter_username in data['twitter_usernames']
def test_query_twitter_usernames(self): u1 = UserFactory(username='******', profile__name='Elite Mike') u2 = UserFactory(username='******', profile__name='NotElite Mike') r1 = ReplyFactory(user=u1, twitter_username='******') ReplyFactory(user=u2, twitter_username='******') self.refresh() eq_(UserMappingType.search().query(itwitter_usernames__match='l33tmike').count(), 1) data = UserMappingType.search().query(itwitter_usernames__match='l33tmike')[0] eq_(data['username'], u1.username) eq_(data['display_name'], u1.profile.name) assert r1.twitter_username in data['twitter_usernames']
def test_query_twitter_usernames(self): u1 = UserFactory(username="******", profile__name="Elite Mike") u2 = UserFactory(username="******", profile__name="NotElite Mike") r1 = ReplyFactory(user=u1, twitter_username="******") ReplyFactory(user=u2, twitter_username="******") self.refresh() eq_(UserMappingType.search().query(itwitter_usernames__match="l33tmike").count(), 1) data = UserMappingType.search().query(itwitter_usernames__match="l33tmike")[0] eq_(data["username"], u1.username) eq_(data["display_name"], u1.profile.name) assert r1.twitter_username in data["twitter_usernames"]
def test_query_username_with_numbers(self): u1 = user(username='******', save=True) p = profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'NotElite Mike') self.refresh() eq_( UserMappingType.search().query( iusername__match='1337mike').count(), 1) data = UserMappingType.search().query(iusername__match='1337mike')[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name)
def _get_creator_counts(query, count, page): """Get the list of top contributors with the contribution count.""" creator_counts = query.facet_counts()['creator_id']['terms'] total = len(creator_counts) # Pagination creator_counts = creator_counts[((page - 1) * count):(page * count)] # Grab all the users from the user index in ES. user_ids = [x['term'] for x in creator_counts] results = (UserMappingType.search().filter(id__in=user_ids).values_dict( 'id', 'username', 'display_name', 'avatar', 'twitter_usernames', 'last_contribution_date'))[:count] results = UserMappingType.reshape(results) # Calculate days since last activity and # create a {<user_id>: <user>,...} dict for convenience. user_lookup = {} for r in results: lcd = r.get('last_contribution_date', None) if lcd: delta = datetime.now() - lcd r['days_since_last_activity'] = delta.days else: r['days_since_last_activity'] = None user_lookup[r['id']] = r # Add the user to each dict in the creator_counts array. for item in creator_counts: item['user'] = user_lookup.get(item['term'], None) return ([item for item in creator_counts if item['user'] is not None], total)
def test_data_in_index(self): """Verify the data we are indexing.""" u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Rick Róss') self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search().values_dict()[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2)
def test_data_in_index(self): """Verify the data we are indexing.""" u = user(username="******", email="*****@*****.**", save=True) p = profile(user=u, name=u"Rick Róss") self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search().values_dict()[0] eq_(data["username"], p.user.username) eq_(data["display_name"], p.name) u = user(username="******", email="*****@*****.**", save=True) p = profile(user=u, name=u"Will Cage") self.refresh() eq_(UserMappingType.search().count(), 2)
def test_query_twitter_usernames(self): u1 = user(username='******', save=True) p = profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'NotElite Mike') r1 = reply(user=u1, twitter_username='******', save=True) reply(user=u2, twitter_username='******', save=True) self.refresh() eq_(UserMappingType.search().query( itwitter_usernames__match='l33tmike').count(), 1) data = UserMappingType.search().query( itwitter_usernames__match='l33tmike')[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) assert r1.twitter_username in data['twitter_usernames']
def test_data_in_index(self): """Verify the data we are indexing.""" u = UserFactory(username="******", email="*****@*****.**", profile__name="Rick Róss") self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search()[0] eq_(data["username"], u.username) eq_(data["display_name"], u.profile.name) u = UserFactory(username="******", email="*****@*****.**", profile__name="Will Cage") self.refresh() eq_(UserMappingType.search().count(), 2)
def test_query_twitter_usernames(self): u1 = user(username='******', save=True) p = profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'NotElite Mike') r1 = reply(user=u1, twitter_username='******', save=True) r2 = reply(user=u2, twitter_username='******', save=True) self.refresh() eq_( UserMappingType.search().query( itwitter_usernames__match='l33tmike').count(), 1) data = UserMappingType.search().query( itwitter_usernames__match='l33tmike').values_dict()[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) assert r1.twitter_username in data['twitter_usernames']
def test_data_in_index(self): """Verify the data we are indexing.""" u = UserFactory(username="******", email="*****@*****.**", profile__name="Rick Róss") r1 = ReplyFactory(user=u, twitter_username="******") r2 = ReplyFactory(user=u, twitter_username="******") self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search()[0] eq_(data["username"], u.username) eq_(data["display_name"], u.profile.name) assert r1.twitter_username in data["twitter_usernames"] assert r2.twitter_username in data["twitter_usernames"] u = UserFactory(username="******", email="*****@*****.**", profile__name="Will Cage") self.refresh() eq_(UserMappingType.search().count(), 2)
def test_data_in_index(self): """Verify the data we are indexing.""" u = UserFactory(username='******', email='*****@*****.**', profile__name=u'Rick Róss') r1 = ReplyFactory(user=u, twitter_username='******') r2 = ReplyFactory(user=u, twitter_username='******') self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search()[0] eq_(data['username'], u.username) eq_(data['display_name'], u.profile.name) assert r1.twitter_username in data['twitter_usernames'] assert r2.twitter_username in data['twitter_usernames'] u = UserFactory(username='******', email='*****@*****.**', profile__name='Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2)
def test_data_in_index(self): """Verify the data we are indexing.""" u = UserFactory(username='******', email='*****@*****.**', profile__name='Rick Róss') r1 = ReplyFactory(user=u, twitter_username='******') r2 = ReplyFactory(user=u, twitter_username='******') self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search()[0] eq_(data['username'], u.username) eq_(data['display_name'], u.profile.name) assert r1.twitter_username in data['twitter_usernames'] assert r2.twitter_username in data['twitter_usernames'] u = UserFactory(username='******', email='*****@*****.**', profile__name='Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2)
def test_last_contribution_date(self): """Verify the last_contribution_date field works properly.""" u = UserFactory(username='******') self.refresh() data = UserMappingType.search().query(username__match='satdav')[0] assert not data['last_contribution_date'] # Add a AoA reply. It should be the last contribution. d = datetime(2014, 1, 1) ReplyFactory(user=u, created=d) self.refresh() data = UserMappingType.search().query(username__match='satdav')[0] eq_(data['last_contribution_date'], d) # Add a Support Forum answer. It should be the last contribution. d = datetime(2014, 1, 2) AnswerFactory(creator=u, created=d) u.profile.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query(username__match='satdav')[0] eq_(data['last_contribution_date'], d) # Add a Revision edit. It should be the last contribution. d = datetime(2014, 1, 3) RevisionFactory(created=d, creator=u) u.profile.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query(username__match='satdav')[0] eq_(data['last_contribution_date'], d) # Add a Revision review. It should be the last contribution. d = datetime(2014, 1, 4) RevisionFactory(reviewed=d, reviewer=u) u.profile.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query(username__match='satdav')[0] eq_(data['last_contribution_date'], d)
def test_data_in_index(self): """Verify the data we are indexing.""" u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Rick Róss') r1 = reply(user=u, twitter_username='******', save=True) r2 = reply(user=u, twitter_username='******', save=True) self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search()[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) assert r1.twitter_username in data['twitter_usernames'] assert r2.twitter_username in data['twitter_usernames'] u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2)
def test_suggest_completions_numbers(self): u1 = UserFactory(username='******', profile__name='Elite Mike') UserFactory(username='******', profile__name='Crazy Pants') self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions('13') eq_(1, len(results)) eq_('Elite Mike (1337mike)', results[0]['text']) eq_(u1.id, results[0]['payload']['user_id'])
def test_data_in_index(self): """Verify the data we are indexing.""" u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Rick Róss') r1 = reply(user=u, twitter_username='******', save=True) r2 = reply(user=u, twitter_username='******', save=True) self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search()[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) assert r1.twitter_username in data['twitter_usernames'] assert r2.twitter_username in data['twitter_usernames'] u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2)
def test_suggest_completions_numbers(self): u1 = UserFactory(username="******", profile__name="Elite Mike") UserFactory(username="******", profile__name="Crazy Pants") self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions("13") eq_(1, len(results)) eq_("Elite Mike (1337mike)", results[0]["text"]) eq_(u1.id, results[0]["payload"]["user_id"])
def test_suggest_completions_numbers(self): u1 = UserFactory(username='******', profile__name=u'Elite Mike') UserFactory(username='******', profile__name=u'Crazy Pants') self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions('13') eq_(1, len(results)) eq_('Elite Mike (1337mike)', results[0]['text']) eq_(u1.id, results[0]['payload']['user_id'])
def test_suggest_completions_numbers(self): u1 = user(username='******', save=True) profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'Crazy Pants') self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions('13') eq_(1, len(results)) eq_('Elite Mike (1337mike)', results[0]['text']) eq_(u1.id, results[0]['payload']['user_id'])
def test_suggest_completions_numbers(self): u1 = user(username="******", save=True) profile(user=u1, name=u"Elite Mike") u2 = user(username="******", save=True) profile(user=u2, name=u"Crazy Pants") self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions("13") eq_(1, len(results)) eq_("Elite Mike (1337mike)", results[0]["text"]) eq_(u1.id, results[0]["payload"]["user_id"])
def _filter_by_users(self, users_filter, invert=False): users = UserMappingType.reshape( UserMappingType.search() # Optimization: Filter out users that have never contributed. .filter(~F(last_contribution_date=None)).filter( users_filter).values_dict("id").everything()) user_ids = [u["id"] for u in users] res = F(creator_id__in=user_ids) if invert: res = ~res return res
def search(request): """Find users by username and displayname. Uses the ES user's index. """ results = [] search_errored = False q = request.GET.get("q") if q: lowerq = q.lower() try: results = (UserMappingType.search().query( iusername__match=lowerq, idisplay_name__match_whitespace=lowerq, itwitter_usernames__match=lowerq, should=True, ).values_dict( "id", "username", "display_name", "avatar", "twitter_usernames", "last_contribution_date", )) results = UserMappingType.reshape(results) except ES_EXCEPTIONS: search_errored = True log.exception("User search failed.") # For now, we're just truncating results at 30 and not doing any # pagination. If somebody complains, we can add pagination or something. results = list(results[:30]) # Calculate days since last activity. for r in results: lcd = r.get("last_contribution_date", None) if lcd: delta = datetime.now() - lcd r["days_since_last_activity"] = delta.days else: r["days_since_last_activity"] = None data = { "q": q, "results": results, "search_errored": search_errored, } return render(request, "community/search.html", data)
def test_suggest_completions(self): u1 = user(username="******", save=True) profile(user=u1, name=u"Rick Róss") u2 = user(username="******", save=True) profile(user=u2, name=u"Will Cage") self.refresh() eq_(UserMappingType.search().count(), 2) results = UserMappingType.suggest_completions("wi") eq_(1, len(results)) eq_("Will Cage (Willkg)", results[0]["text"]) eq_(u2.id, results[0]["payload"]["user_id"]) results = UserMappingType.suggest_completions("R1") eq_(1, len(results)) eq_(u"Rick Róss (r1cky)", results[0]["text"]) eq_(u1.id, results[0]["payload"]["user_id"]) # Add another Ri.... u3 = user(username="******", save=True) profile(user=u3, name=u"Richard Smith") self.refresh() eq_(UserMappingType.search().count(), 3) results = UserMappingType.suggest_completions("ri") eq_(2, len(results)) texts = [r["text"] for r in results] assert u"Rick Róss (r1cky)" in texts assert u"Richard Smith (richard)" in texts results = UserMappingType.suggest_completions(u"Rick Ró") eq_(1, len(results)) texts = [r["text"] for r in results] eq_(u"Rick Róss (r1cky)", results[0]["text"])
def search(request): """Find users by username and displayname. Uses the ES user's index. """ results = [] search_errored = False q = request.GET.get('q') if q: lowerq = q.lower() try: results = (UserMappingType.search().query( iusername__match=lowerq, idisplay_name__match_whitespace=lowerq, itwitter_usernames__match=lowerq, should=True).values_dict('id', 'username', 'display_name', 'avatar', 'twitter_usernames', 'last_contribution_date')) results = UserMappingType.reshape(results) statsd.incr('community.usersearch.success') except ES_EXCEPTIONS: search_errored = True statsd.incr('community.usersearch.error') log.exception('User search failed.') # For now, we're just truncating results at 30 and not doing any # pagination. If somebody complains, we can add pagination or something. results = list(results[:30]) # Calculate days since last activity. for r in results: lcd = r.get('last_contribution_date', None) if lcd: delta = datetime.now() - lcd r['days_since_last_activity'] = delta.days else: r['days_since_last_activity'] = None data = { 'q': q, 'results': results, 'search_errored': search_errored, } return render(request, 'community/search.html', data)
def _get_creator_counts(query, count, page): total = query.count() start = (page - 1) * count end = page * count query_data = query.values("id", "query_count")[start:end] query_data = {obj["id"]: obj["query_count"] for obj in query_data} users_data = (UserMappingType.search().filter( id__in=list(query_data.keys())).values_dict( "id", "username", "display_name", "avatar", "twitter_usernames", "last_contribution_date", )[:count]) users_data = UserMappingType.reshape(users_data) results = [] now = datetime.now() for u_data in users_data: user_id = u_data.get("id") last_contribution_date = u_data.get("last_contribution_date", None) u_data["days_since_last_activity"] = ((now - last_contribution_date).days if last_contribution_date else None) data = { "count": query_data.get(user_id), "term": user_id, "user": u_data } results.append(data) # Descending Order the list according to count. # As the top number of contributor should be at first results = sorted(results, key=itemgetter("count"), reverse=True) return results, total
def _get_creator_counts(query, count, page): total = query.count() start = (page - 1) * count end = page * count query_data = query.values('id', 'query_count')[start:end] query_data = {obj['id']: obj['query_count'] for obj in query_data} users_data = (UserMappingType.search().filter( id__in=query_data.keys()).values_dict( 'id', 'username', 'display_name', 'avatar', 'twitter_usernames', 'last_contribution_date')[:count]) users_data = UserMappingType.reshape(users_data) results = [] now = datetime.now() for u_data in users_data: user_id = u_data.get('id') last_contribution_date = u_data.get('last_contribution_date', None) u_data['days_since_last_activity'] = ((now - last_contribution_date).days if last_contribution_date else None) data = { 'count': query_data.get(user_id), 'term': user_id, 'user': u_data } results.append(data) # Descending Order the list according to count. # As the top number of contributor should be at first results = sorted(results, key=itemgetter('count'), reverse=True) return results, total
def _get_creator_counts(query, count, page): total = query.count() start = (page - 1) * count end = page * count query_data = query.values('id', 'query_count')[start:end] query_data = {obj['id']: obj['query_count'] for obj in query_data} users_data = (UserMappingType.search().filter(id__in=query_data.keys()) .values_dict('id', 'username', 'display_name', 'avatar', 'twitter_usernames', 'last_contribution_date')[:count]) users_data = UserMappingType.reshape(users_data) results = [] now = datetime.now() for u_data in users_data: user_id = u_data.get('id') last_contribution_date = u_data.get('last_contribution_date', None) u_data['days_since_last_activity'] = ((now - last_contribution_date).days if last_contribution_date else None) data = { 'count': query_data.get(user_id), 'term': user_id, 'user': u_data } results.append(data) # Descending Order the list according to count. # As the top number of contributor should be at first results = sorted(results, key=itemgetter('count'), reverse=True) return results, total
def _get_creator_counts(query, count, page): """Get the list of top contributors with the contribution count.""" creator_counts = query.facet_counts()["creator_id"]["terms"] total = len(creator_counts) # Pagination creator_counts = creator_counts[((page - 1) * count) : (page * count)] # Grab all the users from the user index in ES. user_ids = [x["term"] for x in creator_counts] results = ( UserMappingType.search() .filter(id__in=user_ids) .values_dict("id", "username", "display_name", "avatar", "twitter_usernames", "last_contribution_date") )[:count] results = UserMappingType.reshape(results) # Calculate days since last activity and # create a {<user_id>: <user>,...} dict for convenience. user_lookup = {} for r in results: lcd = r.get("last_contribution_date", None) if lcd: delta = datetime.now() - lcd r["days_since_last_activity"] = delta.days else: r["days_since_last_activity"] = None user_lookup[r["id"]] = r # Add the user to each dict in the creator_counts array. for item in creator_counts: item["user"] = user_lookup.get(item["term"], None) return ([item for item in creator_counts if item["user"] is not None], total)