from rest_framework import serializers from django.utils import timezone from labs.models import LabSSHServer class SSHServerRegisterSerializer(serializers.ModelSerializer): domain = serializers.CharField(required=True, validators=[]) class Meta: model = LabSSHServer fields = ["domain", "regions"] extra_kwargs = { "regions": {"required": True}, } def create(self, validated_data): ssh_server, _ = LabSSHServer.objects.get_or_create( domain=validated_data["domain"], defaults={"regions": validated_data.get("regions", [])}, ) ssh_server.regions = validated_data["regions"] ssh_server.save() return ssh_server class SSHServerReportSerializer(serializers.ModelSerializer): class Meta: model = LabSSHServer fields = ["score", "active_session"] extra_kwargs = { "score": {"required": True}, "active_session": {"required": True}, } def update(self, instance, validated_data): instance.score = validated_data["score"] instance.active_session = validated_data["active_session"] instance.last_report_at = timezone.now() instance.save() return instance