Skip to content

Commit

Permalink
Merge 8a91d28 into 2113dc8
Browse files Browse the repository at this point in the history
  • Loading branch information
helllllllder committed Apr 1, 2022
2 parents 2113dc8 + 8a91d28 commit b0c0819
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 113 deletions.
62 changes: 6 additions & 56 deletions bothub/api/v2/examples/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from bothub.common.models import Repository
from bothub.common.models import RepositoryExample

from bothub.utils import filter_validate_entities


class ExamplesFilter(filters.FilterSet):
class Meta:
Expand Down Expand Up @@ -187,63 +189,11 @@ def filter_intent_id(self, queryset, name, value):
return queryset.filter(intent__pk=value)

def filter_has_valid_entities(self, queryset, name, value):
result_queryset = queryset.annotate(
original_entities_count=Count(
"entities",
filter=Q(
translations__original_example__entities__repository_example=F("pk")
)
& Q(translations__language=value),
distinct=True,
)
).annotate(
entities_count=Count(
"translations__entities",
filter=Q(
Q(
translations__entities__repository_translated_example__language=value
)
| Q(
translations__entities__repository_translated_example__language=F(
"repository_version_language__repository_version__repository__language"
)
),
translations__entities__entity__in=F(
"translations__original_example__entities__entity"
),
),
distinct=True,
)
return filter_validate_entities(queryset, name, value).filter(
original_entities_count=F("entities_count")
)
return result_queryset.filter(original_entities_count=F("entities_count"))

def filter_has_invalid_entities(self, queryset, name, value):
result_queryset = queryset.annotate(
original_entities_count=Count(
"entities",
filter=Q(
translations__original_example__entities__repository_example=F("pk")
)
& Q(translations__language=value),
distinct=True,
)
).annotate(
entities_count=Count(
"translations__entities",
filter=Q(
Q(
translations__entities__repository_translated_example__language=value
)
| Q(
translations__entities__repository_translated_example__language=F(
"repository_version_language__repository_version__repository__language"
)
),
translations__entities__entity__in=F(
"translations__original_example__entities__entity"
),
),
distinct=True,
)
return filter_validate_entities(queryset, name, value).exclude(
original_entities_count=F("entities_count")
)
return result_queryset.exclude(original_entities_count=F("entities_count"))
62 changes: 6 additions & 56 deletions bothub/api/v2/translator/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
RepositoryTranslatedExample,
)

from bothub.utils import filter_validate_entities


class RepositoryTranslatorFilter(filters.FilterSet):
class Meta:
Expand Down Expand Up @@ -156,66 +158,14 @@ def filter_intent_id(self, queryset, name, value):
return queryset.filter(intent__pk=value)

def filter_has_valid_entities(self, queryset, name, value):
result_queryset = queryset.annotate(
original_entities_count=Count(
"entities",
filter=Q(
translations__original_example__entities__repository_example=F("pk")
)
& Q(translations__language=value),
distinct=True,
)
).annotate(
entities_count=Count(
"translations__entities",
filter=Q(
Q(
translations__entities__repository_translated_example__language=value
)
| Q(
translations__entities__repository_translated_example__language=F(
"repository_version_language__repository_version__repository__language"
)
),
translations__entities__entity__in=F(
"translations__original_example__entities__entity"
),
),
distinct=True,
)
return filter_validate_entities(queryset, name, value).filter(
original_entities_count=F("entities_count")
)
return result_queryset.filter(original_entities_count=F("entities_count"))

def filter_has_invalid_entities(self, queryset, name, value):
result_queryset = queryset.annotate(
original_entities_count=Count(
"entities",
filter=Q(
translations__original_example__entities__repository_example=F("pk")
)
& Q(translations__language=value),
distinct=True,
)
).annotate(
entities_count=Count(
"translations__entities",
filter=Q(
Q(
translations__entities__repository_translated_example__language=value
)
| Q(
translations__entities__repository_translated_example__language=F(
"repository_version_language__repository_version__repository__language"
)
),
translations__entities__entity__in=F(
"translations__original_example__entities__entity"
),
),
distinct=True,
)
return filter_validate_entities(queryset, name, value).exclude(
original_entities_count=F("entities_count")
)
return result_queryset.exclude(original_entities_count=F("entities_count"))


class TranslationsTranslatorFilter(filters.FilterSet):
Expand Down
31 changes: 30 additions & 1 deletion bothub/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from collections import OrderedDict
from botocore.exceptions import ClientError
from django.conf import settings
from django.db.models import IntegerField, Subquery
from django.db.models import IntegerField, Subquery, Q, F, Count
from django.utils.text import slugify
from django.utils.translation import ugettext_lazy as _
from django_elasticsearch_dsl import Document
Expand Down Expand Up @@ -380,3 +380,32 @@ def save(self, action="create", **kwargs):

def update(self, instance, action="create", **kwargs):
return super().update(instance, action=action, **kwargs)


def filter_validate_entities(queryset, name, value):
entities = list(
queryset.values_list("entities__entity", flat=True).order_by().distinct()
)

result_queryset = queryset.annotate(
original_entities_count=Count(
"entities",
filter=Q(translations__language=value),
distinct=True,
)
).annotate(
entities_count=Count(
"translations__entities",
filter=Q(
Q(translations__entities__repository_translated_example__language=value)
| Q(
translations__entities__repository_translated_example__language=F(
"repository_version_language__repository_version__repository__language"
)
),
translations__entities__entity__in=entities,
),
distinct=True,
)
)
return result_queryset

0 comments on commit b0c0819

Please sign in to comment.