mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 11:36:44 +00:00
Feet and inches (#6674)
* Conversion: Handle feet and inches - Support ' for feet - Support " for inches * Add unit test * Doc updates
This commit is contained in:
parent
6920efb456
commit
8719dd7e1e
@ -165,6 +165,13 @@ def convert_physical_value(value: str, unit: str = None, strip_units=True):
|
|||||||
value = str(value).strip() if value else ''
|
value = str(value).strip() if value else ''
|
||||||
unit = str(unit).strip() if unit else ''
|
unit = str(unit).strip() if unit else ''
|
||||||
|
|
||||||
|
# Handle imperial length measurements
|
||||||
|
if value.count("'") == 1 and value.endswith("'"):
|
||||||
|
value = value.replace("'", ' feet')
|
||||||
|
|
||||||
|
if value.count('"') == 1 and value.endswith('"'):
|
||||||
|
value = value.replace('"', ' inches')
|
||||||
|
|
||||||
# Error on blank values
|
# Error on blank values
|
||||||
if not value:
|
if not value:
|
||||||
raise ValidationError(_('No value provided'))
|
raise ValidationError(_('No value provided'))
|
||||||
|
@ -138,6 +138,24 @@ class ConversionTest(TestCase):
|
|||||||
q = InvenTree.conversion.convert_physical_value(val, 'W', strip_units=False)
|
q = InvenTree.conversion.convert_physical_value(val, 'W', strip_units=False)
|
||||||
self.assertAlmostEqual(float(q.magnitude), expected, places=2)
|
self.assertAlmostEqual(float(q.magnitude), expected, places=2)
|
||||||
|
|
||||||
|
def test_imperial_lengths(self):
|
||||||
|
"""Test support of imperial length measurements."""
|
||||||
|
tests = [
|
||||||
|
('1 inch', 'mm', 25.4),
|
||||||
|
('1 "', 'mm', 25.4),
|
||||||
|
('2 "', 'inches', 2),
|
||||||
|
('3 feet', 'inches', 36),
|
||||||
|
("3'", 'inches', 36),
|
||||||
|
("7 '", 'feet', 7),
|
||||||
|
]
|
||||||
|
|
||||||
|
for val, unit, expected in tests:
|
||||||
|
output = InvenTree.conversion.convert_physical_value(
|
||||||
|
val, unit, strip_units=True
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertAlmostEqual(output, expected, 3)
|
||||||
|
|
||||||
def test_dimensionless_units(self):
|
def test_dimensionless_units(self):
|
||||||
"""Tests for 'dimensionless' unit quantities."""
|
"""Tests for 'dimensionless' unit quantities."""
|
||||||
# Test some dimensionless units
|
# Test some dimensionless units
|
||||||
|
@ -34,6 +34,15 @@ Scientific notation is also supported, and can be used to represent very large o
|
|||||||
!!! tip "Case Sensitive"
|
!!! tip "Case Sensitive"
|
||||||
Support for scientific notation is case sensitive. For example, `1E3` is a valid value, but `1e3` is not.
|
Support for scientific notation is case sensitive. For example, `1E3` is a valid value, but `1e3` is not.
|
||||||
|
|
||||||
|
### Feet and Inches
|
||||||
|
|
||||||
|
Shorthand notation is supported for feet and inches. For example, the following values would all be considered *valid*:
|
||||||
|
|
||||||
|
- `3'`: `3 feet`
|
||||||
|
- `6"` : `6 inches`
|
||||||
|
|
||||||
|
However, note that compound measurements (e.g. `3'6"`) are not supported.
|
||||||
|
|
||||||
### Case Sensitivity
|
### Case Sensitivity
|
||||||
|
|
||||||
The pint library is case sensitive, and units must be specified in the correct case. For example, `kg` is a valid unit, but `KG` is not. In particular, you need to pay close attention when using SI prefixes (e.g. `k` for kilo, `M` for mega, `n` for nano, etc).
|
The pint library is case sensitive, and units must be specified in the correct case. For example, `kg` is a valid unit, but `KG` is not. In particular, you need to pay close attention when using SI prefixes (e.g. `k` for kilo, `M` for mega, `n` for nano, etc).
|
||||||
|
Loading…
x
Reference in New Issue
Block a user