Exemple #1
0
def test_score_tp_updater_update(store0, tp0, admin, member, member2, today,
                                 yesterday, create_score_data):
    updater = score_updater.get(TranslationProject)(tp0)
    store1 = tp0.stores.exclude(id=store0.id).first()

    tp0.user_scores.all().delete()
    UserStoreScore.objects.filter(store__translation_project=tp0).delete()
    score_updater.get(Store)(store0).set_scores(create_score_data(store0))
    score_updater.get(Store)(store1).set_scores(create_score_data(store1))
    updater.update()
    for user in [admin, member, member2]:
        scores_today = tp0.user_scores.get(date=today, user=user)
        assert scores_today.score == ((store0.id * user.id) +
                                      (store1.id * user.id))
        assert scores_today.suggested == ((2 * store0.id * user.id) +
                                          (2 * store1.id * user.id))
        assert scores_today.translated == ((3 * store0.id * user.id) +
                                           (3 * store1.id * user.id))
        assert scores_today.reviewed == ((4 * store0.id * user.id) +
                                         (4 * store1.id * user.id))
        scores_yesterday = tp0.user_scores.get(date=yesterday, user=user)
        assert scores_yesterday.score == ((5 * store0.id * user.id) +
                                          (5 * store1.id * user.id))
        assert scores_yesterday.suggested == ((6 * store0.id * user.id) +
                                              (6 * store1.id * user.id))
        assert scores_yesterday.translated == ((7 * store0.id * user.id) +
                                               (7 * store1.id * user.id))
        assert scores_yesterday.reviewed == ((8 * store0.id * user.id) +
                                             (8 * store1.id * user.id))
Exemple #2
0
 def handle(self, **options):
     users = (list(get_user_model().objects.filter(
         username__in=options["users"]).values_list("pk", flat=True))
              if options["users"] else None)
     if options["reset"]:
         score_updater.get(get_user_model())(users=users).clear()
         return
     score_updater.get(get_user_model())().refresh_scores(users)
Exemple #3
0
 def handle_all(self, **options):
     if not self.projects and not self.languages:
         users = self.get_users(**options)
         if options["reset"]:
             score_updater.get(get_user_model())(users=users).clear()
         else:
             score_updater.get(get_user_model())().refresh_scores(users)
     else:
         super(Command, self).handle_all(**options)
Exemple #4
0
 def handle_all(self, **options):
     if not self.projects and not self.languages:
         users = self.get_users(**options)
         if options["reset"]:
             score_updater.get(get_user_model())(users=users).clear()
         else:
             score_updater.get(get_user_model())().refresh_scores(users)
     else:
         super(Command, self).handle_all(**options)
Exemple #5
0
 def handle(self, **options):
     users = (
         list(get_user_model().objects.filter(
             username__in=options["users"]).values_list("pk", flat=True))
         if options["users"]
         else None)
     if options["reset"]:
         score_updater.get(get_user_model())(users=users).clear()
         return
     score_updater.get(get_user_model())().refresh_scores(users)
Exemple #6
0
def test_score_store_updater(store0, admin):
    updater = score_updater.get(Store)(store0)
    assert updater.store == store0
    assert updater.user is None
    assert isinstance(updater, StoreScoreUpdater)
    assert isinstance(updater.logs, StoreLog)
    assert updater.event_class == LogEvent
    assert isinstance(updater.scoring, GatheredDict)
    updater = score_updater.get(Store)(store0, user=admin)
    assert updater.user == admin
Exemple #7
0
def test_score_store_updater(store0, admin):
    updater = score_updater.get(Store)(store0)
    assert updater.store == store0
    assert updater.user is None
    assert isinstance(updater, StoreScoreUpdater)
    assert isinstance(updater.logs, StoreLog)
    assert updater.event_class == LogEvent
    assert isinstance(updater.scoring, GatheredDict)
    updater = score_updater.get(Store)(store0, user=admin)
    assert updater.user == admin
Exemple #8
0
    def merge_submissions(self):
        """Merge submitter attribute on submissions
        """
        # Delete orphaned submissions.
        self.src_user.submission_set.filter(unit__isnull=True).delete()

        score_updater.get(
            self.src_user.__class__)(users=[self.src_user.id]).clear()

        # Update submitter on submissions
        self.src_user.submission_set.update(submitter=self.target_user)
