Source code for workflows.filters

"""Filter classes for workflow instances and enrollment requests."""
from __future__ import annotations

from typing import TYPE_CHECKING, Any

import django_filters
from django import forms
from django.utils.translation import gettext_lazy as _

from pki.models import DomainModel
from workflows.models import EnrollmentRequest, State

if TYPE_CHECKING:
    from django.db.models import QuerySet

[docs] class EnrollmentRequestFilter(django_filters.FilterSet): """Filters for the enrollment request list."""
[docs] device_name = django_filters.CharFilter( label=_('Device'), field_name='device__common_name', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control form-control-sm', 'placeholder': _('Search device…')}), )
[docs] include_finalized = django_filters.BooleanFilter( label=_('Include finalized/aborted requests'), method='filter_include_finalized', widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}), )
[docs] domain = django_filters.ModelChoiceFilter( label=_('Domain'), field_name='domain', queryset=DomainModel.objects.all(), widget=forms.Select(attrs={'class': 'form-select form-select-sm'}), )
[docs] protocol = django_filters.CharFilter( label=_('Protocol'), field_name='protocol', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control form-control-sm', 'placeholder': _('EST, CMP, …')}), )
[docs] operation = django_filters.CharFilter( label=_('Operation'), field_name='operation', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control form-control-sm', 'placeholder': _('simpleenroll, …')}), )
[docs] template = django_filters.CharFilter( label=_('Template'), field_name='template', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control form-control-sm', 'placeholder': _('Template…')}), )
[docs] state = django_filters.ChoiceFilter( label=_('State'), field_name='aggregated_state', choices=State.choices, widget=forms.Select(attrs={'class': 'form-select form-select-sm'}), )
[docs] requested_from = django_filters.DateTimeFilter( label=_('Requested from'), field_name='created_at', lookup_expr='gte', widget=forms.DateTimeInput(attrs={'type': 'datetime-local', 'class': 'form-control form-control-sm'}), )
[docs] requested_to = django_filters.DateTimeFilter( label=_('Requested to'), field_name='created_at', lookup_expr='lte', widget=forms.DateTimeInput(attrs={'type': 'datetime-local', 'class': 'form-control form-control-sm'}), )
[docs] class Meta: """Configuration for EnrollmentRequestFilter."""
[docs] model = EnrollmentRequest
[docs] fields: tuple[str, ...] = ()
[docs] def filter_include_finalized( self, queryset: QuerySet[EnrollmentRequest], _name: str, value: Any, ) -> QuerySet[EnrollmentRequest]: """Filter finalized enrollment requests. - Unchecked (value is False/None): only non-finalized requests. - Checked (value is True): include finalized as well. Args: queryset: Base queryset of enrollment requests. _name: Name of the filter (unused). value: Boolean-like value from the filter widget. Returns: QuerySet[EnrollmentRequest]: Filtered queryset. """ if value: return queryset return queryset.filter(finalized=False)