mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 11:36:44 +00:00
Parameter value bug (#7601)
* Handle out-of range numerical values * Add unit test
This commit is contained in:
parent
494c12f0e5
commit
84d076848a
@ -5,6 +5,7 @@ from __future__ import annotations
|
|||||||
import decimal
|
import decimal
|
||||||
import hashlib
|
import hashlib
|
||||||
import logging
|
import logging
|
||||||
|
import math
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
@ -3820,6 +3821,12 @@ class PartParameter(InvenTree.models.InvenTreeMetadataModel):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
self.data_numeric = None
|
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 = models.ForeignKey(
|
||||||
Part,
|
Part,
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.CASCADE,
|
||||||
|
@ -47,6 +47,25 @@ class TestParams(TestCase):
|
|||||||
t3.full_clean()
|
t3.full_clean()
|
||||||
t3.save() # pragma: no cover
|
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):
|
def test_metadata(self):
|
||||||
"""Unit tests for the metadata field."""
|
"""Unit tests for the metadata field."""
|
||||||
for model in [PartParameterTemplate]:
|
for model in [PartParameterTemplate]:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user