Exemple #9
0
 def refresh_scores(self, users=None, existing=None, existing_tps=None):
     suppress_tp_scores = keep_data(signals=(update_scores, ),
                                    suppress=(TranslationProject, ))
     existing = existing or self.get_store_scores(self.tp)
     with bulk_operations(UserTPScore):
         with suppress_tp_scores:
             with bulk_operations(UserStoreScore):
                 for store in self.tp.stores.iterator():
                     score_updater.get(store.__class__)(store).update(
                         users=users, existing=existing.get(store.id))
         self.update(users=users, existing=existing_tps)
Exemple #10
0
def test_score_tp_updater_update(store0, tp0, admin, member, member2):
    today = localdate()
    yesterday = today - timedelta(days=1)
    updater = score_updater.get(TranslationProject)(tp0)
    store1 = tp0.stores.exclude(id=store0.id).first()

    def _generate_data(store):
        data = {}
        data[today] = dict()
        data[yesterday] = dict()
        for user in [admin, member, member2]:
            data[today][user.id] = dict(
                score=(store.id * user.id),
                suggested=(2 * store.id * user.id),
                translated=(3 * store.id * user.id),
                reviewed=(4 * store.id * user.id))
            data[yesterday][user.id] = dict(
                score=(5 * store.id * user.id),
                suggested=(6 * store.id * user.id),
                translated=(7 * store.id * user.id),
                reviewed=(8 * store.id * user.id))
        return data
    tp0.user_scores.all().delete()
    UserStoreScore.objects.filter(store__translation_project=tp0).delete()
    score_updater.get(Store)(store0).set_scores(_generate_data(store0))
    score_updater.get(Store)(store1).set_scores(_generate_data(store1))
    updater.update()
    for user in [admin, member, member2]:
        scores_today = tp0.user_scores.get(date=today, user=user)
        assert scores_today.score == (
            (store0.id * user.id)
            + (store1.id * user.id))
        assert scores_today.suggested == (
            (2 * store0.id * user.id)
            + (2 * store1.id * user.id))
        assert scores_today.translated == (
            (3 * store0.id * user.id)
            + (3 * store1.id * user.id))
        assert scores_today.reviewed == (
            (4 * store0.id * user.id)
            + (4 * store1.id * user.id))
        scores_yesterday = tp0.user_scores.get(date=yesterday, user=user)
        assert scores_yesterday.score == (
            (5 * store0.id * user.id)
            + (5 * store1.id * user.id))
        assert scores_yesterday.suggested == (
            (6 * store0.id * user.id)
            + (6 * store1.id * user.id))
        assert scores_yesterday.translated == (
            (7 * store0.id * user.id)
            + (7 * store1.id * user.id))
        assert scores_yesterday.reviewed == (
            (8 * store0.id * user.id)
            + (8 * store1.id * user.id))
Exemple #11
0
    def refresh_scores(self, users=None, **kwargs):
        suppress_user_scores = keep_data(signals=(update_scores, ),
                                         suppress=(get_user_model(), ))
        tp_scores = self.get_tp_scores()

        with bulk_operations(get_user_model()):
            with suppress_user_scores:
                for tp in TranslationProject.objects.all():
                    score_updater.get(tp.__class__)(tp).refresh_scores(
                        users=users, existing_tps=tp_scores.get(tp.id))
                self.update(users=users)
Exemple #12
0
    def refresh_scores(self, users=None, **kwargs):
        suppress_user_scores = keep_data(
            signals=(update_scores, ),
            suppress=(get_user_model(), ))
        tp_scores = self.get_tp_scores()

        with bulk_operations(get_user_model()):
            with suppress_user_scores:
                for tp in TranslationProject.objects.all():
                    score_updater.get(tp.__class__)(tp).refresh_scores(
                        users=users,
                        existing_tps=tp_scores.get(tp.id))
                self.update(users=users)
Exemple #13
0
 def refresh_scores(self, users=None, existing=None, existing_tps=None):
     suppress_tp_scores = keep_data(
         signals=(update_scores, ),
         suppress=(TranslationProject, ))
     existing = existing or self.get_store_scores(self.tp)
     with bulk_operations(UserTPScore):
         with suppress_tp_scores:
             with bulk_operations(UserStoreScore):
                 for store in self.tp.stores.iterator():
                     score_updater.get(store.__class__)(store).update(
                         users=users,
                         existing=existing.get(store.id))
         self.update(users=users, existing=existing_tps)
