| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- from decimal import Decimal, InvalidOperation
- from django.utils.translation import gettext as _
- from dcim.choices import CableLengthUnitChoices
- from netbox.choices import WeightUnitChoices
- __all__ = (
- 'to_grams',
- 'to_meters',
- )
- def to_grams(weight, unit) -> int:
- """
- Convert the given weight to integer grams.
- """
- try:
- if weight < 0:
- raise ValueError(_("Weight must be a positive number"))
- except TypeError:
- raise TypeError(_("Invalid value '{weight}' for weight (must be a number)").format(weight=weight))
- if unit == WeightUnitChoices.UNIT_KILOGRAM:
- return int(weight * 1000)
- if unit == WeightUnitChoices.UNIT_GRAM:
- return int(weight)
- if unit == WeightUnitChoices.UNIT_POUND:
- return int(weight * Decimal(453.592))
- if unit == WeightUnitChoices.UNIT_OUNCE:
- return int(weight * Decimal(28.3495))
- raise ValueError(
- _("Unknown unit {unit}. Must be one of the following: {valid_units}").format(
- unit=unit,
- valid_units=', '.join(WeightUnitChoices.values())
- )
- )
- def to_meters(length, unit) -> Decimal:
- """
- Convert the given length to meters, returning a Decimal value.
- """
- try:
- 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)
- if unit == CableLengthUnitChoices.UNIT_METER:
- return round(Decimal(length), 4)
- if unit == CableLengthUnitChoices.UNIT_CENTIMETER:
- return round(Decimal(length / 100), 4)
- if unit == CableLengthUnitChoices.UNIT_MILE:
- return round(length * Decimal(1609.344), 4)
- if unit == CableLengthUnitChoices.UNIT_FOOT:
- return round(length * Decimal(0.3048), 4)
- if unit == CableLengthUnitChoices.UNIT_INCH:
- return round(length * Decimal(0.0254), 4)
- raise ValueError(
- _("Unknown unit {unit}. Must be one of the following: {valid_units}").format(
- unit=unit,
- valid_units=', '.join(CableLengthUnitChoices.values())
- )
- )
|