diff --git a/apps/rp/api/mixins.py b/apps/rp/api/mixins.py deleted file mode 100644 index 24eb60d1fa721e1f322042a31d675ffb6ad4345b..0000000000000000000000000000000000000000 --- a/apps/rp/api/mixins.py +++ /dev/null @@ -1,51 +0,0 @@ -from django_fsm import has_transition_perm, can_proceed -from rest_framework.decorators import action -from rest_framework.exceptions import PermissionDenied -from rest_framework.response import Response - -import inspect - - -def get_transition_viewset_method(model, transition_name): - @action(methods=['post'], detail=True) - def inner_func(self, request, pk=None, *args, **kwargs): - object = self.get_object() - transition_method = getattr(object, transition_name) - - if not can_proceed(transition_method): - raise PermissionDenied - - if not has_transition_perm(transition_method, request.user): - raise PermissionDenied - - if 'by' in inspect.getargspec(transition_method).args: - transition_method(*args, by=request.user, **kwargs) - else: - transition_method(*args, **kwargs) - - if self.save_after_transition: - object.save() - - serializer = self.get_serializer(object) - return Response(serializer.data) - - return inner_func - - -def get_viewset_transition_actions_mixin(model): - """ - Automatically generate methods for Django REST Framework from transition - rules. - """ - instance = model() - - class Mixin(object): - save_after_transition = True - - transitions = instance.get_all_status_transitions() - transition_names = set(x.name for x in transitions) - for transition_name in transition_names: - setattr(Mixin, transition_name, - get_transition_viewset_method(model, transition_name)) - - return Mixin