예제 #1
0
class TransactionFilter(FilterSet):
    withdraw = BooleanFilter(field_name='withdraw_id', method='filter_not_empty')
    deposit = BooleanFilter(field_name='deposit_id', method='filter_not_empty')
    transaction = BooleanFilter(label='transaction', method='filter_transaction')

    def filter_not_empty(self, queryset, name, value):
        """
        check value exists in row (is null or not)
        """
        lookup = '__'.join([name, 'isnull'])
        return queryset.filter(**{lookup: not value})

    def filter_transaction(self, queryset, name, value):
        f_bool = not value
        if value:
            return queryset.filter(deposit_id__isnull=f_bool, withdraw_id__isnull=f_bool)

        return queryset.filter(Q(deposit_id__isnull=f_bool) | Q(withdraw_id__isnull=f_bool))

    class Meta:
        model = Transaction
        fields = [
            'currency',
            'deposit',
            'withdraw',
            'transaction',
            'title',
            'created',
            'updated',
        ]
예제 #2
0
파일: api.py 프로젝트: swiftugandan/kolibri
class ChannelMetadataFilter(FilterSet):
    available = BooleanFilter(method="filter_available")
    has_exercise = BooleanFilter(method="filter_has_exercise")

    class Meta:
        model = models.ChannelMetadata
        fields = (
            'available',
            'has_exercise',
        )

    def filter_has_exercise(self, queryset, name, value):
        channel_ids = []

        for channel in queryset:
            channel_has_exercise = channel.root.get_descendants() \
                .filter(available=True) \
                .filter(kind=content_kinds.EXERCISE) \
                .exists()
            if channel_has_exercise:
                channel_ids.append(channel.id)

        return queryset.filter(id__in=channel_ids)

    def filter_available(self, queryset, name, value):
        return queryset.filter(root__available=value)
예제 #3
0
class DocumentFilter(FilterSet):
    seq_annotations__isnull = BooleanFilter(field_name='seq_annotations',
                                            method='filter_annotations')
    doc_annotations__isnull = BooleanFilter(field_name='doc_annotations',
                                            method='filter_annotations')
    seq2seq_annotations__isnull = BooleanFilter(
        field_name='seq2seq_annotations', method='filter_annotations')
    speech2text_annotations__isnull = BooleanFilter(
        field_name='speech2text_annotations', method='filter_annotations')

    def filter_annotations(self, queryset, field_name, value):
        queryset = queryset.annotate(num_annotations=Count(
            expression=field_name,
            filter=Q(**{f"{field_name}__user": self.request.user})
            | Q(project__collaborative_annotation=True)))

        should_have_annotations = not value
        if should_have_annotations:
            queryset = queryset.filter(num_annotations__gte=1)
        else:
            queryset = queryset.filter(num_annotations__lte=0)

        return queryset

    class Meta:
        model = Document
        fields = ('project', 'text', 'created_at', 'updated_at',
                  'doc_annotations__label__id', 'seq_annotations__label__id',
                  'doc_annotations__isnull', 'seq_annotations__isnull',
                  'seq2seq_annotations__isnull',
                  'speech2text_annotations__isnull')
예제 #4
0
class UserFilter(FilterSet):
    locked = BooleanFilter(name='veterinarian__locked')
    verified = BooleanFilter(name='veterinarian__verified')

    class Meta:
        model = User
        fields = [
            'username', 'email', 'full_name', 'is_active', 'groups',
            'veterinarian__verified', 'veterinarian__locked'
        ]
class RadioVersionDailyFilter(_DailyVersionStatsFilter):
    """Filter for RadioVersionDaily instances."""

    version__radio_version = CharFilter()
    version__is_official_release = BooleanFilter()
    version__is_beta_release = BooleanFilter()

    class Meta:  # noqa: D106
        model = RadioVersionDaily
        fields = "__all__"
class VersionDailyFilter(_DailyVersionStatsFilter):
    """Filter for VersionDaily instances."""

    version__build_fingerprint = CharFilter()
    version__is_official_release = BooleanFilter()
    version__is_beta_release = BooleanFilter()

    class Meta:  # noqa: D106
        model = VersionDaily
        fields = "__all__"
