Beispiel #1
0
class DataStampFilter(filters.FilterSet):
    min_temp = filters.NumberFilter(field_name="temperature",
                                    lookup_expr='gte')
    max_temp = filters.NumberFilter(field_name="temperature",
                                    lookup_expr='lte')
    min_date = filters.DateFilter(field_name="date", lookup_expr='gte')
    max_date = filters.DateFilter(field_name="date", lookup_expr='lte')
    min_time = filters.TimeFilter(field_name="time", lookup_expr='gte')
    max_time = filters.TimeFilter(field_name="time", lookup_expr='lte')
    min_humidity = filters.NumberFilter(field_name="humidity",
                                        lookup_expr='gte')
    max_humidity = filters.NumberFilter(field_name="humidity",
                                        lookup_expr='lte')
    min_wind_speed = filters.NumberFilter(field_name="wind_speed",
                                          lookup_expr='gte')
    max_wind_speed = filters.NumberFilter(field_name="wind_speed",
                                          lookup_expr='lte')
    min_rain_1h = filters.NumberFilter(field_name="rain_1h", lookup_expr='gte')
    max_rain_1h = filters.NumberFilter(field_name="rain_1h", lookup_expr='lte')

    class Meta:
        model = DataStamp
        fields = [
            'station', 'min_temp', 'max_temp', 'min_date', 'max_date',
            'station__external_id', 'max_time', 'min_time', 'max_humidity',
            'min_humidity', 'max_wind_speed', 'min_wind_speed', 'min_rain_1h',
            'max_rain_1h'
        ]
Beispiel #2
0
class MessageFilter(filters.FilterSet):
    """Defines the filter fields for ListMessageView."""
    created_date = filters.DateFilter(field_name='created_date',
                                      lookup_expr='exact')
    created_date__gt = filters.DateFilter(field_name='created_date',
                                          lookup_expr='gt')
    created_date__lt = filters.DateFilter(field_name='created_date',
                                          lookup_expr='lt')
    created_date__range = filters.DateFilter(field_name='created_date',
                                             lookup_expr='range')
    created_time = filters.TimeFilter(field_name='created_time',
                                      lookup_expr='exact')
    created_time__gt = filters.TimeFilter(field_name='created_time',
                                          lookup_expr='gt')
    created_time__lt = filters.TimeFilter(field_name='created_time',
                                          lookup_expr='lt')
    created_time__range = filters.TimeFilter(field_name='created_time',
                                             lookup_expr='range')
    sender = filters.ModelChoiceFilter(queryset=get_user_model().objects.all())
    subject = filters.CharFilter(field_name='subject', lookup_expr='icontains')
    text = filters.CharFilter(field_name='text', lookup_expr='icontains')

    class Meta:
        model = Message
        fields = ['created_date', 'created_time', 'sender', 'subject', 'text']
Beispiel #3
0
class HoraActividadFilter(filters.FilterSet):
    hora_mayor_que = filters.TimeFilter(field_name="hora_inicio",
                                        lookup_expr='gte')
    hora_menor_que = filters.TimeFilter(field_name="hora_inicio",
                                        lookup_expr='lte')

    class Meta:
        model = Actividad
        fields = ['actividad', 'hora_mayor_que', 'hora_menor_que', 'lugar']
