Skip to content

Commit

Permalink
fix url for test-results (#127)
Browse files Browse the repository at this point in the history
* fix url for test-results

* fixed nested serializers for data source and data file
  • Loading branch information
amyasnikov authored Oct 3, 2024
1 parent e40aec1 commit 2f0c440
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 6 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
strategy:
fail-fast: false
matrix:
netbox_version: [v3.7.8, v4.0.11, v4.1.0]
netbox_version: [v3.7.8, v4.0.11, v4.1.3]
steps:
- name: Checkout
uses: actions/checkout@v3
Expand Down Expand Up @@ -61,7 +61,7 @@ jobs:
strategy:
fail-fast: false
matrix:
netbox_version: [v3.7.8, v4.0.11, v4.1.0]
netbox_version: [v3.7.8, v4.0.11, v4.1.3]
steps:
- name: Checkout
uses: actions/checkout@v3
Expand Down
16 changes: 15 additions & 1 deletion validity/api/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from django.db.models import ManyToManyField
from netbox.api.serializers import WritableNestedSerializer
from rest_framework.relations import PrimaryKeyRelatedField
from rest_framework.serializers import JSONField, ModelSerializer
from rest_framework.serializers import HyperlinkedIdentityField, JSONField, ModelSerializer

from validity import NetboxVersion
from validity.fields.encrypted import EncryptedDict
Expand Down Expand Up @@ -38,6 +38,20 @@ def nested_factory(
return type(name, bases, s_attribs)


def proxy_factory(
serializer_class: type[ModelSerializer], view_name: str, fields: Sequence[str] = ()
) -> type[ModelSerializer]:
"""
Creates Nested Serializer for a proxy model.
Proxy models can't use regular nested serializers, see https://github.com/amyasnikov/validity/issues/121
"""
url = HyperlinkedIdentityField(view_name=view_name)
meta = serializer_class.Meta
if fields:
meta = meta_factory(serializer_class.Meta, fields=fields)
return type(serializer_class.__name__, (serializer_class,), {"url": url, "Meta": meta})


class EncryptedDictField(JSONField):
def to_representation(self, value):
return value.encrypted
Expand Down
23 changes: 21 additions & 2 deletions validity/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
from core.api.nested_serializers import NestedDataFileSerializer, NestedDataSourceSerializer
from core.api.nested_serializers import (
NestedDataFileSerializer as _NestedDataFileSerializer,
)
from core.api.nested_serializers import (
NestedDataSourceSerializer as _NestedDataSourceSerializer,
)
from core.api.serializers import JobSerializer
from core.models import DataSource
from dcim.api.nested_serializers import (
NestedDeviceSerializer,
NestedDeviceSerializer as _NestedDeviceSerializer,
)
from dcim.api.nested_serializers import (
NestedDeviceTypeSerializer,
NestedLocationSerializer,
NestedManufacturerSerializer,
Expand Down Expand Up @@ -30,6 +37,18 @@
PrimaryKeyField,
SubformValidationMixin,
nested_factory,
proxy_factory,
)


NestedDeviceSerializer = proxy_factory(
_NestedDeviceSerializer, view_name="dcim-api:device-detail", fields=["id", "url", "display", "name"]
)
NestedDataSourceSerializer = proxy_factory(
_NestedDataSourceSerializer, view_name="core-api:datasource-detail", fields=["id", "url", "display", "name"]
)
NestedDataFileSerializer = proxy_factory(
_NestedDataFileSerializer, view_name="core-api:datafile-detail", fields=["id", "url", "display", "path"]
)


Expand Down
2 changes: 1 addition & 1 deletion validity/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def run(self, request):


class ComplianceTestResultViewSet(NetBoxReadOnlyModelViewSet):
queryset = models.ComplianceTestResult.objects.select_related("device", "test", "report")
queryset = models.ComplianceTestResult.objects.select_related("device", "test", "report", "dynamic_pair")
serializer_class = serializers.ComplianceTestResultSerializer
filterset_class = filtersets.ComplianceTestResultFilterSet

Expand Down

0 comments on commit 2f0c440

Please sign in to comment.