mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			85 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
from django.utils.translation import ugettext as _
 | 
						|
from rest_framework import serializers
 | 
						|
 | 
						|
from ops.mixin import PeriodTaskSerializerMixin
 | 
						|
from assets.const import AutomationTypes
 | 
						|
from assets.models import Asset, Node, BaseAutomation
 | 
						|
from accounts.models import AutomationExecution
 | 
						|
from orgs.mixins.serializers import BulkOrgResourceModelSerializer
 | 
						|
from common.utils import get_logger
 | 
						|
from common.const.choices import Trigger
 | 
						|
from common.serializers.fields import ObjectRelatedField, LabeledChoiceField
 | 
						|
 | 
						|
logger = get_logger(__file__)
 | 
						|
 | 
						|
__all__ = [
 | 
						|
    'BaseAutomationSerializer', 'AutomationExecutionSerializer',
 | 
						|
    'UpdateAssetSerializer', 'UpdateNodeSerializer', 'AutomationAssetsSerializer',
 | 
						|
]
 | 
						|
 | 
						|
 | 
						|
class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSerializer):
 | 
						|
    assets = ObjectRelatedField(many=True, required=False, queryset=Asset.objects, label=_('Assets'))
 | 
						|
    nodes = ObjectRelatedField(many=True, required=False, queryset=Node.objects, label=_('Nodes'))
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        read_only_fields = [
 | 
						|
            'date_created', 'date_updated', 'created_by', 'periodic_display', 'executed_amount'
 | 
						|
        ]
 | 
						|
        fields = read_only_fields + [
 | 
						|
            'id', 'name', 'is_periodic', 'interval', 'crontab', 'comment',
 | 
						|
            'type', 'accounts', 'nodes', 'assets', 'is_active',
 | 
						|
        ]
 | 
						|
        extra_kwargs = {
 | 
						|
            'name': {'required': True},
 | 
						|
            'type': {'read_only': True},
 | 
						|
            'periodic_display': {'label': _('Periodic perform')},
 | 
						|
            'executed_amount': {'label': _('Executed amount')},
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
class AutomationExecutionSerializer(serializers.ModelSerializer):
 | 
						|
    snapshot = serializers.SerializerMethodField(label=_('Automation snapshot'))
 | 
						|
    type = serializers.ChoiceField(choices=AutomationTypes.choices, write_only=True, label=_('Type'))
 | 
						|
    trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode"))
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = AutomationExecution
 | 
						|
        read_only_fields = [
 | 
						|
            'trigger', 'date_start', 'date_finished', 'snapshot', 'status'
 | 
						|
        ]
 | 
						|
        fields = ['id', 'automation', 'type'] + read_only_fields
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def get_snapshot(obj):
 | 
						|
        tp = obj.snapshot['type']
 | 
						|
        snapshot = {
 | 
						|
            'type': tp,
 | 
						|
            'name': obj.snapshot['name'],
 | 
						|
            'comment': obj.snapshot['comment'],
 | 
						|
            'accounts': obj.snapshot['accounts'],
 | 
						|
            'node_amount': len(obj.snapshot['nodes']),
 | 
						|
            'asset_amount': len(obj.snapshot['assets']),
 | 
						|
            'type_display': getattr(AutomationTypes, tp).label,
 | 
						|
        }
 | 
						|
        return snapshot
 | 
						|
 | 
						|
 | 
						|
class UpdateAssetSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = BaseAutomation
 | 
						|
        fields = ['id', 'assets']
 | 
						|
 | 
						|
 | 
						|
class UpdateNodeSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = BaseAutomation
 | 
						|
        fields = ['id', 'nodes']
 | 
						|
 | 
						|
 | 
						|
class AutomationAssetsSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Asset
 | 
						|
        only_fields = ['id', 'name', 'address']
 | 
						|
        fields = tuple(only_fields)
 |