Exemplo n.º 1
0
class CompetitionFilter(filters.FilterSet):
    """customized filters for the CompetitionList class"""
    from_achievement_date = filters.DateTimeFilter(
        field_name='distance_achievement_date', lookup_expr='gte')
    to_achievement_date = filters.DateTimeFilter(
        field_name='distance_achievement_date', lookup_expr='lte')
    min_distance_in_feet = filters.NumberFilter(field_name='distance_in_feet',
                                                lookup_expr='gte')
    max_distance_in_feet = filters.NumberFilter(field_name='distance_in_feet',
                                                lookup_expr='lte')
    drone_name = filters.AllValuesFilter(field_name='drone__name')
    pilot_name = filters.AllValuesFilter(field_name='pilot__name')

    class Meta:
        """model related to the filter set"""
        model = Competition
        # field names and filter names that we want to include
        # in the filters
        fields = [
            'distance_in_feet',
            'from_achievement_date',
            'to_achievement_date',
            'min_distance_in_feet',
            'max_distance_in_feet',
            # drone__name will be accessed as drone_name
            'drone_name',
            # pilot__name will be accessed as pilot_name
            'pilot_name'
        ]
Exemplo n.º 2
0
class CompetitionFilter(dfilters.FilterSet):
    """
    Custom filter class for
    for the competition API view classes
    """

    from_achievement_date = dfilters.DateTimeFilter(
        field_name='distance_achievement_date', lookup_expr='gte')
    to_achievement_date = dfilters.DateTimeFilter(
        field_name='distance_achievement_date', lookup_expr='lte')
    min_distance_in_feet = dfilters.NumberFilter(field_name='distance_in_feet',
                                                 lookup_expr='gte')
    max_distance_in_feet = dfilters.NumberFilter(field_name='distance_in_feet',
                                                 lookup_expr='lte')
    drone_name = dfilters.AllValuesFilter(
        field_name='drone__name')  # drone.name field
    pilot_name = dfilters.AllValuesFilter(
        field_name='pilot__name')  # pilot.name field

    class Meta:
        model = Competition
        fields = (
            'distance_in_feet',
            'from_achievement_date',
            'to_achievement_date',
            'min_distance_in_feet',
            'max_distance_in_feet',
            # drone__name will be accessed as drone_name
            'drone_name',
            # pilot__name will be accessed as pilot_name
            'pilot_name',
        )
Exemplo n.º 3
0
class PatientFilter(filters.FilterSet):
    """
    Provides useful filtering options for the :class:`~django_dicom.models.patient.Patient`
    class.
    
    """

    born_after_date = filters.DateFilter("date_of_birth", lookup_expr="gte")
    born_before_date = filters.DateFilter("date_of_birth", lookup_expr="lte")
    name_prefix = filters.AllValuesFilter("name_prefix")
    sex = filters.ChoiceFilter("sex", choices=Sex.choices())
    uid = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    given_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    middle_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    family_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    name_suffix = filters.AllValuesFilter("name_suffix")
    study__id = filters.NumberFilter(method="filter_by_study")

    class Meta:
        model = Patient
        fields = (
            "id",
            "uid",
            "born_after_date",
            "born_before_date",
            "name_prefix",
            "given_name",
            "middle_name",
            "family_name",
            "name_suffix",
        )

    def filter_by_study(self, queryset, name, value):
        if not value:
            return queryset

        series = Series.objects.filter(study__id=value)
        patient_ids = set(series.values_list("patient", flat=True))
        return queryset.filter(id__in=patient_ids)
