Parameter value bug (#7601) (#7602)

* Handle out-of range numerical values

* Add unit test

(cherry picked from commit 84d076848a)

Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
This commit is contained in:
github-actions[bot] 2024-07-09 21:49:15 +10:00 committed by GitHub
parent 50fdefa473
commit 2329179070
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 0 deletions

View File

@ -5,6 +5,7 @@ from __future__ import annotations
import decimal
import hashlib
import logging
import math
import os
import re
from datetime import datetime, timedelta
@ -3757,6 +3758,12 @@ class PartParameter(InvenTree.models.InvenTreeMetadataModel):
except ValueError:
self.data_numeric = None
if self.data_numeric is not None and type(self.data_numeric) is float:
# Prevent out of range numbers, etc
# Ref: https://github.com/inventree/InvenTree/issues/7593
if math.isnan(self.data_numeric) or math.isinf(self.data_numeric):
self.data_numeric = None
part = models.ForeignKey(
Part,
on_delete=models.CASCADE,

View File

@ -47,6 +47,25 @@ class TestParams(TestCase):
t3.full_clean()
t3.save() # pragma: no cover
def test_invalid_numbers(self):
"""Test that invalid floating point numbers are correctly handled."""
p = Part.objects.first()
t = PartParameterTemplate.objects.create(name='Yaks')
valid_floats = ['-12', '1.234', '17', '3e45', '-12e34']
for value in valid_floats:
param = PartParameter(part=p, template=t, data=value)
param.full_clean()
self.assertIsNotNone(param.data_numeric)
invalid_floats = ['88E6352', 'inf', '-inf', 'nan', '3.14.15', '3eee3']
for value in invalid_floats:
param = PartParameter(part=p, template=t, data=value)
param.full_clean()
self.assertIsNone(param.data_numeric)
def test_metadata(self):
"""Unit tests for the metadata field."""
for model in [PartParameterTemplate]: