def get_positions(group, user, limit=20): threshold = 0.4 actors = {x.pk: x for x in group.members.all()} groups = { x.actor_id: x.group for x in ( models.Member.objects. annotate(untilnow=Case( When(until__isnull=False, then=F('until')), default=datetime.datetime.now(), )). filter( actor__ingroup=group, group__title='plitinė partija', ). select_related('group'). order_by('untilnow', 'since') ) } positions = services.compare_positions(group, user) compat = ((x, d) for x, d in positions if d < threshold) incompat = ((x, d) for x, d in reversed(positions) if d >= threshold) result = [] for i, (left, right) in zip(range(limit), itertools.zip_longest(compat, incompat, fillvalue=(None, None))): result.append(( _actor_details(groups, actors, *left), _actor_details(groups, actors, *right), )) return result
def test_compare_positions(app): user = factories.UserFactory() topic = factories.TopicFactory() factories.TopicCuratorFactory(user=user, topic=topic) # Fill topic with some content factories.create_topic_posts(topic, user, [ ('event', 0, 1, 'Balsavimo internetu koncepcijos patvirtinimas', 'lrs.lt', '2006-11-26'), ('quote', 'Mantas Adomėnas', 'seimo narys', 'kauno.diena.lt', '2016-03-22', [ (1, 0, 'Nepasiduokime paviršutiniškiems šūkiams – šiuolaikiška, modernu.', [ (1, 'šiuolaikiška, modernu', True), ]), (1, 0, 'Atidaroma galimybė prekiauti balsais ir likti nebaudžiamam.', [ (-1, 'balsų pirkimas', None), ]), ]), ('quote', 'Eligijus Masiulis', 'seimo narys', 'delfi.lt', '2015-10-08', [ (0, 0, 'Mes palaikysim tokį įstatymą, nes turime žengti į priekį ir reaguoti į XXI a. iššūkius.', [ (1, 'šiuolaikiška, modernu', None), ]), ]), ('quote', 'Juozas Bernatonis', 'seimo narys', 'delfi.lt', '2016-03-26', [ (0, 1, 'Žemas užsienio lietuvių aktyvumas susijęs su dalyvavimo rinkimuose sunkumais.', [ (1, 'didės užsienio lietuvių aktyvumas rinkimuose', None), ]), ]), ('quote', 'Mantas Adomėnas', 'seimo narys', '15min.lt', '2006-03-22', [ (0, 0, 'Nepasiduokime paviršutiniškiems šūkiams – šiuolaikiška, modernu.', [ (1, 'šiuolaikiška, modernu', None), ]), ]), ]) # Check topic was actually filled with correct data assert services.dump_topic_posts(topic) == '\n'.join([ '( ) (y) Juozas Bernatonis (seimo narys) delfi.lt 2016-03-26 ', ' | Žemas užsienio lietuvių aktyvumas susijęs su dalyvavimo rinkimuose sunkumais. (-1)', ' | - (y) didės užsienio lietuvių aktyvumas rinkimuose ', ' | ', '( ) (n) Mantas Adomėnas (seimo narys) kauno.diena.lt 2016-03-22 ', ' | Nepasiduokime paviršutiniškiems šūkiams – šiuolaikiška, modernu. (1)', ' | - (y) šiuolaikiška, modernu < (counterargument) ', ' | Atidaroma galimybė prekiauti balsais ir likti nebaudžiamam. (1)', ' | - (n) balsų pirkimas ', ' | ', '( ) (y) Eligijus Masiulis (seimo narys) delfi.lt 2015-10-08 ', ' | Mes palaikysim tokį įstatymą, nes turime žengti į priekį ir reaguoti į XXI a. iššūkius. (0)', ' | - (y) šiuolaikiška, modernu ', ' | ', ' o (-) Balsavimo internetu koncepcijos patvirtinimas lrs.lt 2006-11-26 (-1)', ' | ', '( ) (y) Mantas Adomėnas (seimo narys) 15min.lt 2006-03-22 ', ' | Nepasiduokime paviršutiniškiems šūkiams – šiuolaikiška, modernu. (0)', ' | - (y) šiuolaikiška, modernu ', ]) mantas_adomenas = models.Actor.objects.get(first_name='Mantas', last_name='Adomėnas').pk eligijus_masiulis = models.Actor.objects.get(first_name='Eligijus', last_name='Masiulis').pk group = factories.GroupFactory( members=[mantas_adomenas, eligijus_masiulis]) # Check list of actor and user positions for quotes assert list(services.get_user_quote_positions(group, user)) == [ (mantas_adomenas, -1.0, 1), (mantas_adomenas, -1.0, 1), (eligijus_masiulis, 1.0, 0), (mantas_adomenas, 1.0, 0), ] # Check list of actor and user positions for arguments assert list(services.get_user_argument_positions(group, user)) == [ ('balsų pirkimas', mantas_adomenas, -1.0, -1.0), ('šiuolaikiška, modernu', mantas_adomenas, 0, -1.0), ('šiuolaikiška, modernu', eligijus_masiulis, 1.0, -1.0), ] # Check list of actor and user positions for events assert list(services.get_user_event_positions(group, user)) == [] # Finally check if position comparison works assert services.compare_positions(group, user) == [ (mantas_adomenas, 0.125), (eligijus_masiulis, 1.0), ]
def test_compare_positions(app): user = factories.UserFactory() topic = factories.TopicFactory() factories.TopicCuratorFactory(user=user, topic=topic) # Fill topic with some content factories.create_topic_posts(topic, user, [ ('event', 0, 1, 'Balsavimo internetu koncepcijos patvirtinimas', 'lrs.lt', '2006-11-26'), ('quote', 'Mantas Adomėnas', 'seimo narys', 'kauno.diena.lt', '2016-03-22', [ (1, 0, 'Nepasiduokime paviršutiniškiems šūkiams – šiuolaikiška, modernu.', [ (1, 'šiuolaikiška, modernu', True), ]), (1, 0, 'Atidaroma galimybė prekiauti balsais ir likti nebaudžiamam.', [ (-1, 'balsų pirkimas', None), ]), ]), ('quote', 'Eligijus Masiulis', 'seimo narys', 'delfi.lt', '2015-10-08', [ (0, 0, 'Mes palaikysim tokį įstatymą, nes turime žengti į priekį ir reaguoti į XXI a. iššūkius.', [ (1, 'šiuolaikiška, modernu', None), ]), ]), ('quote', 'Juozas Bernatonis', 'seimo narys', 'delfi.lt', '2016-03-26', [ (0, 1, 'Žemas užsienio lietuvių aktyvumas susijęs su dalyvavimo rinkimuose sunkumais.', [ (1, 'didės užsienio lietuvių aktyvumas rinkimuose', None), ]), ]), ('quote', 'Mantas Adomėnas', 'seimo narys', '15min.lt', '2006-03-22', [ (0, 0, 'Nepasiduokime paviršutiniškiems šūkiams – šiuolaikiška, modernu.', [ (1, 'šiuolaikiška, modernu', None), ]), ]), ]) # Check topic was actually filled with correct data assert services.dump_topic_posts(topic) == '\n'.join([ '( ) (y) Juozas Bernatonis (seimo narys) delfi.lt 2016-03-26 ', ' | Žemas užsienio lietuvių aktyvumas susijęs su dalyvavimo rinkimuose sunkumais. (-1)', ' | - (y) didės užsienio lietuvių aktyvumas rinkimuose ', ' | ', '( ) (n) Mantas Adomėnas (seimo narys) kauno.diena.lt 2016-03-22 ', ' | Nepasiduokime paviršutiniškiems šūkiams – šiuolaikiška, modernu. (1)', ' | - (y) šiuolaikiška, modernu < (counterargument) ', ' | Atidaroma galimybė prekiauti balsais ir likti nebaudžiamam. (1)', ' | - (n) balsų pirkimas ', ' | ', '( ) (y) Eligijus Masiulis (seimo narys) delfi.lt 2015-10-08 ', ' | Mes palaikysim tokį įstatymą, nes turime žengti į priekį ir reaguoti į XXI a. iššūkius. (0)', ' | - (y) šiuolaikiška, modernu ', ' | ', ' o (-) Balsavimo internetu koncepcijos patvirtinimas lrs.lt 2006-11-26 (-1)', ' | ', '( ) (y) Mantas Adomėnas (seimo narys) 15min.lt 2006-03-22 ', ' | Nepasiduokime paviršutiniškiems šūkiams – šiuolaikiška, modernu. (0)', ' | - (y) šiuolaikiška, modernu ', ]) mantas_adomenas = models.Actor.objects.get(first_name='Mantas', last_name='Adomėnas').pk eligijus_masiulis = models.Actor.objects.get(first_name='Eligijus', last_name='Masiulis').pk group = factories.GroupFactory(members=[mantas_adomenas, eligijus_masiulis]) # Check list of actor and user positions for quotes assert list(services.get_user_quote_positions(group, user)) == [ (mantas_adomenas, -1.0, 1), (mantas_adomenas, -1.0, 1), (eligijus_masiulis, 1.0, 0), (mantas_adomenas, 1.0, 0), ] # Check list of actor and user positions for arguments assert list(services.get_user_argument_positions(group, user)) == [ ('balsų pirkimas', mantas_adomenas, -1.0, -1.0), ('šiuolaikiška, modernu', mantas_adomenas, 0, -1.0), ('šiuolaikiška, modernu', eligijus_masiulis, 1.0, -1.0), ] # Check list of actor and user positions for events assert list(services.get_user_event_positions(group, user)) == [ ] # Finally check if position comparison works assert services.compare_positions(group, user) == [ (mantas_adomenas, 0.125), (eligijus_masiulis, 1.0), ]