|
1 | 1 | from core.api.nested_serializers import NestedDataFileSerializer, NestedDataSourceSerializer |
| 2 | +from core.api.serializers import JobSerializer |
| 3 | +from core.models import DataSource |
2 | 4 | from dcim.api.nested_serializers import ( |
3 | 5 | NestedDeviceSerializer, |
4 | 6 | NestedDeviceTypeSerializer, |
|
7 | 9 | NestedPlatformSerializer, |
8 | 10 | NestedSiteSerializer, |
9 | 11 | ) |
10 | | -from dcim.models import DeviceType, Location, Manufacturer, Platform, Site |
| 12 | +from dcim.models import Device, DeviceType, Location, Manufacturer, Platform, Site |
| 13 | +from django.utils import timezone |
| 14 | +from django.utils.translation import gettext_lazy as _ |
11 | 15 | from extras.api.nested_serializers import NestedTagSerializer |
12 | 16 | from extras.models import Tag |
13 | 17 | from netbox.api.fields import SerializedPKRelatedField |
|
18 | 22 | from tenancy.models import Tenant |
19 | 23 |
|
20 | 24 | from validity import config, models |
21 | | -from .helpers import EncryptedDictField, FieldsMixin, ListQPMixin, SubformValidationMixin, nested_factory |
| 25 | +from validity.choices import ExplanationVerbosityChoices |
| 26 | +from .helpers import ( |
| 27 | + EncryptedDictField, |
| 28 | + FieldsMixin, |
| 29 | + ListQPMixin, |
| 30 | + PrimaryKeyField, |
| 31 | + SubformValidationMixin, |
| 32 | + nested_factory, |
| 33 | +) |
22 | 34 |
|
23 | 35 |
|
24 | 36 | class ComplianceSelectorSerializer(NetBoxModelSerializer): |
@@ -370,3 +382,30 @@ def to_representation(self, instance): |
370 | 382 | if name_filter := self.get_list_param("name"): |
371 | 383 | instance = [item for item in instance if item.name in set(name_filter)] |
372 | 384 | return super().to_representation(instance) |
| 385 | + |
| 386 | + |
| 387 | +class RunTestsSerializer(serializers.Serializer): |
| 388 | + sync_datasources = serializers.BooleanField(required=False) |
| 389 | + selectors = PrimaryKeyField( |
| 390 | + many=True, |
| 391 | + required=False, |
| 392 | + queryset=models.ComplianceSelector.objects.all(), |
| 393 | + ) |
| 394 | + devices = PrimaryKeyField(many=True, required=False, queryset=Device.objects.all()) |
| 395 | + test_tags = PrimaryKeyField(many=True, required=False, queryset=Tag.objects.all()) |
| 396 | + explanation_verbosity = serializers.ChoiceField( |
| 397 | + choices=ExplanationVerbosityChoices.choices, required=False, default=ExplanationVerbosityChoices.maximum |
| 398 | + ) |
| 399 | + overriding_datasource = PrimaryKeyField(required=False, queryset=DataSource.objects.all()) |
| 400 | + workers_num = serializers.IntegerField(min_value=1, default=1) |
| 401 | + schedule_at = serializers.DateTimeField(required=False, allow_null=True) |
| 402 | + schedule_interval = serializers.IntegerField(required=False, allow_null=True) |
| 403 | + |
| 404 | + def validate_schedule_at(self, value): |
| 405 | + if value and value < timezone.now(): |
| 406 | + raise serializers.ValidationError(_("Scheduled time must be in the future.")) |
| 407 | + return value |
| 408 | + |
| 409 | + |
| 410 | +class ScriptResultSerializer(serializers.Serializer): |
| 411 | + result = JobSerializer(read_only=True) |
0 commit comments