Exemple #14
0
def test_score_user_updater(tp0, admin, member):
    user_updater = score_updater.get(admin.__class__)
    admin.score = -999
    admin.save()
    member.score = -777
    member.save()
    assert user_updater == UserScoreUpdater
    updater = user_updater(users=[admin, member])
    assert updater.users == [admin, member]
    result = updater.calculate()
    admin_score = round(
        sum(admin.scores.values_list("score", flat=True)), 2)
    member_score = round(
        sum(member.scores.values_list("score", flat=True)), 2)
    assert round(dict(result)[admin.pk], 2) == admin_score
    assert round(dict(result)[member.pk], 2) == member_score
    updater.set_scores(result)
    admin.refresh_from_db()
    member.refresh_from_db()
    assert round(admin.score, 2) == admin_score
    assert round(member.score, 2) == member_score
    admin.score = -999
    admin.save()
    updater = user_updater((admin, ))
    assert updater.users == (admin, )
    result = updater.calculate()
    assert round(dict(result)[admin.pk], 2) == admin_score
    updater.set_scores(result)
    admin.refresh_from_db()
    assert round(admin.score, 2) == admin_score
Exemple #15
0
 def handle_all_stores(self, translation_project, **options):
     users = self.get_users(**options)
     updater = score_updater.get(TranslationProject)(translation_project)
     if options["reset"]:
         updater.clear(users)
     else:
         updater.refresh_scores(users)
Exemple #16
0
def test_score_user_updater(tp0, admin, member):
    user_updater = score_updater.get(admin.__class__)
    admin.score = -999
    admin.save()
    member.score = -777
    member.save()
    assert user_updater == UserScoreUpdater
    updater = user_updater(users=[admin, member])
    assert updater.users == [admin, member]
    result = updater.calculate()
    admin_score = round(sum(admin.scores.values_list("score", flat=True)), 2)
    member_score = round(sum(member.scores.values_list("score", flat=True)), 2)
    assert round(dict(result)[admin.pk], 2) == admin_score
    assert round(dict(result)[member.pk], 2) == member_score
    updater.set_scores(result)
    admin.refresh_from_db()
    member.refresh_from_db()
    assert round(admin.score, 2) == admin_score
    assert round(member.score, 2) == member_score
    admin.score = -999
    admin.save()
    updater = user_updater((admin, ))
    assert updater.users == (admin, )
    result = updater.calculate()
    assert round(dict(result)[admin.pk], 2) == admin_score
    updater.set_scores(result)
    admin.refresh_from_db()
    assert round(admin.score, 2) == admin_score
Exemple #17
0
 def handle_all_stores(self, translation_project, **options):
     users = self.get_users(**options)
     updater = score_updater.get(TranslationProject)(translation_project)
     if options["reset"]:
         updater.clear(users)
     else:
         updater.refresh_scores(users)
Exemple #18
0
def test_score_user_updater_refresh(tp0, admin, member):
    user_updater = score_updater.get(admin.__class__)
    updater = user_updater((admin, ))
    admin_score = admin.score
    admin.score = 0
    admin.save()
    member_score = member.score
    member.score = 0
    member.save()

    updater.refresh_scores()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert admin.score == admin_score
    assert member.score == member_score

    admin.score = 0
    admin.save()
    member.score = 0
    member.save()
    updater.refresh_scores(users=[admin])
    member.refresh_from_db()
    admin.refresh_from_db()
    assert admin.score == admin_score
    assert member.score == 0
Exemple #19
0
 def handle(self, **options):
     users = (list(get_user_model().objects.filter(
         username__in=options["users"]).values_list("pk", flat=True))
              if options["users"] else None)
     if options["reset"]:
         score_updater.get(get_user_model())(users=users).clear()
         return
     for tp in TranslationProject.objects.all():
         data_update = update_data_after(tp,
                                         signals=(update_scores, ),
                                         suppress=(tp.__class__, ),
                                         kwargs=dict(users=users))
         with data_update:
             for store in tp.stores.all():
                 update_scores.send(store.__class__,
                                    instance=store,
                                    users=users)
