in pontoon/insights/utils.py [0:0]
def get_global_pretranslation_quality(category, id):
start_date = get_insight_start_date()
sync_user = User.objects.get(email="pontoon-sync@example.com").pk
pretranslation_users = User.objects.filter(
email__in=[
"pontoon-tm@example.com",
"pontoon-gt@example.com",
]
).values_list("pk", flat=True)
actions = (
ActionLog.objects.filter(
created_at__gte=start_date,
action_type__in=["translation:approved", "translation:rejected"],
translation__user__in=pretranslation_users,
)
.exclude(performed_by=sync_user)
# Truncate to month and add to select list
.annotate(month=TruncMonth("created_at"))
# Group By month and locale
.values("month", f"translation__{category}")
# Select the sum of the grouping
.annotate(
pretranslations_approved_sum=Count(
"id", filter=Q(action_type="translation:approved")
)
)
.annotate(
pretranslations_rejected_sum=Count(
"id", filter=Q(action_type="translation:rejected")
)
)
# Select month and values
.values(
"month",
f"translation__{category}__{id}",
f"translation__{category}__name",
"pretranslations_approved_sum",
"pretranslations_rejected_sum",
)
.order_by("month")
)
data = {
"all": {
"name": "All",
"approval_rate": [None] * 12,
}
}
approved = "pretranslations_approved_sum"
rejected = "pretranslations_rejected_sum"
totals = [
{
approved: 0,
rejected: 0,
}
for x in range(0, 12)
]
for action in actions:
key = action[f"translation__{category}__{id}"]
name = action[f"translation__{category}__name"]
month_index = relativedelta(
action["month"].replace(tzinfo=None), start_date
).months
if category == "locale":
name = f"{name} · {key}"
item = data.setdefault(
key,
{
"name": name,
"approval_rate": [None] * 12,
},
)
item["approval_rate"][month_index] = get_approval_rate(action)
totals[month_index][approved] += action[approved]
totals[month_index][rejected] += action[rejected]
# Monthly totals across the entire category
total_approval_rates = data["all"]["approval_rate"]
for idx, _ in enumerate(total_approval_rates):
total_approval_rates[idx] = get_approval_rate(totals[idx])
total_approval_rates = [
get_approval_rate(totals[idx]) for idx, _ in enumerate(total_approval_rates)
]
return {
"dates": sorted(list({convert_to_unix_time(x["month"]) for x in actions})),
"dataset": json.dumps([v for _, v in data.items()]),
}