Skip to content

Commit

Permalink
feat(api): add missing API filters
Browse files Browse the repository at this point in the history
Add important API filters that enable the following:
1. Ability to list extract metadata applicable only to a given data source and/or data source version.
2. Ability to list upload metadata from a given facility and/or on a given date.
  • Loading branch information
kennedykori committed Sep 19, 2022
1 parent 230fece commit 1f67b13
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 9 deletions.
18 changes: 18 additions & 0 deletions apps/core/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from django_filters.rest_framework import FilterSet


class BaseFilterSet(FilterSet):
"""
The base `FilterSet` from which all other filter sets are derived from.
"""

...


class AuditBaseFilterSet(BaseFilterSet):
"""
The base `FilterSet` from which all other `AuditBase` model filter sets are
derived from.
"""

...
21 changes: 12 additions & 9 deletions apps/sql_data/apiviews.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@

from apps.core.apiviews import AuditBaseViewSet

from .filters import (
DataSourceVersionFilter,
SQLDatabaseSourceFilter,
SQLExtractMetadataFilter,
SQLUploadChunkFilter,
SQLUploadMetadataFilter,
)
from .models import (
DataSourceVersion,
SQLDatabaseSource,
Expand All @@ -28,15 +35,15 @@ class DataSourceVersionViewSet(AuditBaseViewSet):

queryset = DataSourceVersion.objects.all()
serializer_class = DataSourceVersionSerializer
filterset_fields = ["id", "data_source", "data_source_version"]
filterset_class = DataSourceVersionFilter


class SQLDatabaseViewSet(AuditBaseViewSet):
"""SQL Database Sources API."""

queryset = SQLDatabaseSource.objects.all()
serializer_class = SQLDatabaseSerializer
filterset_fields = ["id", "name", "database_name", "database_vendor"]
filterset_class = SQLDatabaseSourceFilter


class SQLExtractMetadataViewSet(AuditBaseViewSet):
Expand All @@ -46,13 +53,7 @@ class SQLExtractMetadataViewSet(AuditBaseViewSet):
"applicable_source_versions", "data_source"
).all()
serializer_class = SQLExtractMetadataSerializer
filterset_fields = [
"id",
"name",
"data_source__database_name",
"version",
"preferred_uploads_name",
]
filterset_class = SQLExtractMetadataFilter


class SQLUploadChunkViewSet(
Expand All @@ -65,6 +66,7 @@ class SQLUploadChunkViewSet(

queryset = SQLUploadChunk.objects.all()
serializer_class = SQLUploadChunkSerializer
filterset_class = SQLUploadChunkFilter


class SQLUploadMetadataViewSet(AuditBaseViewSet):
Expand All @@ -74,6 +76,7 @@ class SQLUploadMetadataViewSet(AuditBaseViewSet):
"upload_chunks"
).all()
serializer_class = SQLUploadMetadataSerializer
filterset_class = SQLUploadMetadataFilter

@action(
detail=True,
Expand Down
64 changes: 64 additions & 0 deletions apps/sql_data/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
from apps.core.filters import AuditBaseFilterSet

from .models import (
DataSourceVersion,
SQLDatabaseSource,
SQLExtractMetadata,
SQLUploadChunk,
SQLUploadMetadata,
)


class DataSourceVersionFilter(AuditBaseFilterSet):
"""Filter for the `DataSourceVersion` model."""

class Meta:
model = DataSourceVersion
fields = ("id", "data_source", "data_source_version")


class SQLDatabaseSourceFilter(AuditBaseFilterSet):
"""Filter for the `SQLDatabaseSource` model."""

class Meta:
model = SQLDatabaseSource
fields = ("id", "name", "database_name", "database_vendor")


class SQLExtractMetadataFilter(AuditBaseFilterSet):
"""Filter for the `SQLExtractMetadata` model."""

class Meta:
model = SQLExtractMetadata
fields = (
"id",
"name",
"data_source",
"applicable_source_versions",
"version",
"preferred_uploads_name",
)


class SQLUploadChunkFilter(AuditBaseFilterSet):
"""Filter for the `SQLUploadChunk` model."""

class Meta:
model = SQLUploadChunk
fields = ("id", "upload_metadata")


class SQLUploadMetadataFilter(AuditBaseFilterSet):
"""Filter for the `SQLUploadMetadata` model."""

class Meta:
model = SQLUploadMetadata
fields = {
"id": ["exact"],
"extract_metadata": ["exact"],
"org_unit_code": ["exact"],
"org_unit_name": ["exact", "icontains"],
"start_time": ["exact", "lt", "gt"],
"finish_time": ["exact", "lt", "gt"],
"is_consumed": ["exact"],
}

0 comments on commit 1f67b13

Please sign in to comment.