Beispiel #4
0
class HobbyEventFilter(filters.FilterSet):
    category = HierarchyModelMultipleChoiceFilter(
        field_name='hobby__categories', queryset=HobbyCategory.objects.all(),
        label=_('HobbyCategory id'),
    )
    ordering = NearestOrderingFilter(
        fields=(
            # (field name, param name)
            ('distance_to_point', 'nearest'),
        ),
        field_labels={
            'distance_to_point': _('Nearest'),
        },
        label=_('Ordering. Choices: `nearest`')
    )
    near_latitude = dummy_filter(filters.NumberFilter(label=_('Near latitude. This field is required when `nearest` ordering is used.')))
    near_longitude = dummy_filter(filters.NumberFilter(label=_('Near longitude. This field is required when `nearest` ordering is used.')))
    hobby = filters.ModelChoiceFilter(field_name='hobby', queryset=Hobby.objects.all(), label=_('Hobby id'))
    start_date_from = filters.DateFilter(field_name='start_date', lookup_expr='gte',
                                         label=_(f'Return results starting from given date (inclusive).'
                                                 f' Use ISO 8601 date format, eg. "2020-01-30".'))
    start_date_to = filters.DateFilter(field_name='start_date', lookup_expr='lte',
                                       label=_(f'Return results with starting date up to given date (inclusive).'
                                               f' Use ISO 8601 date format, eg. "2020-01-30".'))
    start_time_from = filters.TimeFilter(field_name='start_time', lookup_expr='gte',
                                         label=_(f'Return results with starting time from given time (inclusive)'
                                                 f' Eg. "19:00".'))
    start_time_to = filters.TimeFilter(field_name='start_time', lookup_expr='lte',
                                       label=_(f'Return results with starting time up to given time (inclusive)'
                                               f' Eg. "21:00".'))
    start_weekday = filters.MultipleChoiceFilter(choices=HobbyEvent.DAY_OF_WEEK_CHOICES,
                                                 label=_(f'Return results with starting date in given weekday.'
                                                         f' Enter a number from 1 to 7. Use ISO 8601 weekdays:'
                                                         f' 1=Monday, 7=Sunday.'))
    exclude_past_events = filters.BooleanFilter(method='filter_past_events', label=_('Show upcoming only'))
    price_type = filters.CharFilter(method='filter_price_type', label=_('Filter HobbyEvents by price type'))

    class Meta:
        model = HobbyEvent
        fields = ['category', 'hobby', 'start_date_from', 'start_date_to',
                  'start_time_from', 'start_time_to', 'start_weekday']

    def filter_past_events(self, queryset, name, value):
        is_filtering_requested = value
        date_is_before_today = Q(end_date__lt=datetime.date.today())
        date_is_today_but_time_is_in_past = Q(end_date=datetime.date.today()) & Q(end_time__lt=datetime.datetime.now().time())
        if is_filtering_requested:
            return queryset.exclude(date_is_before_today | date_is_today_but_time_is_in_past)
        else:
            return queryset

    def filter_price_type(self, queryset, name, value):
        value_in_price_type_choices = any(value == price_type for price_type, label in Hobby.PRICE_TYPE_CHOICES)
        if value_in_price_type_choices:
            queryset = queryset.filter(hobby__price_type=value)
        return queryset
class ScheduleFilter(filters.FilterSet):

	date_from = filters.DateFilter(field_name="date", lookup_expr="gte")
	date_to   = filters.DateFilter(field_name="date", lookup_expr="lte")
	time_from = filters.TimeFilter(field_name="time", lookup_expr="gte")
	time_to   = filters.TimeFilter(field_name="time", lookup_expr="lte")


	class Meta:
		model = Schedule
		fields = ['is_done']
Beispiel #6
0
class HoraFilter(filters.FilterSet):
    hora_mayor_que = filters.TimeFilter(field_name="actividad__hora_inicio",
                                        lookup_expr='gte')
    hora_menor_que = filters.TimeFilter(field_name="actividad__hora_inicio",
                                        lookup_expr='lte')

    class Meta:
        model = Lugar
        fields = [
            'nombre',
            'hora_mayor_que',
            'hora_menor_que',
        ]
Beispiel #7
0
class RideFilter(filters.FilterSet):

    time__gte = filters.TimeFilter(
        field_name='time',
        lookup_expr='gte',
    )

    class Meta:
        model = Ride
        fields = (
            'destination',
            'departure',
            'date',
            'time__gte',
        )
