69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Flow API Views"""
 | |
| from rest_framework.serializers import ModelSerializer, SerializerMethodField
 | |
| from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
 | |
| 
 | |
| from passbook.flows.models import Flow, FlowStageBinding, Stage
 | |
| 
 | |
| 
 | |
| class FlowSerializer(ModelSerializer):
 | |
|     """Flow Serializer"""
 | |
| 
 | |
|     class Meta:
 | |
| 
 | |
|         model = Flow
 | |
|         fields = ["pk", "name", "slug", "title", "designation", "stages", "policies"]
 | |
| 
 | |
| 
 | |
| class FlowViewSet(ModelViewSet):
 | |
|     """Flow Viewset"""
 | |
| 
 | |
|     queryset = Flow.objects.all()
 | |
|     serializer_class = FlowSerializer
 | |
| 
 | |
| 
 | |
| class FlowStageBindingSerializer(ModelSerializer):
 | |
|     """FlowStageBinding Serializer"""
 | |
| 
 | |
|     class Meta:
 | |
| 
 | |
|         model = FlowStageBinding
 | |
|         fields = ["pk", "target", "stage", "re_evaluate_policies", "order", "policies"]
 | |
| 
 | |
| 
 | |
| class FlowStageBindingViewSet(ModelViewSet):
 | |
|     """FlowStageBinding Viewset"""
 | |
| 
 | |
|     queryset = FlowStageBinding.objects.all()
 | |
|     serializer_class = FlowStageBindingSerializer
 | |
|     filterset_fields = "__all__"
 | |
| 
 | |
| 
 | |
| class StageSerializer(ModelSerializer):
 | |
|     """Stage Serializer"""
 | |
| 
 | |
|     __type__ = SerializerMethodField(method_name="get_type")
 | |
|     verbose_name = SerializerMethodField(method_name="get_verbose_name")
 | |
| 
 | |
|     def get_type(self, obj: Stage) -> str:
 | |
|         """Get object type so that we know which API Endpoint to use to get the full object"""
 | |
|         return obj._meta.object_name.lower().replace("stage", "")
 | |
| 
 | |
|     def get_verbose_name(self, obj: Stage) -> str:
 | |
|         """Get verbose name for UI"""
 | |
|         return obj._meta.verbose_name
 | |
| 
 | |
|     class Meta:
 | |
| 
 | |
|         model = Stage
 | |
|         fields = ["pk", "name", "__type__", "verbose_name"]
 | |
| 
 | |
| 
 | |
| class StageViewSet(ReadOnlyModelViewSet):
 | |
|     """Stage Viewset"""
 | |
| 
 | |
|     queryset = Stage.objects.all()
 | |
|     serializer_class = StageSerializer
 | |
| 
 | |
|     def get_queryset(self):
 | |
|         return Stage.objects.select_subclasses()
 | 
