File indexing completed on 2026-04-25 08:29:11
0001 from rest_framework import serializers
0002 from .models import (PhysicsCategory, PhysicsTag, EvgenTag, SimuTag, RecoTag,
0003 Dataset, ProdConfig, ProdTask)
0004 from .schemas import validate_parameters
0005
0006
0007 class PhysicsCategorySerializer(serializers.ModelSerializer):
0008 tag_count = serializers.IntegerField(read_only=True, required=False)
0009
0010 class Meta:
0011 model = PhysicsCategory
0012 fields = ['digit', 'name', 'description', 'created_by', 'created_at', 'tag_count']
0013 read_only_fields = ['created_by', 'created_at']
0014
0015
0016 class PhysicsTagSerializer(serializers.ModelSerializer):
0017 category_name = serializers.CharField(source='category.name', read_only=True)
0018
0019 class Meta:
0020 model = PhysicsTag
0021 fields = [
0022 'id', 'tag_number', 'tag_label', 'category', 'category_name',
0023 'status', 'description', 'parameters',
0024 'created_by', 'created_at', 'updated_at',
0025 ]
0026 read_only_fields = ['id', 'tag_number', 'tag_label', 'status', 'created_by', 'created_at', 'updated_at']
0027
0028 def validate_parameters(self, value):
0029 ok, msg = validate_parameters('p', value)
0030 if not ok:
0031 raise serializers.ValidationError(msg)
0032 return value
0033
0034
0035 class _SimpleTagSerializer(serializers.ModelSerializer):
0036 class Meta:
0037 fields = [
0038 'id', 'tag_number', 'tag_label', 'status', 'description',
0039 'parameters', 'created_by', 'created_at', 'updated_at',
0040 ]
0041 read_only_fields = ['id', 'tag_number', 'tag_label', 'status', 'created_by', 'created_at', 'updated_at']
0042
0043
0044 class EvgenTagSerializer(_SimpleTagSerializer):
0045 class Meta(_SimpleTagSerializer.Meta):
0046 model = EvgenTag
0047
0048 def validate_parameters(self, value):
0049 ok, msg = validate_parameters('e', value)
0050 if not ok:
0051 raise serializers.ValidationError(msg)
0052 return value
0053
0054
0055 class SimuTagSerializer(_SimpleTagSerializer):
0056 class Meta(_SimpleTagSerializer.Meta):
0057 model = SimuTag
0058
0059 def validate_parameters(self, value):
0060 ok, msg = validate_parameters('s', value)
0061 if not ok:
0062 raise serializers.ValidationError(msg)
0063 return value
0064
0065
0066 class RecoTagSerializer(_SimpleTagSerializer):
0067 class Meta(_SimpleTagSerializer.Meta):
0068 model = RecoTag
0069
0070 def validate_parameters(self, value):
0071 ok, msg = validate_parameters('r', value)
0072 if not ok:
0073 raise serializers.ValidationError(msg)
0074 return value
0075
0076
0077 class DatasetSerializer(serializers.ModelSerializer):
0078 physics_tag_label = serializers.CharField(source='physics_tag.tag_label', read_only=True)
0079 evgen_tag_label = serializers.CharField(source='evgen_tag.tag_label', read_only=True)
0080 simu_tag_label = serializers.CharField(source='simu_tag.tag_label', read_only=True)
0081 reco_tag_label = serializers.CharField(source='reco_tag.tag_label', read_only=True)
0082
0083 class Meta:
0084 model = Dataset
0085 fields = [
0086 'id', 'dataset_name', 'scope', 'detector_version', 'detector_config',
0087 'physics_tag', 'evgen_tag', 'simu_tag', 'reco_tag',
0088 'physics_tag_label', 'evgen_tag_label', 'simu_tag_label', 'reco_tag_label',
0089 'block_num', 'blocks', 'did', 'file_count', 'data_size',
0090 'description', 'metadata', 'created_by', 'created_at',
0091 ]
0092 read_only_fields = [
0093 'id', 'dataset_name', 'did', 'block_num', 'blocks',
0094 'file_count', 'data_size', 'created_by', 'created_at',
0095 ]
0096
0097
0098 class ProdConfigSerializer(serializers.ModelSerializer):
0099 class Meta:
0100 model = ProdConfig
0101 fields = '__all__'
0102 read_only_fields = ['id', 'created_by', 'created_at', 'updated_at']
0103
0104
0105 class ProdTaskSerializer(serializers.ModelSerializer):
0106 dataset_name = serializers.CharField(source='dataset.dataset_name', read_only=True)
0107 dataset_did = serializers.CharField(source='dataset.did', read_only=True)
0108 prod_config_name = serializers.CharField(source='prod_config.name', read_only=True)
0109
0110 class Meta:
0111 model = ProdTask
0112 fields = [
0113 'id', 'name', 'description', 'status',
0114 'dataset', 'dataset_name', 'dataset_did',
0115 'prod_config', 'prod_config_name',
0116 'csv_file', 'overrides',
0117 'condor_command', 'panda_command',
0118 'panda_task_id', 'condor_cluster_id',
0119 'created_by', 'created_at', 'updated_at',
0120 ]
0121 read_only_fields = [
0122 'id', 'condor_command', 'panda_command',
0123 'created_by', 'created_at', 'updated_at',
0124 ]