Exemplo n.º 4
0
class UserFilter(filters.FilterSet):
    """
    Provides useful filtering options for the
    :class:`~accounts.models.user.User` model.
    """

    username = filters.LookupChoiceFilter(
        lookup_choices=DEFUALT_LOOKUP_CHOICES)
    first_name = filters.LookupChoiceFilter(
        lookup_choices=DEFUALT_LOOKUP_CHOICES)
    last_name = filters.LookupChoiceFilter(
        lookup_choices=DEFUALT_LOOKUP_CHOICES)
    email = filters.LookupChoiceFilter(lookup_choices=DEFUALT_LOOKUP_CHOICES)
    institute = filters.AllValuesFilter(field_name="profile__institute")

    class Meta:
        model = User
        fields = (
            "id",
            "username",
            "first_name",
            "last_name",
            "email",
            "institute",
            "study",
        )
Exemplo n.º 5
0
class PlayerScoreFilter(filters.FilterSet):
    min_score = filters.NumberFilter(field_name='score', lookup_expr='gte')
    max_score = filters.NumberFilter(field_name='score', lookup_expr='lte')
    from_score_date = filters.DateTimeFilter(field_name='score_date',
                                             lookup_expr='gte')
    to_score_date = filters.DateTimeFilter(field_name='score_date',
                                           lookup_expr='lte')
    player_name = filters.AllValuesFilter(field_name='player__name')
    game_name = filters.AllValuesFilter(field_name='game__name')

    class Meta:
        model = PlayerScore
        fields = ('score', 'from_score_date', 'to_score_date', 'min_score', 'max_score',\
                # player__name will be accessed as player_name

                'player_name',\
                # game__name will be accessed as game_name

                'game_name',
                )
Exemplo n.º 6
0
class ProfilesFilter(dfilters.FilterSet):
    """
    profiles username filter class for
    for the Profile model
    """

    username = dfilters.AllValuesFilter(
        field_name='user__username')  # user.username field

    class Meta:
        model = Profile
        fields = ('username', )
Exemplo n.º 7
0
class PatientFilter(filters.FilterSet):
    """
    Provides useful filtering options for the :class:`~django_dicom.models.patient.Patient`
    class.
    
    """

    born_after_date = filters.DateFilter("date_of_birth", lookup_expr="gte")
    born_before_date = filters.DateFilter("date_of_birth", lookup_expr="lte")
    name_prefix = filters.AllValuesFilter("name_prefix")
    given_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    middle_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    family_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    name_suffix = filters.AllValuesFilter("name_suffix")

    class Meta:
        model = Patient
        fields = (
            "id",
            "uid",
            "born_after_date",
            "born_before_date",
            "name_prefix",
            "given_name",
            "middle_name",
            "family_name",
            "name_suffix",
        )
Exemplo n.º 8
0
class OutputDefinitionFilter(filters.FilterSet):
    """
    Provides useful filtering options for the
    :class:`~django_analyses.models.output.definitions.output_definition.OutputDefinition`
    model.

    """

    output_specification = filters.AllValuesFilter("specification_set")

    class Meta:
        model = OutputDefinition
        fields = "key", "output_specification"
Exemplo n.º 9
0
class InputDefinitionFilter(filters.FilterSet):
    """
    Provides useful filtering options for the
    :class:`~django_analyses.models.input.definitions.input_definition.InputDefinition`
    model.

    """

    input_specification = filters.AllValuesFilter("specification_set")

    class Meta:
        model = InputDefinition
        fields = "key", "required", "is_configuration", "input_specification"