Exemple #20
0
def test_refresh_scores_language(capfd, admin, member, language0):
    """Reset and set again scores for a language."""
    member.refresh_from_db()
    admin.refresh_from_db()
    updater = score_updater.get(get_user_model())()
    member_score = updater.calculate(users=[member]).first()[1]
    admin_score = updater.calculate(users=[admin]).first()[1]
    member_scores_count = member.scores.filter(tp__language=language0).count()
    admin_scores_count = admin.scores.filter(tp__language=language0).count()
    member_store_scores_count = member.store_scores.filter(
        store__translation_project__language=language0).count()
    admin_store_scores_count = admin.store_scores.filter(
        store__translation_project__language=language0).count()

    call_command('refresh_scores', '--reset', '--language=language0')
    out, err = capfd.readouterr()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert member.score == 0
    assert member.scores.filter(
        tp__language=language0,
        tp__project__disabled=False).count() == 0
    assert member.store_scores.filter(
        store__translation_project__language=language0,
        store__translation_project__project__disabled=False).count() == 0
    assert admin.score == 0
    assert admin.scores.filter(
        tp__language=language0,
        tp__project__disabled=False).count() == 0
    assert admin.store_scores.filter(
        store__translation_project__language=language0,
        store__translation_project__project__disabled=False).count() == 0

    call_command('refresh_scores', '--language=language0')
    out, err = capfd.readouterr()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert round(member.score, 2) == round(member_score, 2)
    assert (member.scores.filter(tp__language=language0).count() ==
            member_scores_count)
    assert (member.store_scores.filter(
        store__translation_project__language=language0).count() ==
        member_store_scores_count)
    assert round(admin.score, 2) == round(admin_score, 2)
    assert (admin.scores.filter(tp__language=language0).count() ==
            admin_scores_count)
    assert (admin.store_scores.filter(
        store__translation_project__language=language0).count() ==
        admin_store_scores_count)
Exemple #21
0
def test_refresh_scores_language(capfd, admin, member, language0):
    """Reset and set again scores for a language."""
    member.refresh_from_db()
    admin.refresh_from_db()
    updater = score_updater.get(get_user_model())()
    member_score = updater.calculate(users=[member]).first()[1]
    admin_score = updater.calculate(users=[admin]).first()[1]
    member_scores_count = member.scores.filter(tp__language=language0).count()
    admin_scores_count = admin.scores.filter(tp__language=language0).count()
    member_store_scores_count = member.store_scores.filter(
        store__translation_project__language=language0).count()
    admin_store_scores_count = admin.store_scores.filter(
        store__translation_project__language=language0).count()

    call_command('refresh_scores', '--reset', '--language=language0')
    out, err = capfd.readouterr()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert member.score == 0
    assert member.scores.filter(tp__language=language0,
                                tp__project__disabled=False).count() == 0
    assert member.store_scores.filter(
        store__translation_project__language=language0,
        store__translation_project__project__disabled=False).count() == 0
    assert admin.score == 0
    assert admin.scores.filter(tp__language=language0,
                               tp__project__disabled=False).count() == 0
    assert admin.store_scores.filter(
        store__translation_project__language=language0,
        store__translation_project__project__disabled=False).count() == 0

    call_command('refresh_scores', '--language=language0')
    out, err = capfd.readouterr()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert round(member.score, 2) == round(member_score, 2)
    assert (member.scores.filter(
        tp__language=language0).count() == member_scores_count)
    assert (member.store_scores.filter(
        store__translation_project__language=language0).count() ==
            member_store_scores_count)
    assert round(admin.score, 2) == round(admin_score, 2)
    assert (admin.scores.filter(
        tp__language=language0).count() == admin_scores_count)
    assert (admin.store_scores.filter(
        store__translation_project__language=language0).count() ==
            admin_store_scores_count)
Exemple #22
0
 def clear(self, users=None):
     tp_scores = self.score_model.objects.all()
     store_scores = self.store_score_model.objects.all()
     user_scores = self.user_score_model.objects.all()
     if users:
         tp_scores = tp_scores.filter(user_id__in=users)
         store_scores = store_scores.filter(user_id__in=users)
         user_scores = user_scores.filter(id__in=users)
     if self.tp:
         tp_scores = tp_scores.filter(tp=self.tp)
         store_scores = store_scores.filter(
             store__translation_project=self.tp)
     tp_scores.delete()
     store_scores.delete()
     user_scores.update(score=0)
     user_score_updater = score_updater.get(get_user_model())(users=users)
     user_score_updater.update(users=users)