Beispiel #8
0
class EventFilter(filters.FilterSet):
    """Defines the filter fields for ListEventView."""
    description = filters.CharFilter(field_name='description',
                                     lookup_expr='icontains')
    end_date = filters.DateFilter(field_name='end_date', lookup_expr='exact')
    end_date__gt = filters.DateFilter(field_name='end_date', lookup_expr='gt')
    end_date__lt = filters.DateFilter(field_name='end_date', lookup_expr='lt')
    end_date__range = filters.DateFilter(field_name='end_date',
                                         lookup_expr='range')
    end_time = filters.TimeFilter(field_name='end_time', lookup_expr='exact')
    end_time__gt = filters.TimeFilter(field_name='end_time', lookup_expr='gt')
    end_time__lt = filters.TimeFilter(field_name='end_time', lookup_expr='lt')
    end_time__range = filters.TimeFilter(field_name='end_time',
                                         lookup_expr='range')
    lineup = filters.ModelChoiceFilter(queryset=Tally.objects.all())
    name = filters.CharFilter(field_name='name', lookup_expr='icontains')
    promoter = filters.ModelChoiceFilter(queryset=Promoter.objects.all(),
                                         to_field_name='slug')
    start_date = filters.DateFilter(field_name='start_date',
                                    lookup_expr='exact')
    start_date__gt = filters.DateFilter(field_name='start_date',
                                        lookup_expr='gt')
    start_date__lt = filters.DateFilter(field_name='start_date',
                                        lookup_expr='lt')
    start_date__range = filters.DateFilter(field_name='start_date',
                                           lookup_expr='range')
    start_time = filters.TimeFilter(field_name='start_time',
                                    lookup_expr='exact')
    start_time__gt = filters.TimeFilter(field_name='start_time',
                                        lookup_expr='gt')
    start_time__lt = filters.TimeFilter(field_name='start_time',
                                        lookup_expr='lt')
    start_time__range = filters.TimeFilter(field_name='start_time',
                                           lookup_expr='range')
    ticket_types = filters.ModelChoiceFilter(queryset=TicketType.objects.all())
    venue = filters.ModelChoiceFilter(queryset=Venue.objects.all(),
                                      to_field_name='slug')

    class Meta:
        model = Event
        fields = [
            'description', 'end_date', 'end_time', 'lineup', 'name',
            'promoter', 'start_date', 'start_time', 'ticket_types', 'venue'
        ]
Beispiel #9
0
class TaskFilterSet(filters.FilterSet):
    """
    Filterset for Task
    """
    date = filters.DateFilter(name='date',
                              lookup_expr=DATETIME_LOOKUPS,
                              method='filter_timing')
    start_time = filters.TimeFilter(name='start_time',
                                    lookup_expr=TIME_LOOKUPS,
                                    method='filter_timing')
    end_time = filters.TimeFilter(name='end_time',
                                  lookup_expr=TIME_LOOKUPS,
                                  method='filter_timing')

    # pylint: disable=too-few-public-methods
    class Meta:
        """
        Meta options for TaskFilterSet
        """
        model = Task
        fields = [
            'locations', 'status', 'project', 'parent', 'date', 'start_time',
            'end_time'
        ]

    # pylint: disable=unused-argument
    def filter_timing(self, queryset, name, value):
        """
        Method to filter against task timing using TaskOccurrences
        """

        # get the filter
        try:
            the_filter = self.get_filters()[name]
        except KeyError:
            # this name isn't a valid filter
            return queryset

        # first try the exact name
        data = self.data.get(name)
        if data is not None:
            query_name = name
        else:
            # get the lookups
            lookups = the_filter.lookup_expr
            # loop through lookups to find which one is being used
            if lookups:
                for lookup in lookups:
                    query_name = self.get_filter_name(name, lookup)
                    data = self.data.get(query_name)
                    if data is not None:
                        break

        if data is None:
            # no data was found
            return queryset

        filter_args = {query_name: data}
        # get task ids
        # pylint: disable=no-member
        task_ids = TaskOccurrence.objects.filter(**filter_args).values_list(
            'task_id', flat=True).distinct()
        return queryset.filter(id__in=task_ids)