예제 #7
0
class DocumentFilter(FilterSet):
    seq_annotations__isnull = BooleanFilter(field_name='seq_annotations', lookup_expr='isnull')
    doc_annotations__isnull = BooleanFilter(field_name='doc_annotations', lookup_expr='isnull')
    seq2seq_annotations__isnull = BooleanFilter(field_name='seq2seq_annotations', lookup_expr='isnull')
    speech2text_annotations__isnull = BooleanFilter(field_name='speech2text_annotations', lookup_expr='isnull')

    class Meta:
        model = Document
        fields = ('project', 'text', 'meta', 'created_at', 'updated_at',
                  'doc_annotations__label__id', 'seq_annotations__label__id',
                  'doc_annotations__isnull', 'seq_annotations__isnull', 'seq2seq_annotations__isnull', 'speech2text_annotations__isnull')
예제 #8
0
class UserBookOfferFilter(FilterSet):
    """
    Кастомный фильтр для UserOffersViewSet:
    выбор интервала даты создания,
    выбор принятых,
    выбор закрытых
    """
    created_at = DateFromToRangeFilter()
    is_accepted = BooleanFilter()
    is_closed = BooleanFilter()

    class Meta:
        model = UserBookOffer
        fields = ['created_at', 'is_accepted', 'is_closed']
예제 #9
0
파일: user.py 프로젝트: socketbox/studio
class AdminUserFilter(FilterSet):
    keywords = CharFilter(method="filter_keywords")
    is_active = BooleanFilter(method="filter_is_active")
    is_admin = BooleanFilter(method="filter_is_admin")
    chef = BooleanFilter(method="filter_chef")
    location = CharFilter(method="filter_location")
    ids = CharFilter(method="filter_ids")

    def filter_ids(self, queryset, name, value):
        try:
            return queryset.filter(pk__in=value.split(","))
        except ValueError:
            # Catch in case of a poorly formed UUID
            return queryset.none()

    def filter_keywords(self, queryset, name, value):
        regex = r"^(" + "|".join(value.split(" ")) + ")$"
        return queryset.filter(
            Q(first_name__icontains=value)
            | Q(last_name__icontains=value)
            | Q(email__icontains=value)
            | Q(editable_channels__name__iregex=regex)
            | Q(editable_channels__id__iregex=regex)
        )

    def filter_is_active(self, queryset, name, value):
        return queryset.filter(is_active=value)

    def filter_is_admin(self, queryset, name, value):
        return queryset.filter(is_admin=value)

    def filter_chef(self, queryset, name, value):
        chef_channel_query = (
            Channel.objects.filter(editors__id=OuterRef("id"), deleted=False)
            .exclude(ricecooker_version=None)
            .values_list("id", flat=True)
            .distinct()
        )
        return queryset.annotate(
            chef_count=SQCount(chef_channel_query, field="id")
        ).filter(chef_count__gt=0)

    def filter_location(self, queryset, name, value):
        return queryset.filter(information__locations__contains=value)

    class Meta:
        model = User
        fields = ("keywords", "is_active", "is_admin", "chef", "location")
예제 #10
0
class RecipeFilter(FilterSet):
    category__name = InAllCharListFilter(field_name='category__name')
    no_variant = BooleanFilter(field_name='variant_of', lookup_expr='isnull')

    class Meta:
        model = Recipe
        fields = ['logical_delete', 'category__name', 'id']
예제 #11
0
class DocumentFilterSet(FilterSet):

    is_tagged = BooleanFilter(label="Is tagged",
                              field_name="tags",
                              lookup_expr="isnull",
                              exclude=True)

    tags__id__all = TagsFilter()

    tags__id__none = TagsFilter(exclude=True)

    is_in_inbox = InboxFilter()

    class Meta:
        model = Document
        fields = {
            "title": CHAR_KWARGS,
            "content": CHAR_KWARGS,
            "archive_serial_number": INT_KWARGS,
            "created": DATE_KWARGS,
            "added": DATE_KWARGS,
            "modified": DATE_KWARGS,
            "correspondent__id": ID_KWARGS,
            "correspondent__name": CHAR_KWARGS,
            "tags__id": ID_KWARGS,
            "tags__name": CHAR_KWARGS,
            "document_type__id": ID_KWARGS,
            "document_type__name": CHAR_KWARGS,
        }