Exemple #23
0
def test_refresh_scores_user_project(capfd, admin, member, project0):
    """Reset and set again scores for particular user in project."""
    member.refresh_from_db()
    admin.refresh_from_db()
    updater = score_updater.get(get_user_model())()
    member_score = updater.calculate(users=[member]).first()[1]
    admin_score = admin.score
    member_scores_count = member.scores.filter(tp__project=project0).count()
    admin_scores_count = admin.scores.count()
    member_store_scores_count = member.store_scores.filter(
        store__translation_project__project=project0).count()
    admin_store_scores_count = admin.store_scores.count()

    call_command('refresh_scores', '--reset', '--user=member',
                 '--project=project0')
    out, err = capfd.readouterr()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert member.score == 0
    assert member.scores.filter(tp__project=project0).count() == 0
    assert member.store_scores.filter(
        store__translation_project__project=project0).count() == 0
    assert admin.score == admin_score
    assert admin.scores.count() == admin_scores_count
    assert admin.store_scores.count() == admin_store_scores_count

    call_command('refresh_scores', '--user=member', '--project=project0')
    out, err = capfd.readouterr()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert round(member.score, 2) == round(member_score, 2)
    assert (member.scores.filter(
        tp__project=project0).count() == member_scores_count)
    assert (member.store_scores.filter(
        store__translation_project__project=project0).count() ==
            member_store_scores_count)
    assert round(admin.score, 2) == round(admin_score, 2)
Exemple #24
0
def test_refresh_scores_user_tp(capfd, admin, member, tp0):
    """Reset and set again scores for particular user in TP."""
    member.refresh_from_db()
    admin.refresh_from_db()
    updater = score_updater.get(get_user_model())()
    member_score = updater.calculate(users=[member]).first()[1]
    admin_score = admin.score
    member_scores_count = member.scores.filter(tp=tp0).count()
    admin_scores_count = admin.scores.count()
    member_store_scores_count = member.store_scores.filter(
        store__translation_project=tp0).count()
    admin_store_scores_count = admin.store_scores.count()

    call_command('refresh_scores', '--reset', '--user=member',
                 '--project=project0', '--language=language0')
    out, err = capfd.readouterr()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert member.score == 0
    assert member.scores.filter(tp=tp0).count() == 0
    assert member.store_scores.filter(
        store__translation_project=tp0).count() == 0
    assert admin.score == admin_score
    assert admin.scores.count() == admin_scores_count
    assert admin.store_scores.count() == admin_store_scores_count

    call_command('refresh_scores', '--user=member', '--project=project0',
                 '--language=language0')
    out, err = capfd.readouterr()
    member.refresh_from_db()
    admin.refresh_from_db()
    assert round(member.score, 2) == round(member_score, 2)
    assert member.scores.filter(tp=tp0).count() == member_scores_count
    assert (member.store_scores.filter(
        store__translation_project=tp0).count() ==
        member_store_scores_count)
    assert round(admin.score, 2) == round(admin_score, 2)
Exemple #25
0
def test_score_tp_updater(tp0, admin, member, member2):
    updater = score_updater.get(TranslationProject)(tp0)
    assert updater.tp == tp0
    assert isinstance(updater, TPScoreUpdater)
Exemple #26
0
def update_store_scores_handler(**kwargs):
    store = kwargs["instance"]
    score_updater.get(store.__class__)(store).update(
        users=kwargs.get("users"),
        date=kwargs.get("date"))
Exemple #27
0
def update_tp_scores_handler(**kwargs):
    tp = kwargs["instance"]
    score_updater.get(tp.__class__)(tp).update(
        users=kwargs.get("users"),
        date=kwargs.get("date"))
Exemple #28
0
def update_user_scores_handler(**kwargs):
    score_updater.get(get_user_model())().update(
        users=kwargs.get("users"),
        date=kwargs.get("date"))
Exemple #29
0
def update_user_scores_handler(**kwargs):
    score_updater.get(get_user_model())().update(users=kwargs.get("users"),
                                                 date=kwargs.get("date"))
Exemple #30
0
def update_store_scores_handler(**kwargs):
    tp = kwargs["instance"]
    score_updater.get(tp.__class__)(tp).update()
Exemple #31
0
def update_tp_scores_handler(**kwargs):
    tp = kwargs["instance"]
    score_updater.get(tp.__class__)(tp).update(users=kwargs.get("users"),
                                               date=kwargs.get("date"))
Exemple #32
0
def test_score_tp_updater(tp0, admin, member, member2):
    updater = score_updater.get(TranslationProject)(tp0)
    assert updater.tp == tp0
    assert isinstance(updater, TPScoreUpdater)
Exemple #33
0
def update_tp_scores_handler(**kwargs):
    store = kwargs["instance"]
    score_updater.get(store.__class__)(store).update()
Exemple #34
0
def update_store_scores_handler(**kwargs):
    store = kwargs["instance"]
    score_updater.get(store.__class__)(store).update(users=kwargs.get("users"),
                                                     date=kwargs.get("date"))
Exemple #35
0
def update_user_scores_handler(**kwargs):
    users = kwargs.get("users")
    score_updater.get(get_user_model())(
        users=users).update()