Beispiel #10
0
class SeriesFilter(filters.FilterSet):
    """
    Provides filtering functionality for the
    :class:`~django_dicom.views.series.SeriesViewSet`.

    Available filters are:

        * *id*: Primary key
        * *uid*: Series Instance UID
        * *patient_id*: Related :class:`~django_dicom.models.patient.Patient`
          instance's primary key
        * *study_uid*: Related :class:`~django_dicom.models.study.Study`
          instance's :attr:`~django_dicom.models.study.Study.uid` value
        * *study_description*: Related
          :class:`~django_dicom.models.study.Study` instance's
          :attr:`~django_dicom.models.study.Study.description` value
          (in-icontains)
        * *modality*: Any of the values defined in
          :class:`~dicom_parser.utils.code_strings.modality.Modality`
        * *description*: Series description value (contains, icontains, or
          exact)
        * *number*: Series number value
        * *protocol_name*: Protocol name value (contains)
        * *scanning_sequence*: Any combination of the values defined in
          :class:`~dicom_parser.utils.code_strings.scanning_sequence.ScanningSequence`
        * *sequence_variant*: Any combination of the values defined in
          :class:`~dicom_parser.utils.code_strings.sequence_variant.SequenceVariant`
        * *echo_time*: :attr:`~django_dicom.models.series.Series.echo_time`
          value
        * *inversion_time*:
          :attr:`~django_dicom.models.series.Series.inversion_time` value
        * *repetition_time*:
          :attr:`~django_dicom.models.series.Series.repetition_time` value
        * *flip_angle*: Any of the existing
          :attr:`~django_dicom.models.series.Series.flip_angle` in the database
        * *created_after_date*: Create after date
        * *date*: Exact :attr:`~django_dicom.models.series.Series.date` value
        * *created_before_date*: Create before date
        * *created_after_time*: Create after time
        * *created_before_time*: Create before time
        * *manufacturer*: Any of the existing
          :attr:`~django_dicom.models.series.Series.manufacturer` in the
          database
        * *manufacturer_model_name*: Any of the existing
          :attr:`~django_dicom.models.series.Series.manufacturer_model_name` in
          the database
        * *device_serial_number*: Any of the existing
          :attr:`~django_dicom.models.series.Series.device_serial_number` in
          the database
        * *institution_name*: Any of the existing
          :attr:`~django_dicom.models.series.Series.institution_name` in the
          database
        * *pulse_sequence_name*:
          :attr:`~django_dicom.models.series.Series.pulse_sequence_name` value
          (in-icontains)
        * *sequence_name*:
          :attr:`~django_dicom.models.series.Series.sequence_name` value
          (in-icontains)
    """

    study_uid = filters.CharFilter("study__uid",
                                   lookup_expr="exact",
                                   label="Study UID")
    study_description = CharInFilter(
        field_name="study__description",
        lookup_expr="in",
        label="Study description icontains",
        method=filter_in_string,
    )
    modality = filters.ChoiceFilter("modality", choices=Modality.choices())
    description = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    protocol_name = filters.CharFilter("protocol_name", lookup_expr="contains")
    scanning_sequence = filters.MultipleChoiceFilter(
        "scanning_sequence",
        choices=ScanningSequence.choices(),
        conjoined=True,
        method=filter_array,
    )
    sequence_variant = filters.MultipleChoiceFilter(
        "sequence_variant",
        choices=SequenceVariant.choices(),
        conjoined=True,
        method=filter_array,
    )
    flip_angle = filters.AllValuesFilter("flip_angle")
    created_after_date = filters.DateFilter("date", lookup_expr="gte")
    date = filters.DateFilter("date")
    created_before_date = filters.DateFilter("date", lookup_expr="lte")
    created_after_time = filters.TimeFilter("time", lookup_expr="gte")
    created_before_time = filters.TimeFilter("time", lookup_expr="lte")
    manufacturer = filters.AllValuesFilter("manufacturer")
    manufacturer_model_name = filters.AllValuesFilter(
        "manufacturer_model_name")
    magnetic_field_strength = filters.AllValuesFilter(
        "magnetic_field_strength")
    device_serial_number = filters.AllValuesFilter("device_serial_number")
    institution_name = filters.AllValuesFilter("institution_name")
    pulse_sequence_name = CharInFilter(
        field_name="pulse_sequence_name",
        lookup_expr="icontains",
        method=filter_in_string,
    )
    sequence_name = CharInFilter(
        field_name="sequence_name",
        lookup_expr="icontains",
        method=filter_in_string,
    )
    pixel_spacing = filters.RangeFilter("pixel_spacing__0")
    slice_thickness = filters.RangeFilter("slice_thickness")
    repetition_time = filters.RangeFilter("repetition_time")
    inversion_time = filters.RangeFilter("inversion_time")
    echo_time = filters.RangeFilter("echo_time")
    header_fields = filters.CharFilter("image", method=filter_header)

    class Meta:
        model = Series
        fields = (
            "id",
            "uid",
            "patient_id",
            "study_uid",
            "study_description",
            "modality",
            "description",
            "protocol_name",
            "number",
            "created_after_date",
            "created_before_date",
            "created_after_time",
            "created_before_time",
            "echo_time",
            "inversion_time",
            "repetition_time",
            "slice_thickness",
            "pixel_spacing",
            "scanning_sequence",
            "sequence_variant",
            "flip_angle",
            "manufacturer",
            "manufacturer_model_name",
            "magnetic_field_strength",
            "device_serial_number",
            "institution_name",
            "patient__id",
            "pulse_sequence_name",
            "sequence_name",
        )
