serializers.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from rest_framework import serializers
  2. from rest_framework.validators import UniqueTogetherValidator
  3. from dcim.api.serializers import NestedDeviceSerializer
  4. from secrets.models import Secret, SecretRole
  5. #
  6. # SecretRoles
  7. #
  8. class SecretRoleSerializer(serializers.ModelSerializer):
  9. class Meta:
  10. model = SecretRole
  11. fields = ['id', 'name', 'slug']
  12. class NestedSecretRoleSerializer(serializers.ModelSerializer):
  13. url = serializers.HyperlinkedIdentityField(view_name='secrets-api:secretrole-detail')
  14. class Meta:
  15. model = SecretRole
  16. fields = ['id', 'url', 'name', 'slug']
  17. #
  18. # Secrets
  19. #
  20. class SecretSerializer(serializers.ModelSerializer):
  21. device = NestedDeviceSerializer()
  22. role = NestedSecretRoleSerializer()
  23. class Meta:
  24. model = Secret
  25. fields = ['id', 'device', 'role', 'name', 'plaintext', 'hash', 'created', 'last_updated']
  26. class WritableSecretSerializer(serializers.ModelSerializer):
  27. plaintext = serializers.CharField()
  28. class Meta:
  29. model = Secret
  30. fields = ['id', 'device', 'role', 'name', 'plaintext']
  31. validators = []
  32. def validate(self, data):
  33. # Validate uniqueness of name if one has been provided.
  34. if data.get('name', None):
  35. validator = UniqueTogetherValidator(queryset=Secret.objects.all(), fields=('device', 'role', 'name'))
  36. validator.set_context(self)
  37. validator(data)
  38. return data