Exemplo n.º 10
0
class ScanFilter(filters.FilterSet):
    """
    Provides useful filtering options for the
    :class:`~django_dicom.models.scan.Scan` class.
    """

    description = filters.LookupChoiceFilter(
        "description", lookup_choices=LOOKUP_CHOICES,
    )
    number = filters.NumberFilter("number")
    scan_time = filters.DateTimeFromToRangeFilter("time")
    created = filters.DateTimeFromToRangeFilter("created")
    institution_name = filters.AllValuesFilter("institution_name")
    dicom_id_in = NumberInFilter(field_name="dicom__id", lookup_expr="in")
    sequence_type = filters.MultipleChoiceFilter(
        field_name="dicom__sequence_type",
        # Exclude the null value choices because it doesn't seem to integrate
        # well with DRF.
        choices=SEQUENCE_TYPE_CHOICES[:-1],
        # Create DRF compatible null filter.
        null_value=None,
        null_label="Unknown",
    )
    subject_id_number = filters.LookupChoiceFilter(
        "session__subject__id_number", lookup_choices=LOOKUP_CHOICES,
    )
    subject_first_name = filters.LookupChoiceFilter(
        "session__subject__first_name", lookup_choices=LOOKUP_CHOICES,
    )
    subject_last_name = filters.LookupChoiceFilter(
        "session__subject__last_name", lookup_choices=LOOKUP_CHOICES,
    )
    study_groups = filters.ModelMultipleChoiceFilter(
        queryset=Group.objects.all()
    )

    class Meta:
        model = Scan
        fields = (
            "id",
            "echo_time",
            "inversion_time",
            "repetition_time",
            "is_updated_from_dicom",
            "dicom__id",
            "session",
        )
Exemplo n.º 11
0
class ExecucaoContratoFilter(filters.FilterSet):
    year = filters.AllValuesFilter(field_name='year__year', empty_label=None)
    category = filters.ModelChoiceFilter(
        queryset=CategoriaContrato.objects.all(),
        field_name='categoria',
        empty_label='Todas categorias')

    def __init__(self, data=None, queryset=None, *args, **kwargs):
        super().__init__(data=data, queryset=queryset, *args, **kwargs)
        if 'year' not in self.data:
            ordered = queryset.order_by('-year__year')
            year = ordered.values_list('year__year', flat=True).first()

            data = self.data.copy()
            data['year'] = year
            self.data = data

    class Meta:
        model = ExecucaoContrato
        fields = ['year', 'category']
Exemplo n.º 12
0
class ScanFilter(filters.FilterSet):
    """
    Provides useful filtering options for the :class:`~django_dicom.models.series.Series`
    class.
    
    """

    description = filters.LookupChoiceFilter(
        "description",
        lookup_choices=[
            ("contains", "Contains (case-sensitive)"),
            ("icontains", "Contains (case-insensitive)"),
            ("exact", "Exact"),
        ],
    )
    number = filters.NumberFilter("number")
    sequence_type = filters.AllValuesMultipleFilter("sequence_type")
    # spatial_resolution = filters.AllValuesFilter("spatial_resolution")
    scan_time = filters.DateTimeFromToRangeFilter("time")
    created = filters.DateTimeFromToRangeFilter("created")
    institution_name = filters.AllValuesFilter("institution_name")
    dicom_id_in = NumberInFilter(field_name="dicom__id", lookup_expr="in")

    class Meta:
        model = Scan
        fields = (
            "id",
            "description",
            "number",
            "created",
            "scan_time",
            "echo_time",
            "inversion_time",
            "repetition_time",
            "sequence_type",
            # "spatial_resolution",
            "institution_name",
            "is_updated_from_dicom",
            "dicom__id",
            "subject",
        )
Exemplo n.º 13
0
class VariantFilter(df_filters.FilterSet):
    gene = df_filters.ModelChoiceFilter(queryset=Gene.objects.all())
    gene_symbol = df_filters.CharFilter(field_name='gene__symbol',
                                        label='Gene Symbol')
    name = df_filters.CharFilter(field_name='name')
    description = df_filters.CharFilter(field_name='description')
    so_name = df_filters.AllValuesFilter(field_name='so_name',
                                         label='Sequence Ontology Name')
    sources = df_filters.BaseInFilter(field_name='sources',
                                      lookup_expr='contains')
    in_svip = df_filters.BooleanFilter(label='Is SVIP Variant?',
                                       method='filter_has_svipdata')

    # noinspection PyMethodMayBeStatic
    def filter_has_svipdata(self, queryset, name, value):
        if value:
            # we require the .distinct() here because we occasionally have multiple VariantInSVIP entries
            # keyed to the same variant (although that's clearly not great), and this implicit join
            # causes those variants to be repeated as many times as there are referring VinSVIP entries
            return queryset.filter(variantinsvip__isnull=False).distinct()
        # otherwise, return all the variants, svip data or not
        return queryset