Beispiel #11
0
class SeriesFilter(filters.FilterSet):
    """
    Provides useful filtering options for the :class:`~django_dicom.models.series.Series`
    class.
    
    """

    study_uid = filters.CharFilter("study__uid",
                                   lookup_expr="exact",
                                   label="Study UID")
    study_description = filters.CharFilter("study__description",
                                           lookup_expr="contains",
                                           label="Study description contains")
    modality = filters.ChoiceFilter("modality", choices=Modality.choices())
    description = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    protocol_name = filters.CharFilter("protocol_name", lookup_expr="contains")
    scanning_sequence = filters.MultipleChoiceFilter(
        "scanning_sequence",
        choices=ScanningSequence.choices(),
        conjoined=True,
        method=filter_array,
    )
    sequence_variant = filters.MultipleChoiceFilter(
        "sequence_variant",
        choices=SequenceVariant.choices(),
        conjoined=True,
        method=filter_array,
    )
    flip_angle = filters.AllValuesFilter("flip_angle")
    created_after_date = filters.DateFilter("date", lookup_expr="gte")
    date = filters.DateFilter("date")
    created_before_date = filters.DateFilter("date", lookup_expr="lte")
    created_after_time = filters.TimeFilter("time", lookup_expr="gte")
    created_before_time = filters.TimeFilter("time", lookup_expr="lte")
    manufacturer = filters.AllValuesFilter("manufacturer")
    manufacturer_model_name = filters.AllValuesFilter(
        "manufacturer_model_name")
    magnetic_field_strength = filters.AllValuesFilter(
        "magnetic_field_strength")
    device_serial_number = filters.AllValuesFilter("device_serial_number")
    institution_name = filters.AllValuesFilter("institution_name")

    class Meta:
        model = Series
        fields = (
            "id",
            "uid",
            "patient_id",
            "study_uid",
            "study_description",
            "modality",
            "description",
            "protocol_name",
            "number",
            "created_after_date",
            "created_before_date",
            "created_after_time",
            "created_before_time",
            "echo_time",
            "inversion_time",
            "repetition_time",
            "scanning_sequence",
            "sequence_variant",
            "flip_angle",
            "manufacturer",
            "manufacturer_model_name",
            "magnetic_field_strength",
            "device_serial_number",
            "institution_name",
            "patient__id",
        )
