From f6ebd0240e96de7a56f898f30521a1450f900c24 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 12 Mar 2025 14:27:17 -0400 Subject: [PATCH] Handle float values --- netbox/utilities/conversion.py | 9 +++++---- netbox/utilities/tests/test_conversions.py | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/netbox/utilities/conversion.py b/netbox/utilities/conversion.py index 35a8bad5f..36ac072d8 100644 --- a/netbox/utilities/conversion.py +++ b/netbox/utilities/conversion.py @@ -1,4 +1,4 @@ -from decimal import Decimal +from decimal import Decimal, InvalidOperation from django.utils.translation import gettext as _ @@ -42,10 +42,11 @@ def to_meters(length, unit) -> Decimal: Convert the given length to meters, returning a Decimal value. """ try: - if length < 0: - raise ValueError(_("Length must be a positive number")) - except TypeError: + length = Decimal(length) + except InvalidOperation: raise TypeError(_("Invalid value '{length}' for length (must be a number)").format(length=length)) + if length < 0: + raise ValueError(_("Length must be a positive number")) if unit == CableLengthUnitChoices.UNIT_KILOMETER: return round(Decimal(length * 1000), 4) diff --git a/netbox/utilities/tests/test_conversions.py b/netbox/utilities/tests/test_conversions.py index ed8955f96..2338a7ac2 100644 --- a/netbox/utilities/tests/test_conversions.py +++ b/netbox/utilities/tests/test_conversions.py @@ -28,8 +28,8 @@ class ConversionsTest(TestCase): def test_to_meters(self): self.assertEqual( - to_meters(1, CableLengthUnitChoices.UNIT_KILOMETER), - Decimal('1000') + to_meters(1.5, CableLengthUnitChoices.UNIT_KILOMETER), + Decimal('1500') ) self.assertEqual( to_meters(1, CableLengthUnitChoices.UNIT_METER),