serializers.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. from django.contrib.auth.models import Group, User
  2. from . import models
  3. from rest_framework import serializers
  4. from drf_writable_nested import WritableNestedModelSerializer
  5. class UserSerializer(serializers.HyperlinkedModelSerializer):
  6. class Meta:
  7. model = User
  8. fields = ['url', 'username', 'email', 'groups']
  9. class device_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  10. class Meta:
  11. model = models.device
  12. fields = ['id', 'device_type', 'brend', 'serial_model', 'proto', 'proto_interface']
  13. class adc_params_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  14. device_model = serializers.CharField(max_length=100, write_only=True)
  15. device = device_Serializer(read_only=True)
  16. class Meta:
  17. model = models.adc_params
  18. fields = ['device_model', 'device', 'srate', 'points', 'n_channels', 'channel_ranges', 'n_triggers', 'averaging', 'trigger_channel', 'trig_direction', 'threshold', 'auto_measure_time', 'enabled']
  19. extra_kwargs = {
  20. 'device': {'read_only': True}
  21. }
  22. # task: add create() for get device by serial_model
  23. def create(self, validated_data):
  24. # get device by serial_model
  25. device_model = validated_data.pop('device_model')
  26. device_instance = models.device.objects.get(serial_model=device_model)
  27. # create adc_params
  28. adc_params_instance = models.adc_params.objects.create(device=device_instance, **validated_data)
  29. return adc_params_instance
  30. class sync_params_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  31. device_model = serializers.CharField(max_length=100, write_only=True)
  32. device = device_Serializer(read_only=True)
  33. class Meta:
  34. model = models.sync_params
  35. fields = ['device_model', 'device', 'file', 'port']
  36. extra_kwargs = {
  37. 'device': {'read_only': True}
  38. }
  39. def create(self, validated_data):
  40. # get device by serial_model
  41. device_model = validated_data.pop('device_model')
  42. device_instance = models.device.objects.get(serial_model=device_model)
  43. # create sync_params with the device and other fields
  44. sync_params_instance = models.sync_params.objects.create(device=device_instance, **validated_data)
  45. return sync_params_instance
  46. class sdr_params_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  47. device_model = serializers.CharField(max_length=100, write_only=True)
  48. device = device_Serializer(read_only=True)
  49. class Meta:
  50. model = models.sdr_params
  51. fields = ['device_model', 'device', 'srate', 'freq', 'ampl', 'gain', 'file']
  52. extra_kwargs = {
  53. 'device': {'read_only': True}
  54. }
  55. def create(self, validated_data):
  56. # get device by serial_model
  57. device_model = validated_data.pop('device_model')
  58. device_instance = models.device.objects.get(serial_model=device_model)
  59. # create sdr_params
  60. sdr_params_instance = models.sdr_params.objects.create(device=device_instance, **validated_data)
  61. return sdr_params_instance
  62. class gra_params_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  63. device_model = serializers.CharField(max_length=100, write_only=True)
  64. device = device_Serializer(read_only=True)
  65. class Meta:
  66. model = models.gra_params
  67. fields = ['device_model', 'device', 'ip', 'file', 'enabled']
  68. extra_kwargs = {
  69. 'device': {'read_only': True}
  70. }
  71. def create(self, validated_data):
  72. # get device by serial_model
  73. device_model = validated_data.pop('device_model')
  74. device_instance = models.device.objects.get(serial_model=device_model)
  75. # create gra_params
  76. gra_params_instance = models.gra_params.objects.create(device=device_instance, **validated_data)
  77. return gra_params_instance
  78. class measurement_info_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  79. #id = serializers.IntegerField()
  80. iadc = adc_params_Serializer()
  81. isync = sync_params_Serializer()
  82. isdr = sdr_params_Serializer()
  83. igrax = gra_params_Serializer()
  84. igray = gra_params_Serializer()
  85. igraz = gra_params_Serializer()
  86. class Meta:
  87. model = models.measurement_info
  88. fields = ['infostr', 'engine', 'time', 'iadc', 'isync', 'isdr', 'igrax', 'igray', 'igraz']
  89. class measurement_info_lite_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  90. class Meta:
  91. model = models.measurement_info
  92. fields = ['id', 'infostr', 'time']
  93. class channel_data_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  94. channel_data = serializers.CharField(allow_blank=True,
  95. trim_whitespace=False,
  96. required=False)
  97. #id = serializers.IntegerField()
  98. class Meta:
  99. model = models.channel_data
  100. fields = ['channel_num', 'channel_data']
  101. class device_state_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  102. class Meta:
  103. model = models.device_state
  104. fields = ['status', 'code']
  105. class state_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  106. #id = serializers.IntegerField()
  107. adc = device_state_Serializer()
  108. sdr = device_state_Serializer()
  109. sync = device_state_Serializer()
  110. grax = device_state_Serializer()
  111. gray = device_state_Serializer()
  112. graz = device_state_Serializer()
  113. data_ready = serializers.BooleanField(default=False)
  114. class Meta:
  115. model = models.state
  116. fields = ['adc', 'sync', 'sdr', 'grax', 'gray', 'graz', 'code', 'status', 'data_ready']
  117. class measurement_data_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  118. #id = serializers.IntegerField()
  119. channel_data = channel_data_Serializer(read_only=True, many=True)
  120. measurement_id = serializers.IntegerField(read_only=True, source="measurement.id")
  121. measurement_rate = serializers.IntegerField(read_only=True, source="measurement.info.iadc.srate")
  122. measurement_points = serializers.JSONField(read_only=True, source="measurement.info.iadc.points")
  123. #channel_data.id = id_data
  124. class Meta:
  125. model = models.measurement_data
  126. fields = ['measurement_id', 'data_num', 'averaging_num', 'channel_data', 'measurement_rate', 'measurement_points']
  127. class measurement_post_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  128. #id = serializers.IntegerField()
  129. info = measurement_info_Serializer(write_only=True)
  130. infostr = serializers.CharField(read_only=True, source="info.infostr")
  131. #info.id = id
  132. #state.id = id
  133. class Meta:
  134. model = models.measurement
  135. fields = ['id', 'info', 'infostr']
  136. extra_kwargs = {
  137. 'info': {'write_only': True}
  138. }
  139. class measurement_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
  140. #id = serializers.IntegerField()
  141. #info = measurement_info_Serializer()
  142. #info.id = id
  143. #data.id = id
  144. #state.id = id
  145. infostr = serializers.CharField(read_only=True, source="info.infostr")
  146. class Meta:
  147. model = models.measurement
  148. fields = ['id', 'infostr']