text: """
  Units module API filters
  """
  
  from django.db import models
  from django.db.models import QuerySet
  from django_filters import rest_framework as filters
  
  from .models import CustomUnit
  
  
  class CustomUnitFilter(filters.FilterSet):
      """
      Filter on custom units
      """
      user = filters.BooleanFilter(
          label="filter rate associated to connected user",
          method='user_filter')
      key = filters.CharFilter(
          label="filter rates with key",
          method='key_filter')
      unit_system = filters.CharFilter(
          label="filter by unit system",
          field_name='unit_system',
          lookup_expr='iexact')
      code = filters.CharFilter(
          label="filter by code",
          field_name='code',
          lookup_expr='iexact')
      name = filters.CharFilter(
          label="filter by name",
          field_name='name',
          lookup_expr='icontains')
      relation = filters.CharFilter(
          label="filter by relation",
          field_name='relation',
          lookup_expr='icontains')
      symbol = filters.CharFilter(
          label="filter by symbol",
          field_name='symbol',
          lookup_expr='iexact')
      alias = models.CharField(
          "Alias",
          max_length=20,
          null=True,
          blank=True)
  
      ordering = filters.OrderingFilter(
          # tuple-mapping retains order
          fields=(
              ('key', 'key'),
              ('unit_system', 'unit_system'),
              ('code', 'code'),
              ('name', 'name'),
              ('relation', 'relation'),
              ('symbol', 'symbol'),
              ('alias', 'alias'),
          ),
      )
  
      class Meta:
          """
          Meta
          """
          model = CustomUnit
          fields = [
              'user', 'key',
              'unit_system', 'code', 'name',
              'relation', 'symbol', 'alias'
  
          ]
  
      def user_filter(self, queryset: QuerySet,
                      name: str, value: str) -> QuerySet:
          """
          Filter on request user
          """
          if self.request and self.request.user and \
                  self.request.user.is_authenticated:
              return queryset.filter(**{
                  'user': self.request.user,
              })
          return queryset.filter(user__isnull=True)
  
      def key_filter(self, queryset: QuerySet,
                     name: str, value: str) -> QuerySet:
          """
          Filter on key if request.user is set and authenticated
          """
          if self.request and self.request.user and \
                  self.request.user.is_authenticated:
              return queryset.filter(**{
                  'user': self.request.user,
                  'key': value
              })
          return queryset.filter(user__isnull=True)
  