gault-millau/apps/main/views/back.py
Александр Пархомин 5273cd9d9f add docstring for ContentType
2020-02-10 12:39:18 +03:00

376 lines
11 KiB
Python

from django.contrib.contenttypes.models import ContentType
from django.utils.translation import gettext_lazy as _
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import generics, status
from rest_framework.generics import get_object_or_404
from rest_framework.response import Response
from establishment.models import Employee
from establishment.serializers.back import EmployeeBackSerializers
from main import serializers
from main import tasks
from main.filters import AwardFilter, AwardTypeFilterSet
from main.models import Award, Footer, PageType, Panel, SiteFeature, Feature, AwardType, Carousel
from main.serializers.back import PanelSerializer, BackCarouselListSerializer
from main.views import SiteSettingsView, SiteListView
from utils.methods import get_permission_classes
class AwardLstView(generics.ListCreateAPIView):
"""
## List of awards
### *GET*
#### Description
Return paginated list of awards.
Available filters:
* establishment_id (`int`) - Filter by establishment identifier
* product_id (`int`) - Filter by product identifier
* employee_id (`int`) - Filter by employee identifier
* state (`enum`) - `0 (Waiting)`, `1 (Published)`
* award_type (`str`) - Filter by award type identifier
* vintage_year (`str`) - Filter by a vintage year
##### Response
E.g.:
```
{
"count": 58,
"next": 2,
"previous": null,
"results": [
{
"id": 1,
...
}
]
}
```
### *POST*
#### Description
Create a record in Award table.
##### Request
Required:
* content_type (`int`) - identifier of content type entity
* object_id (`int`) - identifier of content object
* award_type (`int`) - identifier of award type
* title (`str`) - title of an award
Non required:
* vintage_year (str) - vintage year in a format - `yyyy`
##### Response
```
{
"id": 1,
...
}
```
"""
queryset = Award.objects.all().with_base_related()
serializer_class = serializers.BackAwardSerializer
permission_classes = get_permission_classes()
filterset_class = AwardFilter
class AwardCreateAndBind(generics.CreateAPIView):
"""
## Creating an Award for an Employee.
### *POST*
#### Description
Creating an Award for an Employee and return in response
serialized Employee object.
##### Response
E.g.
```
{
"id": 1,
...
}
```
##### Request
Required:
* award_type (`int`) - identifier of award type
* title (`str`) - title of an award
Non required:
* vintage_year (str) - vintage year in a format - `yyyy`
##### Response
E.g.
```
{
"id": 1,
...
}
```
"""
queryset = Award.objects.all().with_base_related()
serializer_class = serializers.BackAwardEmployeeCreateSerializer
permission_classes = get_permission_classes()
def create(self, request, *args, **kwargs):
"""Overridden create method."""
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
response_serializer = EmployeeBackSerializers(Employee.objects.get(pk=kwargs['employee_id']))
headers = self.get_success_headers(response_serializer.data)
return Response(response_serializer.data, status=status.HTTP_201_CREATED, headers=headers)
class AwardRUDView(generics.RetrieveUpdateDestroyAPIView):
"""
## Retrieve/Update/Destroy Award view
### *GET*
#### Description
Retrieving serialized object of an Award by an identifier
#### Response
E.g.
```
{
"id": 1,
...
}
```
### *PATCH*
#### Description
Partially update Award object by identifier
##### Request
Available:
* content_type (`int`) - identifier of content type entity
* object_id (`int`) - identifier of content object
* award_type (`int`) - identifier of award type
* title (`str`) - title of an award
* vintage_year (str) - vintage year in a format - `yyyy`
##### Response
E.g.
```
{
"id": 1,
...
}
```
### *DELETE*
#### Description
Delete an Award instance by award identifier
##### Request
```
No request data
```
##### Response
E.g.
```
No content
```
"""
queryset = Award.objects.all().with_base_related()
serializer_class = serializers.BackAwardSerializer
permission_classes = get_permission_classes()
lookup_field = 'id'
class AwardTypesListView(generics.ListAPIView):
"""
## List of Award types view.
### *GET*
#### Description
Return non paginated list of Award types filtered by request country code.
Available filters:
* id (`int`) - award type identifier
* name (`str`) - award type name
##### Response
```
[
{
"id": 1,
...
}
]
```
"""
pagination_class = None
serializer_class = serializers.AwardTypeBaseSerializer
permission_classes = get_permission_classes()
lookup_field = 'id'
filter_class = AwardTypeFilterSet
def get_queryset(self):
"""An overridden get_queryset method."""
if hasattr(self, 'request') and hasattr(self.request, 'country_code'):
return AwardType.objects.by_country_code(self.request.country_code)
return AwardType.objects.none()
class ContentTypeView(generics.ListAPIView):
"""
ContentType list view
```
Implement getting list of ContentType
"""
queryset = ContentType.objects.all()
serializer_class = serializers.ContentTypeBackSerializer
permission_classes = get_permission_classes()
filter_backends = (DjangoFilterBackend,)
ordering_fields = '__all__'
lookup_field = 'id'
filterset_fields = (
'id',
'model',
'app_label',
)
class FeatureBackView(generics.ListCreateAPIView):
"""Feature list or create View."""
serializer_class = serializers.FeatureSerializer
queryset = Feature.objects.all()
permission_classes = get_permission_classes()
class SiteFeatureBackView(generics.ListCreateAPIView):
"""Feature list or create View."""
serializer_class = serializers.SiteFeatureSerializer
queryset = SiteFeature.objects.all()
pagination_class = None
permission_classes = get_permission_classes()
class FeatureRUDBackView(generics.RetrieveUpdateDestroyAPIView):
"""Feature RUD View."""
serializer_class = serializers.FeatureSerializer
queryset = SiteFeature.objects.all()
permission_classes = get_permission_classes()
class SiteFeatureRUDBackView(generics.RetrieveUpdateDestroyAPIView):
"""Feature RUD View."""
serializer_class = serializers.SiteFeatureSerializer
queryset = SiteFeature.objects.all()
permission_classes = get_permission_classes()
class SiteSettingsBackOfficeView(SiteSettingsView):
"""Site settings View."""
serializer_class = serializers.SiteSerializer
permission_classes = get_permission_classes()
class SiteListBackOfficeView(SiteListView):
"""Site settings View."""
serializer_class = serializers.SiteSerializer
permission_classes = get_permission_classes()
class FooterBackView(generics.ListCreateAPIView):
"""Footer back list/create view."""
serializer_class = serializers.FooterBackSerializer
queryset = Footer.objects.all()
permission_classes = get_permission_classes()
class FooterRUDBackView(generics.RetrieveUpdateDestroyAPIView):
"""Footer back RUD view."""
serializer_class = serializers.FooterBackSerializer
queryset = Footer.objects.all()
permission_classes = get_permission_classes()
class PageTypeListCreateView(generics.ListCreateAPIView):
"""PageType back office view."""
pagination_class = None
serializer_class = serializers.PageTypeBaseSerializer
queryset = PageType.objects.all()
permission_classes = get_permission_classes()
class PanelsListCreateView(generics.ListCreateAPIView):
"""Custom panels view."""
serializer_class = PanelSerializer
queryset = Panel.objects.all()
permission_classes = get_permission_classes()
class PanelsRUDView(generics.RetrieveUpdateDestroyAPIView):
"""Custom panels view."""
serializer_class = PanelSerializer
queryset = Panel.objects.all()
permission_classes = get_permission_classes()
class PanelsExecuteView(generics.ListAPIView):
"""Custom panels view."""
queryset = Panel.objects.all()
permission_classes = get_permission_classes()
def list(self, request, *args, **kwargs):
panel = get_object_or_404(Panel, id=self.kwargs['pk'])
return Response(panel.execute_query(request))
class PanelsExportCSVView(PanelsExecuteView):
"""Export panels via csv view."""
queryset = Panel.objects.all()
permission_classes = get_permission_classes()
def list(self, request, *args, **kwargs):
panel = get_object_or_404(Panel, id=self.kwargs['pk'])
# make task for celery
tasks.send_export_to_email.delay(
panel_id=panel.id, user_id=request.user.id)
return Response(
{"success": _('The file will be sent to your email.')},
status=status.HTTP_200_OK
)
class PanelsExecuteXLSView(PanelsExecuteView):
"""Export panels via xlsx view."""
queryset = Panel.objects.all()
permission_classes = get_permission_classes()
def list(self, request, *args, **kwargs):
panel = get_object_or_404(Panel, id=self.kwargs['pk'])
# make task for celery
tasks.send_export_to_email.delay(
panel_id=panel.id, user_id=request.user.id, file_type='xls')
return Response(
{"success": _('The file will be sent to your email.')},
status=status.HTTP_200_OK
)
class BackCarouselListView(generics.ListAPIView):
"""
## List of carousel.
### *GET*
#### Description
Return list of carousel items.
##### Response
E.g.:
```
{
"id": 1,
"model_name": "model_name",
"name": "name",
...
"awards": [
{
"id": 1,
...
}
]
}
```
"""
queryset = Carousel.objects.all()
serializer_class = BackCarouselListSerializer
permission_classes = get_permission_classes()
pagination_class = None
def get_queryset(self):
country_code = self.request.country_code
qs = Carousel.objects.all()
if country_code:
qs = qs.by_country_code(country_code)
return qs