예제 #1
0
def collect_locale_insights(start_of_today, actions, entities, sync_user):
    """
    Collect insights for each available Locale.
    """
    # Get data sources to retrieve insights from
    privileged_users = get_privileged_users()
    contributors = get_contributors()
    active_users_actions = get_active_users_actions(start_of_today)
    suggestions = get_suggestions()

    actions_dict = group_dict_by(actions, "translation__locale")
    entities_dict = group_dict_by(entities,
                                  "resource__translatedresources__locale")

    LocaleInsightsSnapshot.objects.bulk_create(
        [
            get_locale_insights_snapshot(
                locale,
                start_of_today,
                privileged_users[locale.id],
                contributors[locale.id],
                active_users_actions[locale.id],
                suggestions[locale.id],
                actions_dict[locale.id],
                entities_dict[locale.id],
                sync_user,
            ) for locale in Locale.objects.available()
        ],
        batch_size=1000,
    )
예제 #2
0
def get_active_users_actions(start_of_today):
    """Get actions of the previous year, needed for the Active users charts."""
    actions = (ActionLog.objects.filter(
        created_at__gte=start_of_today - relativedelta(year=1),
        created_at__lt=start_of_today,
    ).values("action_type", "created_at", "performed_by",
             "translation__locale").distinct())

    return group_dict_by(actions, "translation__locale")
예제 #3
0
def get_privileged_users():
    """Get managers and translators."""
    privileged_users = (Locale.objects.available().prefetch_related(
        "managers_group__user_set", "translators_group__user_set").values(
            "pk",
            "managers_group__user__last_login",
            "managers_group__user",
            "translators_group__user",
        ))

    return group_dict_by(privileged_users, "pk")
예제 #4
0
def get_contributors():
    """Get all contributors without system users.

    Note that excluding system user emails in the Translation QuerySet directly is slow.
    """
    system_users = User.objects.filter(
        email__regex=r"^pontoon-(\w+)@example.com$", ).values("pk")

    contributors = (Translation.objects.filter(user__isnull=False).exclude(
        user__pk__in=system_users).values("locale", "user").distinct())

    return group_dict_by(contributors, "locale")
예제 #5
0
def collect_project_insights(start_of_today, actions, entities, sync_user):
    """
    Collect insights for each available Project.
    """
    # Get data sources to retrieve insights from
    actions_dict = group_dict_by(actions,
                                 "translation__entity__resource__project")
    entities_dict = group_dict_by(entities, "resource__project")

    ProjectInsightsSnapshot.objects.bulk_create(
        [
            get_project_insights_snapshot(
                project,
                start_of_today,
                actions_dict[project.id],
                entities_dict[project.id],
                sync_user,
            ) for project in Project.objects.available()
        ],
        batch_size=1000,
    )
예제 #6
0
def get_entities(start_of_today):
    """Get entities created on the previous day."""
    entities = Entity.objects.filter(
        date_created__gte=start_of_today - relativedelta(days=1),
        date_created__lt=start_of_today,
        obsolete=False,
        resource__project__disabled=False,
        resource__project__system_project=False,
        resource__project__visibility="public",
    ).values("pk", "resource__translatedresources__locale")

    return group_dict_by(entities, "resource__translatedresources__locale")
예제 #7
0
파일: tasks.py 프로젝트: quimicefa/pontoon
def get_suggestions():
    """Get currently unreviewed suggestions."""
    suggestions = Translation.objects.filter(
        approved=False,
        fuzzy=False,
        rejected=False,
        entity__obsolete=False,
        entity__resource__project__disabled=False,
        entity__resource__project__system_project=False,
        entity__resource__project__visibility="public",
    ).values("locale", "date")

    return group_dict_by(suggestions, "locale")
예제 #8
0
def get_suggestions():
    """Get currently unreviewed suggestions."""
    suggestions = Translation.objects.filter(
        # Make sure TranslatedResource is still enabled for the locale
        locale=F("entity__resource__translatedresources__locale"),
        approved=False,
        pretranslated=False,
        fuzzy=False,
        rejected=False,
        entity__obsolete=False,
        entity__resource__project__disabled=False,
        entity__resource__project__system_project=False,
        entity__resource__project__visibility="public",
    ).values("locale", "date")

    return group_dict_by(suggestions, "locale")
예제 #9
0
def get_activity_actions(start_of_today):
    """Get actions of the previous day, needed for the Translation and Review activity charts."""
    actions = ActionLog.objects.filter(
        created_at__gte=start_of_today - relativedelta(days=1),
        created_at__lt=start_of_today,
        translation__entity__resource__project__system_project=False,
        translation__entity__resource__project__visibility="public",
    ).values(
        "action_type",
        "performed_by",
        "translation",
        "translation__locale",
        "translation__machinery_sources",
        "translation__user",
        "translation__approved_user",
        "translation__date",
        "translation__approved_date",
    )

    return group_dict_by(actions, "translation__locale")