diff --git a/HISTORY.rst b/HISTORY.rst index 68cbe93..c1887ae 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -7,6 +7,7 @@ UNRELEASED * Extend response of import job api * Added support for django-import-export >= 4.0 * Removed support for django 3.2 +* Add search and ordering to API views 0.5.0 (2023-12-19) ------------------ diff --git a/import_export_extensions/api/views/export_job.py b/import_export_extensions/api/views/export_job.py index 6839edb..c4c43ac 100644 --- a/import_export_extensions/api/views/export_job.py +++ b/import_export_extensions/api/views/export_job.py @@ -1,14 +1,15 @@ +import contextlib import typing from rest_framework import ( decorators, + exceptions, mixins, permissions, response, status, viewsets, ) -from rest_framework.exceptions import ValidationError from rest_framework.request import Request import django_filters @@ -68,7 +69,7 @@ def start(self: "ExportJobViewSet", request: Request): ], )(start) # Correct specs of drf-spectacular if it is installed - try: + with contextlib.suppress(ImportError): from drf_spectacular.utils import extend_schema, extend_schema_view detail_serializer_class = viewset().get_detail_serializer_class() @@ -87,8 +88,6 @@ def start(self: "ExportJobViewSet", request: Request): }, ), )(viewset) - except ImportError: - pass return viewset @@ -113,6 +112,15 @@ class ExportJobViewSet( serializer_class = serializers.ExportJobSerializer resource_class: type[resources.CeleryModelResource] | None = None filterset_class: django_filters.rest_framework.FilterSet = None + search_fields = ("id",) + ordering = ( + "id", + ) + ordering_fields = ( + "id", + "created", + "modified", + ) def get_queryset(self): """Filter export jobs by resource used in viewset.""" @@ -154,7 +162,7 @@ def cancel(self, *args, **kwargs): try: job.cancel_export() except ValueError as error: - raise ValidationError(error.args[0]) from error + raise exceptions.ValidationError(error.args[0]) from error serializer = self.get_serializer(instance=job) return response.Response( diff --git a/import_export_extensions/api/views/import_job.py b/import_export_extensions/api/views/import_job.py index 8f805dd..85300c5 100644 --- a/import_export_extensions/api/views/import_job.py +++ b/import_export_extensions/api/views/import_job.py @@ -1,14 +1,15 @@ +import contextlib import typing from rest_framework import ( decorators, + exceptions, mixins, permissions, response, status, viewsets, ) -from rest_framework.exceptions import ValidationError from ... import models, resources from .. import serializers @@ -37,7 +38,7 @@ def __new__(cls, name, bases, attrs, **kwargs): return viewset # Correct specs of drf-spectacular if it is installed - try: + with contextlib.suppress(ImportError): from drf_spectacular.utils import extend_schema, extend_schema_view detail_serializer_class = viewset().get_detail_serializer_class() @@ -61,8 +62,6 @@ def __new__(cls, name, bases, attrs, **kwargs): }, ), )(viewset) - except ImportError: - pass return viewset @@ -91,6 +90,15 @@ class ImportJobViewSet( queryset = models.ImportJob.objects.all() serializer_class = serializers.ImportJobSerializer resource_class: type[resources.CeleryModelResource] | None = None + search_fields = ("id",) + ordering = ( + "id", + ) + ordering_fields = ( + "id", + "created", + "modified", + ) def get_queryset(self): """Filter import jobs by resource used in viewset.""" @@ -147,7 +155,7 @@ def confirm(self, *args, **kwargs): try: job.confirm_import() except ValueError as error: - raise ValidationError( + raise exceptions.ValidationError( f"Wrong import job status: {job.import_status}", ) from error @@ -165,7 +173,7 @@ def cancel(self, *args, **kwargs): try: job.cancel_import() except ValueError as error: - raise ValidationError( + raise exceptions.ValidationError( f"Wrong import job status: {job.import_status}", ) from error