Beispiel #12
0
class CafeteriaFilterSet(filters.FilterSet):
    open_from = filters.TimeFilter(method='get_open_from')
    open_to = filters.TimeFilter(method='get_open_to')
    open_now = filters.BooleanFilter(method='get_open_now')
    prefix_name = filters.CharFilter(method='get_name_prefix')
    owner_id = filters.NumberFilter(method='get_for_owner')
    have_vegs = filters.BooleanFilter(method='get_for_vegetarian')
    min_avg_review = filters.NumberFilter(method='get_with_min_review')

    class Meta:
        model = Cafeteria
        fields = [
            'open_from', 'open_to', 'open_now', 'prefix_name', 'owner_id',
            'have_vegs', 'min_avg_review'
        ]

    def get_open_now(self, queryset, field_name, value):
        is_open = value
        now = datetime.now().time()
        if is_open is True:
            return queryset.filter(open_from__lte=now).filter(open_to__gte=now)
        elif is_open is False:
            return (queryset.filter(open_from__gt=now)
                    | queryset.filter(open_to__lt=now)).distinct()
        else:
            return queryset

    def get_name_prefix(self, queryset, field_name, value):
        if value is None:
            return queryset
        prefix = value.strip()
        return queryset.filter(name__istartswith=prefix)

    def get_for_owner(self, queryset, field_name, value):
        owner_id = value
        if owner_id is None:
            return queryset
        return queryset.filter(owner_id=owner_id)

    def get_for_vegetarian(self, queryset, field_name, value):
        if value is None:
            return queryset
        for_vegs = FixedMenuOption.objects.filter(
            vegetarian=value).values_list('cafeteria_id')
        return queryset.filter(id__in=for_vegs)

    def get_open_from(self, queryset, field_name, value):
        if value is None:
            return queryset
        return queryset.filter(open_from__lte=value)

    def get_open_to(self, queryset, field_name, value):
        if value is None:
            return queryset
        return queryset.filter(open_to__gte=value)

    def get_with_min_review(self, queryset, field_name, value):
        if value is None:
            return queryset
        return queryset.annotate(
            avg_review=Avg('fixed_menu_options__avg_review_stars')).filter(
                avg_review__gte=value)
Beispiel #13
0
class KaznetTaskFilterSet(KaznetFilterSet):
    """
    Filterset for Task
    """
    date = filters.DateFilter(
        name='date',
        lookup_expr=DATE_LOOKUPS,
        method='filter_timing'
    )
    start_time = filters.TimeFilter(
        name='start_time',
        lookup_expr=TIME_LOOKUPS,
        method='filter_timing'
    )
    end_time = filters.TimeFilter(
        name='end_time',
        lookup_expr=TIME_LOOKUPS,
        method='filter_timing'
    )
    modified = filters.DateTimeFilter(
        name='modified',
        lookup_expr=DATETIME_LOOKUPS,
        method='filter_datetime'
    )
    required_expertise = filters.CharFilter(
        name='required_expertise',
        lookup_expr=EXPERTISE_LOOKUPS,
        method='filter_expertise'
    )

    # pylint: disable=too-few-public-methods
    class Meta:
        """
        Meta options for TaskFilterSet
        """
        model = Task
        fields = [
            'locations',
            'modified',
            'status',
            'project',
            'parent',
            'client',
            'date',
            'start_time',
            'end_time',
            'required_expertise'
        ]

    # pylint: disable=unused-argument
    def filter_timing(self, queryset, name, value):
        """
        Method to filter against task timing using TaskOccurrences
        """
        filter_args = self._get_date_time_filter_args(name)

        if filter_args is None:
            return queryset

        # get task ids
        # pylint: disable=no-member
        task_ids = TaskOccurrence.objects.filter(
            **filter_args).values_list('task_id', flat=True).distinct()
        return queryset.filter(id__in=task_ids)

    def filter_expertise(self, queryset, name, value):
        """
        Method to filter against task required_expertise
        """
        filter_args = self._get_filter_args(name)

        if filter_args is None:
            return queryset
        return queryset.filter(**filter_args)