import re from rest_framework import serializers def get_statement_type(sql_text: str) -> str: matched = re.match(r"^\s*([A-Za-z]+)", sql_text or "") if not matched: return "UNKNOWN" return matched.group(1).upper()[:50] class ProjectSQLActionCreateSerializer(serializers.Serializer): email = serializers.EmailField(required=True) sql_text = serializers.CharField(required=True) status = serializers.ChoiceField( choices=["success", "error", "cancelled", "timeout"], required=False, default="success", ) duration_ms = serializers.IntegerField(required=False, allow_null=True, min_value=0) error_code = serializers.CharField( required=False, allow_null=True, allow_blank=True, max_length=64, ) executed_at = serializers.DateTimeField(required=False) def validate_email(self, value: str) -> str: return value.strip().lower() def validate_sql_text(self, value: str) -> str: normalized_value = value.strip() if not normalized_value: raise serializers.ValidationError("This field may not be blank.") return normalized_value