Skip to content

Commit

Permalink
convert Handler search to class based function, add OpenAPI schema au…
Browse files Browse the repository at this point in the history
…to generated docs
  • Loading branch information
dpgraham4401 committed Oct 10, 2023
1 parent 18ae88c commit 43f88c4
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 19 deletions.
4 changes: 2 additions & 2 deletions server/apps/sites/urls.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
from django.urls import include, path

from apps.sites.views import ( # type: ignore
HandlerSearchView,
RcraSiteView,
SiteDetailView,
SiteListView,
SiteSearchView,
rcrainfo_site_search_view,
)

urlpatterns = [
path(
"rcra/",
include(
[
path("handler/search", rcrainfo_site_search_view),
path("handler/search", HandlerSearchView.as_view()),
path("handler/<int:pk>", RcraSiteView.as_view()),
]
),
Expand Down
2 changes: 1 addition & 1 deletion server/apps/sites/views/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from .site_views import ( # type: ignore
HandlerSearchView,
RcraSiteView,
SiteDetailView,
SiteListView,
SiteSearchView,
rcrainfo_site_search_view,
)
40 changes: 24 additions & 16 deletions server/apps/sites/views/site_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
from drf_spectacular.utils import extend_schema
from rest_framework import permissions, status
from rest_framework.decorators import api_view
from drf_spectacular.utils import extend_schema, inline_serializer
from rest_framework import permissions, serializers, status
from rest_framework.exceptions import ValidationError
from rest_framework.generics import ListAPIView, RetrieveAPIView
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.views import APIView

from apps.sites.models import RcraSite, RcraSiteType, Site # type: ignore
from apps.sites.serializers import RcraSiteSerializer, SiteSerializer # type: ignore
Expand Down Expand Up @@ -102,18 +102,26 @@ def get_queryset(self):
}


@api_view(["POST"])
def rcrainfo_site_search_view(request: Request):
@extend_schema(
responses=RcraSiteSerializer(many=True),
request=inline_serializer(
"handler_search",
fields={"siteId": serializers.CharField(), "siteType": serializers.CharField()},
),
)
class HandlerSearchView(APIView):
"""
Search and return a list of sites from RCRAInfo.
Search and return a list of Hazardous waste handlers from RCRAInfo.
"""
try:
site_service = RcraSiteService(username=request.user.username)
data = site_service.search_rcra_site(
epaSiteId=request.data["siteId"], siteType=handler_types[request.data["siteType"]]
)
return Response(status=status.HTTP_200_OK, data=data["sites"])
except KeyError:
return Response(status=status.HTTP_400_BAD_REQUEST)
except ValidationError:
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)

def post(self, request: Request) -> Response:
try:
site_service = RcraSiteService(username=request.user.username)
data = site_service.search_rcra_site(
epaSiteId=request.data["siteId"], siteType=handler_types[request.data["siteType"]]
)
return Response(status=status.HTTP_200_OK, data=data["sites"])
except KeyError:
return Response(status=status.HTTP_400_BAD_REQUEST)
except ValidationError:
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)

0 comments on commit 43f88c4

Please sign in to comment.