content: 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())
          )
      )
  