From 32c6597551db8732e93657ef00eb7d07d4638d93 Mon Sep 17 00:00:00 2001 From: Sai Asish Y Date: Mon, 20 Jul 2026 08:31:12 -0700 Subject: [PATCH] fix config unavailability for a device without data_source Signed-off-by: Sai Asish Y --- validity/models/device.py | 5 ++++- validity/tests/test_models/test_vdevice.py | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/validity/models/device.py b/validity/models/device.py index 498473f..1f07487 100644 --- a/validity/models/device.py +++ b/validity/models/device.py @@ -32,7 +32,10 @@ def _config_item(self) -> Serializable: data_file = self.data_source.datafiles.filter(path=config_path).first() return Serializable(self.serializer, data_file=data_file) except AttributeError as exc: - if exc.obj is not None: + # data_source may be None or, when the device is fetched without + # .prefetch_datasource()/.set_datasource(), missing altogether + missing_data_source = exc.obj is self and exc.name == "data_source" + if exc.obj is not None and not missing_data_source: raise return Serializable(self.serializer, data_file=None) diff --git a/validity/tests/test_models/test_vdevice.py b/validity/tests/test_models/test_vdevice.py index 5e641f9..d4bdfcb 100644 --- a/validity/tests/test_models/test_vdevice.py +++ b/validity/tests/test_models/test_vdevice.py @@ -80,6 +80,12 @@ def test_config_item(create_custom_fields): assert device._config_item() == Serializable(device.serializer, None) +def test_config_item_without_data_source(create_custom_fields): + device = DeviceFactory(name="d1") + device.serializer = SerializerDBFactory() + assert device._config_item() == Serializable(device.serializer, None) + + @pytest.mark.django_db def test_primary_ip(): vdevice = DeviceFactory()