Exemplo n.º 14
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",
        )
Exemplo n.º 15
0
class BrandModelFilter(filters.FilterSet):
    name = filters.AllValuesFilter('name')

    class Meta:
        model = ModelName
        fields = ('brandname', 'name')
Exemplo n.º 16
0
class SeriesFilter(filters.FilterSet):
    """
    Provides useful filtering options for the :class:`~django_dicom.models.series.Series`
    class.
    
    """

    patient_uid = filters.CharFilter(
        "patient__uid", lookup_expr="icontains", label="Patient ID contains"
    )
    study_uid = filters.CharFilter(
        "study__uid", lookup_expr="contains", 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")
    created_before_date = filters.DateFilter("date", lookup_expr="lte")
    created_after_time = filters.DateFilter("time", lookup_expr="gte")
    created_before_time = filters.DateFilter("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_uid",
            "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",
        )
Exemplo n.º 17
0
class PatientFilter(filters.FilterSet):
    """
    Provides filtering functionality for the
    :class:`~django_dicom.views.patient.PatientViewSet`.

    Available filters are:

        * *id*: Primary key
        * *uid*: Patient UID (contains, icontains, or exact)
        * *born_after_date*: Earliest date of birth
        * *born_before_date*: Latest date of birth
        * *name_prefix*: Any of the existing *name_prefix* values in the
          database
        * *given_name*: Given name value (contains, icontains, or exact)
        * *middle_name*: Middle name value (contains, icontains, or exact)
        * *family_name*: Family name value (contains, icontains, or exact)
        * *name_suffix*: Any of the existing *name_prefix* values in the
          database
        * *sex*: Any of the sex options defined in the
          :class:`~dicom_parser.utils.code_strings.sex.Sex`
          :class:`~enum.Enum`
        * *study__id*: Related :class:`~django_dicom.models.study.Study` ID
    """

    born_after_date = filters.DateFilter("date_of_birth", lookup_expr="gte")
    born_before_date = filters.DateFilter("date_of_birth", lookup_expr="lte")
    name_prefix = filters.AllValuesFilter("name_prefix")
    sex = filters.ChoiceFilter("sex", choices=Sex.choices())
    uid = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    given_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    middle_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    family_name = filters.LookupChoiceFilter(lookup_choices=[
        ("contains", "Contains (case-sensitive)"),
        ("icontains", "Contains (case-insensitive)"),
        ("exact", "Exact"),
    ])
    name_suffix = filters.AllValuesFilter("name_suffix")
    study__id = filters.NumberFilter(method="filter_by_study")

    class Meta:
        model = Patient
        fields = (
            "id",
            "uid",
            "born_after_date",
            "born_before_date",
            "name_prefix",
            "given_name",
            "middle_name",
            "family_name",
            "name_suffix",
        )

    def filter_by_study(self, queryset: QuerySet, name: str,
                        value: int) -> QuerySet:
        """
        Returns all :class:`~django_dicom.models.patient.Patient` instances
        that have :class:`~django_dicom.models.series.Series` instances
        belonging to the :class:`~django_dicom.models.study.Study` with the
        specified *value* as primary key.

        Used by
        :attr:`~django_dicom.filters.patient_filter.PatientFilter.study__id`.

        Parameters
        ----------
        queryset : :class:`~django.db.models.query.QuerySet`
            :class:`~django_dicom.models.patient.Patient` instances
        name : str
            Name of the queried filter field
        value : int
            :class:`~django_dicom.models.study.Study` primary key

        Returns
        -------
        :class:`~django.db.models.query.QuerySet`
            Filtered :class:`~django_dicom.models.patient.Patient` instances
        """

        if not value:
            return queryset
        series = Series.objects.filter(study__id=value)
        patient_ids = set(series.values_list("patient", flat=True))
        return queryset.filter(id__in=patient_ids)