def test_update_tag_stats(transactional_db): # Setup some sessions and tags now = timezone.now() s1 = mommy.make(Session, id=1, identity__data="tester", time=now - timedelta(days=3), device__id=1) s2 = mommy.make(Session, id=2, identity__data="tester", time=now - timedelta(days=2), device__id=1) s3 = mommy.make(Session, id=3, identity__data="tester", time=now - timedelta(days=1), device__id=1) tags = [mommy.make(Tag, id=n, unique_id='tag%i' % n) for n in range(10)] utils.update_tag_stats(s1, Tag.objects.values_list('pk', flat=True)[:4]) # Last seen and first seen should be s1 for tag_stat in TagStats.objects.all(): assert tag_stat.last_seen == s1 assert tag_stat.first_seen == s1 with pytest.raises(TagStats.DoesNotExist): TagStats.objects.get(tag=tags[6], device=s1.device) utils.update_tag_stats(s2, Tag.objects.values_list('pk', flat=True)[2:4]) # Only last_seen session for tags 2,3 should be changed assert TagStats.objects.get(tag=tags[0], device=s2.device).last_seen == s1 assert TagStats.objects.get(tag=tags[0], device=s2.device).first_seen == s1 assert TagStats.objects.get(tag=tags[1], device=s2.device).last_seen == s1 assert TagStats.objects.get(tag=tags[1], device=s2.device).first_seen == s1 assert TagStats.objects.get(tag=tags[2], device=s2.device).last_seen == s2 assert TagStats.objects.get(tag=tags[2], device=s2.device).first_seen == s1 assert TagStats.objects.get(tag=tags[3], device=s2.device).last_seen == s2 assert TagStats.objects.get(tag=tags[3], device=s2.device).first_seen == s1
def test_update_tag_stats(transactional_db): # Setup some sessions and tags now = timezone.now() s1 = mommy.make(Session, id=1, identity__data="tester", time=now - timedelta(days=3), device__id=1) s2 = mommy.make(Session, id=2, identity__data="tester", time=now - timedelta(days=2), device__id=1) s3 = mommy.make(Session, id=3, identity__data="tester", time=now - timedelta(days=1), device__id=1) tags = [mommy.make(Tag, id=n, unique_id='tag%i' % n) for n in range(10)] utils.update_tag_stats(s1, Tag.objects.values_list('pk', flat=True)[:4]) # Last seen and first seen should be s1 for tag_stat in TagStats.objects.all(): assert tag_stat.last_seen == s1 assert tag_stat.first_seen == s1 with pytest.raises(TagStats.DoesNotExist): TagStats.objects.get(tag=tags[6], device=s1.device) utils.update_tag_stats(s2, Tag.objects.values_list('pk', flat=True)[2:4]) # Only last_seen session for tags 2,3 should be changed assert TagStats.objects.get(tag=tags[0], device=s2.device).last_seen == s1 assert TagStats.objects.get(tag=tags[0], device=s2.device).first_seen == s1 assert TagStats.objects.get(tag=tags[1], device=s2.device).last_seen == s1 assert TagStats.objects.get(tag=tags[1], device=s2.device).first_seen == s1 assert TagStats.objects.get(tag=tags[2], device=s2.device).last_seen == s2 assert TagStats.objects.get(tag=tags[2], device=s2.device).first_seen == s1 assert TagStats.objects.get(tag=tags[3], device=s2.device).last_seen == s2 assert TagStats.objects.get(tag=tags[3], device=s2.device).first_seen == s1
def tags_and_sessions(transactional_db): now = timezone.now() s1 = mommy.make(Session, id=1, identity__data="tester", time=now - timedelta(days=3), device__id=1) s2 = mommy.make(Session, id=2, identity__data="tester", time=now - timedelta(days=1), device__id=1) s3 = mommy.make(Session, id=3, identity__data="tester", time=now + timedelta(days=1), device__id=1) mommy.make(Session, id=7, identity__data="tester", time=now + timedelta(days=2), device__id=1) s4 = mommy.make(Session, id=4, identity__data="tester", time=now + timedelta(days=3), device__id=1) mommy.make(Session, id=5, identity__data="tester", time=now - timedelta(days=4), device__id=1) mommy.make(Session, id=6, identity__data="tester", time=now + timedelta(days=4), device__id=1) tag1 = mommy.make(Tag, id=1, unique_id='tag1') tag2 = mommy.make(Tag, id=2, unique_id='tag2') tag3 = mommy.make(Tag, id=3, unique_id='tag3') tag4 = mommy.make(Tag, id=4, unique_id='tag4') tag5 = mommy.make(Tag, id=5, unique_id='tag5') tag6 = mommy.make(Tag, id=6, unique_id='tag6') tag7 = mommy.make(Tag, id=7, unique_id='tag7') # intital set: tag 1-4 s1.tag_set.add(tag1, tag2, tag3, tag4) utils.update_tag_stats(s1, [1, 2, 3, 4]) # s2, added: tag5; s2.tag_set.add(tag1, tag2, tag3, tag4, tag5) utils.update_tag_stats(s2, [1, 2, 3, 4, 5]) # s3, removed: tag1; s3.tag_set.add(tag2, tag3, tag4, tag5) utils.update_tag_stats(s3, [2, 3, 4, 5]) # s4 added: tag6, tag7; removed: tag2; s4.tag_set.add(tag3, tag4, tag5, tag6, tag7) utils.update_tag_stats(s4, [3, 4, 5, 6, 7]) return { 'now': now, 'sessions': [s1, s2, s3, s4], 'tags': [tag1, tag2, tag3, tag4, tag5, tag6, tag6] }
def test_large_tagstats_update(transactional_db): now = timezone.now() s1 = mommy.make(Session, id=1,time=now) tags = range(2000) utils.update_tag_stats(s1, tags) assert TagStats.objects.count() == 2000
def test_large_tagstats_update(transactional_db): now = timezone.now() s1 = mommy.make(Session, id=1, time=now) tags = range(2000) utils.update_tag_stats(s1, tags) assert TagStats.objects.count() == 2000
def tags_and_sessions(transactional_db): now = timezone.now() s1 = mommy.make(Session, id=1, identity__data="tester", time=now - timedelta(days=3), device__id=1) s2 = mommy.make(Session, id=2, identity__data="tester", time=now - timedelta(days=1), device__id=1) s3 = mommy.make(Session, id=3, identity__data="tester", time=now + timedelta(days=1), device__id=1) mommy.make(Session, id=7, identity__data="tester", time=now + timedelta(days=2), device__id=1) s4 = mommy.make(Session, id=4, identity__data="tester", time=now + timedelta(days=3), device__id=1) mommy.make(Session, id=5, identity__data="tester", time=now - timedelta(days=4), device__id=1) mommy.make(Session, id=6, identity__data="tester", time=now + timedelta(days=4), device__id=1) tag1 = mommy.make(Tag, id=1, unique_id='tag1') tag2 = mommy.make(Tag, id=2, unique_id='tag2') tag3 = mommy.make(Tag, id=3, unique_id='tag3') tag4 = mommy.make(Tag, id=4, unique_id='tag4') tag5 = mommy.make(Tag, id=5, unique_id='tag5') tag6 = mommy.make(Tag, id=6, unique_id='tag6') tag7 = mommy.make(Tag, id=7, unique_id='tag7') # intital set: tag 1-4 s1.tag_set.add(tag1, tag2, tag3, tag4) utils.update_tag_stats(s1, [1, 2, 3, 4]) # s2, added: tag5; s2.tag_set.add(tag1, tag2, tag3, tag4, tag5) utils.update_tag_stats(s2, [1, 2, 3, 4, 5]) # s3, removed: tag1; s3.tag_set.add(tag2, tag3, tag4, tag5) utils.update_tag_stats(s3, [2, 3, 4, 5]) # s4 added: tag6, tag7; removed: tag2; s4.tag_set.add(tag3, tag4, tag5, tag6, tag7) utils.update_tag_stats(s4, [3, 4, 5, 6, 7]) return { 'now': now, 'sessions': [s1, s2, s3, s4], 'tags': [tag1, tag2, tag3, tag4, tag5, tag6, tag6] }
# -*- coding: utf-8 -*- """ Migration script for issue 294: https://github.com/tnc-ba/strongTNC/pull/294 """ from __future__ import print_function, division, absolute_import, unicode_literals from apps.core.models import Session from apps.swid.models import TagStats from apps.swid.utils import update_tag_stats for session in Session.objects.all().order_by('time'): print('Processing session %d...' % session.pk) tag_ids = session.tag_set.values_list('pk', flat=True) update_tag_stats(session, tag_ids) print('Done.')
# -*- coding: utf-8 -*- """ Migration script for issue 294: https://github.com/tnc-ba/strongTNC/pull/294 """ from __future__ import print_function, division, absolute_import, unicode_literals from apps.core.models import Session from apps.swid.utils import update_tag_stats for session in Session.objects.all().order_by('time'): print('Processing session %d...' % session.pk) tag_ids = session.tag_set.values_list('pk', flat=True) update_tag_stats(session, tag_ids) print('Done.')