Files
RasadDam_Backend/common/tools.py

66 lines
2.3 KiB
Python

import typing
class CustomOperations:
"""
@for Custom Operations in view sets
"""
def custom_create( # noqa
self,
user: object = None,
request: object = None,
view: object = None,
data_key: str = None,
data: dict = None,
additional_data: dict = None
) -> typing.Any:
"""
to create custom view objects that
defined in VIEW_SET dictionary to
just calling this method in other
view sets
"""
view_data = request.data # included needed data for view set # noqa
if user:
view_data[data_key].update({'user': user.id}) # noqa
if additional_data:
view_data[data_key].update(additional_data)
# if we have data_key for dictionary data get value
# if not, just put additional data in serializer
if data_key:
serializer = view.serializer_class(data=view_data[data_key]) # noqa
if data:
serializer = view.serializer_class(data=data) # noqa
serializer.is_valid(raise_exception=True) # noqa
view.perform_create(serializer) # noqa
headers = view.get_success_headers(serializer.data) # noqa
return serializer.data
def custom_update( # noqa
self,
user: object = None,
request: object = None,
obj_id: object = None,
view: object = None,
data_key: str = None,
data: dict = None,
additional_data: dict = None
) -> typing.Any:
view_data = request.data # included needed data for view set # noqa
queryset = view.queryset.get(id=obj_id)
if user:
view_data[data_key].update({'user': user.id}) # noqa
if additional_data:
view_data[data_key].update(additional_data)
if data_key:
serializer = view.serializer_class(data=view_data[data_key], instance=queryset, partial=True) # noqa
if data:
serializer = view.serializer_class(data=data, instance=queryset, partial=True) # noqa
serializer.is_valid(raise_exception=True) # noqa
object_data = data if data else view_data[data_key]
serializer.save() # noqa
headers = view.get_success_headers(serializer.data) # noqa
return serializer.data