예제 #12
0
class ProductFilter(FilterSet):
    # explicit filter declaration
    max_price = NumberFilter(field_name="price",
                             lookup_expr='lte',
                             label='highest price')
    max_sub_price = NumberFilter(field_name="subproduct__sub_price",
                                 lookup_expr='lte')
    sub = NumberFilter(field_name="subproduct", lookup_expr='exact')
    int_id = NumberFilter(method='filter_method_typed')
    number_id = NumberFilter(method='filter_method_untyped',
                             help_text='some injected help text')
    number_id_ext = NumberFilter(method=external_filter_method)
    # implicit filter declaration
    subproduct__sub_price = NumberFilter()  # reverse relation
    other_sub_product__uuid = UUIDFilter()  # forward relation
    # special cases
    ordering = OrderingFilter(
        fields=('price', 'in_stock'),
        field_labels={
            'price': 'Price',
            'in_stock': 'in stock'
        },
    )
    in_categories = BaseInFilter(field_name='category')
    is_free = BooleanFilter(field_name='price', lookup_expr='isnull')
    price_range = RangeFilter(field_name='price')
    model_multi_cat = ModelMultipleChoiceFilter(field_name='category',
                                                queryset=Product.objects.all())
    model_single_cat = ModelChoiceFilter(field_name='category',
                                         queryset=Product.objects.all())
    all_values = AllValuesFilter(field_name='price')

    custom_filter = CustomBooleanFilter(field_name='price',
                                        lookup_expr='isnull')
    custom_underspec_filter = CustomBaseInFilter(field_name='category')

    model_multi_cat_relation = ModelMultipleChoiceFilter(
        field_name='other_sub_product', queryset=OtherSubProduct.objects.all())

    price_range_vat = RangeFilter(field_name='price_vat')
    price_range_vat_decorated = extend_schema_field(OpenApiTypes.INT)(
        RangeFilter(field_name='price_vat'))

    class Meta:
        model = Product
        fields = [
            'category',
            'in_stock',
            'max_price',
            'max_sub_price',
            'sub',
            'subproduct__sub_price',
            'other_sub_product__uuid',
        ]

    def filter_method_typed(self, queryset, name, value: int):
        return queryset.filter(id=int(value))

    def filter_method_untyped(self, queryset, name, value):
        return queryset.filter(id=int(value))  # pragma: no cover
예제 #13
0
class GoalFilter(FilterSet):
    eisenhower_score = NumberFilter(method='filter_eisenhower_score')
    is_parent = BooleanFilter(method='filter_is_parent')
    num_title_chars = NumberFilter()

    class Meta:
        model = Goal
        fields = [
            'parent_goal', 'verb', 'verb_phrase', 'target_date',
            'end_state_description', 'urgency', 'importance',
            'eisenhower_score', 'complete', 'is_parent', 'num_title_chars',
            'created_date', 'updated_date', 'subgoals'
        ]

    def filter_eisenhower_score(self, queryset, value, name):
        if value:
            queryset = queryset.annotate(
                eisenhower_score=((F('urgency') * F('importance')) /
                                  100)).filter(eisenhower_score=value)
        return queryset

    def filter_is_parent(self, queryset, value, name):
        if value:
            queryset = queryset.annotate(
                is_parent=F('parent_goal') is not int).filter(is_parent=value)
        return queryset
class UserFilter(FilterSet):
    name = CharFilter(field_name='full_name', lookup_expr='icontains')
    is_staff = BooleanFilter(field_name='is_staff')

    class Meta:
        model = User
        fields = ['email', 'name', 'full_name', 'date_of_birth', 'is_active', 'is_staff']
