| 43 | |
| 44 | |
| 45 | class PackageQuerySerializer(serializers.Serializer): |
| 46 | purls = serializers.ListField( |
| 47 | child=serializers.CharField(), |
| 48 | required=True, |
| 49 | ) |
| 50 | details = serializers.BooleanField(default=False) |
| 51 | ignore_qualifiers_subpath = serializers.BooleanField(default=False) |
| 52 | max_advisories = serializers.IntegerField(default=100, min_value=1, max_value=10000) |
| 53 | reachability = serializers.BooleanField(default=False) |
| 54 | |
| 55 | def validate(self, data): |
| 56 | if not data["purls"]: |
| 57 | if data["details"] or data["ignore_qualifiers_subpath"]: |
| 58 | raise serializers.ValidationError( |
| 59 | "``details`` and ``ignore_qualifiers_subpath`` must be false when purls is empty" |
| 60 | ) |
| 61 | return data |
| 62 | |
| 63 | def to_internal_value(self, data): |
| 64 | unknown = set(data.keys()) - set(self.fields.keys()) |
| 65 | |
| 66 | if unknown: |
| 67 | raise serializers.ValidationError({field: ["Unknown field."] for field in unknown}) |
| 68 | |
| 69 | return super().to_internal_value(data) |
| 70 | |
| 71 | |
| 72 | class AdvisoryQuerySerializer(serializers.Serializer): |