예제 #15
0
class DailyStudyCreatedDayFilter(FilterSet):
    begining = DateFilter(field_name='created_day', lookup_expr='gte')
    end = DateFilter(field_name='created_day', lookup_expr='lte')
    is_validated = BooleanFilter(method='is_validated_filter')

    class Meta:
        model = DailyStudy
        fields = {
            'begining', 'end', 'is_validated', 'user', 'user__classroom',
            'user__classroom__area'
        }

    def is_validated_filter(self, queryset, name, value):
        """
        student dailystudyleri gece otomatik oluşturuluyor ve is_validated false oluyor.
        Ancak student dailystudy'i daha doldurmadı ve bütün studyler default oalrak 0 geldi.

        dailystudy onay ekranında görünen daily studylerin student tarafından doldurulduğunu tespit etmek için
        updated__isnull kontrolü ekledim.
        Otomatik eklenen dailystudyler student tarafından update edildikten sonra onay ekranına düşecek..
        """
        if not value:
            return queryset.filter(updated__isnull=False, is_validated=False)
        else:
            return queryset
예제 #16
0
class DocumentFilterSet(FilterSet):

    CHAR_KWARGS = {
        "lookup_expr": (
            "startswith",
            "endswith",
            "contains",
            "istartswith",
            "iendswith",
            "icontains"
        )
    }

    correspondent__name = CharFilter(
        field_name="correspondent__name", **CHAR_KWARGS)
    correspondent__slug = CharFilter(
        field_name="correspondent__slug", **CHAR_KWARGS)
    tags__name = CharFilter(
        field_name="tags__name", **CHAR_KWARGS)
    tags__slug = CharFilter(
        field_name="tags__slug", **CHAR_KWARGS)
    tags__empty = BooleanFilter(
        field_name="tags", lookup_expr="isnull", distinct=True)

    class Meta:
        model = Document
        fields = {
            "title": [
                "startswith", "endswith", "contains",
                "istartswith", "iendswith", "icontains"
            ],
            "content": ["contains", "icontains"],
        }
예제 #17
0
class TaxonFilter(FilterSet):
    """Taxon filter."""

    current = BooleanFilter(field_name="current")

    class Meta:
        """Class opts."""

        model = Taxon
        fields = {
            "name_id": ["exact", ],
            "name": ["icontains", ],
            "rank": ["icontains", "in", "gt", "gte", "lt", "lte"],
            # "parent": ["exact", ],  # performance bomb
            "publication_status": ["isnull", ],
            # current: provided through field
            "author": ["icontains", ],
            "canonical_name": ["icontains", ],
            "taxonomic_name": ["icontains", ],
            "paraphyletic_groups": ["exact", ],
            # "vernacular_name": ["icontains", ],
            "vernacular_names": ["icontains", ],
            # "eoo" requires polygon filter,

        }
예제 #18
0
class OrganizationFilter(FilterSet):
    users = NumberInFilter(field_name='users', lookup_expr='in', label='Filter by user ID (or a list of user IDs)')
    contacts = NumberInFilter(field_name='contacts', lookup_expr='in', label='Filter by contact ID (or a list of contact IDs)')
    laboratory = BooleanFilter(label='Filter by whether organization is a laboratory or not')

    class Meta:
        model = Organization
        fields = ['users', 'contacts', 'laboratory', ]
예제 #19
0
class ContactFilter(FilterSet):
    org = NumberInFilter(field_name='organization', lookup_expr='in', label='Filter by organization ID (or a list of organization IDs)')
    ownerorg = NumberInFilter(field_name='owner_organization', lookup_expr='in', label='Filter by owner organization ID (or a list of owner organization IDs)')
    active = BooleanFilter(label='Filter by whether contact is active or not')

    class Meta:
        model = Contact
        fields = ['org', 'ownerorg', 'active', ]
예제 #20
0
class EmailListFilterSet(FilterSet):

    name = CharFilter(lookup_expr="icontains")
    email = CharFilter(lookup_expr="icontains", field_name="email__email")
    requireInternalAddress = BooleanFilter(field_name="require_internal_address")

    class Meta:
        model = EmailList
        fields = ("name", "email", "requireInternalAddress")
예제 #21
0
class ChannelSetFilter(FilterSet):
    edit = BooleanFilter(method="filter_edit")

    def filter_edit(self, queryset, name, value):
        return queryset.filter(edit=True)

    class Meta:
        model = ChannelSet
        fields = ("edit", )
예제 #22
0
class FilePrescriptionFilter(FilterSet):
    prescription_id = NumberFilter(field_name='prescription_id', label='소견서 객체의 pk')
    writer_id = NumberFilter(label='작성자(의사) 계정의 id')
    writer_name = CharFilter(label='작성자(의사)의 이름')
    patient_id = NumberFilter(label='환자 계정의 id')
    patient_name = CharFilter(label='환자의 이름')
    status = ChoiceFilter(field_name='status', choices=HealthStatus.choices)
    created_at = DateLookupChoiceFilter(
        field_class=DateFilter.field_class,
        field_name='created_at',
        lookup_choices=[
            ('exact', 'Equals'),
            ('gte', 'Greater than'),
            ('lte', 'Less than')
        ], label='소견서 작성일(FilePrescription은 소견서 작성시 생성됨)'
    )
    date = LookupChoiceFilter(
        field_class=DateFilter.field_class,
        field_name='date',
        lookup_choices=[
            ('exact', 'Equals'),
            ('gte', 'Greater than'),
            ('lte', 'Less than')
        ], label='파일 업로드 날짜')
    active = BooleanFilter(field_name='active', label='파일 업로드가 활성화 되었는지 표시')
    uploaded = BooleanFilter(field_name='uploaded', label='환자가 파일을 올렸는지 표시')
    checked = BooleanFilter(field_name='checked', label='의사가 환자가 올린 파일을 확인했는지 표시')
    ordering = OrderingFilter(
        fields={
            'created_at': 'created_at',
            'date': 'date'
        },
        field_labels={
            'created_at': '소견서 작성일',
            'date': '파일 업로드 날짜'
        }
    )

    class Meta:
        model = FilePrescription
        fields = ['writer_id', 'writer_name', 'patient_id', 'patient_name', 'prescription_id', 'status', 'created_at',
                  'date', 'active', 'uploaded', 'checked', 'ordering']
예제 #23
0
class StudentFilter(FilterSet):
    only_active = BooleanFilter(method='filter_active', label=_('Include only active users'))

    def filter_active(self, queryset: QuerySet, field_name, value: bool):
        if value:
            return queryset.filter(is_active=True)
        return queryset

    class Meta:
        model = User
        fields = ('only_active',)
예제 #24
0
파일: api.py 프로젝트: chrislun16/kolibri
class ChannelMetadataFilter(FilterSet):
    available = BooleanFilter(method="filter_available", label="Available")
    has_exercise = BooleanFilter(method="filter_has_exercise",
                                 label="Has exercises")

    class Meta:
        model = models.ChannelMetadata
        fields = ("available", "has_exercise")

    def filter_has_exercise(self, queryset, name, value):
        queryset = queryset.annotate(has_exercise=Exists(
            models.ContentNode.objects.filter(
                kind=content_kinds.EXERCISE,
                available=True,
                channel_id=OuterRef("id"),
            )))

        return queryset.filter(has_exercise=True)

    def filter_available(self, queryset, name, value):
        return queryset.filter(root__available=value)
예제 #25
0
class ChannelFilter(BaseChannelFilter):
    edit = BooleanFilter(method="filter_edit")
    view = BooleanFilter(method="filter_view")
    bookmark = BooleanFilter(method="filter_bookmark")

    def filter_edit(self, queryset, name, value):
        return queryset.filter(edit=True)

    def filter_view(self, queryset, name, value):
        return queryset.filter(view=True)

    def filter_bookmark(self, queryset, name, value):
        return queryset.filter(bookmark=True)

    class Meta:
        model = Channel
        fields = base_channel_filter_fields + (
            "bookmark",
            "edit",
            "view",
        )
예제 #26
0
class DocumentFilter(FilterSet):
    seq_annotations__isnull = BooleanFilter(field_name='seq_annotations', method='filter_annotations')
    doc_annotations__isnull = BooleanFilter(field_name='doc_annotations', method='filter_annotations')
    seq2seq_annotations__isnull = BooleanFilter(field_name='seq2seq_annotations', method='filter_annotations')

    def filter_annotations(self, queryset, field_name, value):
        queryset = queryset.annotate(num_annotations=Count(field_name))

        should_have_annotations = not value
        if should_have_annotations:
            queryset = queryset.filter(num_annotations__gte=1)
        else:
            queryset = queryset.filter(num_annotations__lte=0)

        return queryset

    class Meta:
        model = Document
        fields = ('project', 'text', 'meta', 'created_at', 'updated_at',
                  'doc_annotations__label__id', 'seq_annotations__label__id',
                  'doc_annotations__isnull', 'seq_annotations__isnull', 'seq2seq_annotations__isnull')
예제 #27
0
class BeerFilterSet(FilterSet):

    o = BeerOrderingFilter(fields=[
        "name",
        "abv",
        "ibu",
        "style__name",
        "style__alternate_names__name",
        "manufacturer__name",
        "most_recently_added",
    ], )

    search = CharFilter(method="filter_search")
    on_tap = BooleanFilter(method="filter_on_tap")

    def filter_search(self, queryset, name, value):
        base_cond = Q()
        # what I want to search for:
        # each word (split by whitespace) is included in at least
        # one of the below six fields,
        # so you can search for "straight monkey" to get monkeynaut
        # or "belgi ipa ommeg" to get all Ommegang Belgian IPAs
        for word in value.split():
            base_cond &= (
                Q(name__icontains=word, )
                | Q(alternate_names__name__icontains=word, )
                | Q(manufacturer__name__icontains=word, )
                | Q(
                    # the field is case-insensitive, so no need for icontains
                    style__name=word, )
                | Q(
                    # the field is case-insensitive, so no need for icontains
                    style__alternate_names__name=word, )
                | Q(manufacturer__alternate_names__name__icontains=word, ))
        queryset = queryset.filter(base_cond).distinct()
        return queryset

    def filter_on_tap(self, queryset, name, value):
        return queryset.filter(taps__isnull=not value).distinct()

    class Meta:
        fields = {
            "name": DEFAULT_STRING_FILTER_OPERATORS,
            "abv": DEFAULT_NUMERIC_FILTER_OPERATORS,
            "ibu": DEFAULT_NUMERIC_FILTER_OPERATORS,
            "manufacturer__name": DEFAULT_NUMERIC_FILTER_OPERATORS,
            "taps__venue__name": DEFAULT_STRING_FILTER_OPERATORS,
            "style__name": DEFAULT_STRING_FILTER_OPERATORS,
            "style__alternate_names__name": DEFAULT_STRING_FILTER_OPERATORS,
            "taps__venue__slug": DEFAULT_STRING_FILTER_OPERATORS,
        }
        model = models.Beer
예제 #28
0
class ChannelMetadataFilter(FilterSet):
    available = BooleanFilter(method="filter_available")
    has_exercise = BooleanFilter(method="filter_has_exercise")

    def filter_has_exercise(self, queryset, name, value):
        channel_ids = []
        for c in queryset:
            num_exercises = c.root.get_descendants().filter(
                kind=content_kinds.EXERCISE).count()
            if num_exercises > 0:
                channel_ids.append(c.id)
        return queryset.filter(id__in=channel_ids)

    def filter_available(self, queryset, name, value):
        return queryset.filter(root__available=value)

    class Meta:
        model = models.ChannelMetadata
        fields = [
            'available',
            'has_exercise',
        ]
예제 #29
0
class PickupDatesFilter(FilterSet):
    store = NumberFilter(field_name='store')
    group = NumberFilter(field_name='store__group__id')
    date = ISODateTimeFromToRangeFilter(field_name='date')
    feedback_possible = BooleanFilter(method='filter_feedback_possible')

    class Meta:
        model = PickupDate
        fields = ['store', 'group', 'date', 'series', 'feedback_possible']

    def filter_feedback_possible(self, qs, name, value):
        if value is True:
            return qs.only_feedback_possible(self.request.user)
        return qs.exclude_feedback_possible(self.request.user)
예제 #30
0
파일: job_post.py 프로젝트: TIHLDE/Lepton
class JobPostFilter(FilterSet):
    """ Filters job posts by expired """

    expired = BooleanFilter(method="filter_expired", label="Expired")

    class Meta:
        model: JobPost
        fields = ["expired"]

    def filter_expired(self, queryset, name, value):
        if value:
            return queryset.filter(
                deadline__lt=yesterday()).order_by("-deadline")
        return queryset.filter(deadline__gte=yesterday()).order_by("deadline")