def to_meters(length, unit): """ Convert the given length to meters. """ length = int(length) if length < 0: raise ValueError("Length must be a positive integer") valid_units = CableLengthUnitChoices.values() if unit not in valid_units: raise ValueError( "Unknown unit {}. Must be one of the following: {}".format( unit, ', '.join(valid_units))) if unit == CableLengthUnitChoices.UNIT_KILOMETER: return length * 1000 if unit == CableLengthUnitChoices.UNIT_METER: return length if unit == CableLengthUnitChoices.UNIT_CENTIMETER: return length / 100 if unit == CableLengthUnitChoices.UNIT_MILE: return length * 1609.344 if unit == CableLengthUnitChoices.UNIT_FOOT: return length * 0.3048 if unit == CableLengthUnitChoices.UNIT_INCH: return length * 0.3048 * 12 raise ValueError( f"Unknown unit {unit}. Must be 'km', 'm', 'cm', 'mi', 'ft', or 'in'.")
def to_meters(length, unit): """ Convert the given length to meters. """ try: if length < 0: raise ValueError("Length must be a positive number") except TypeError: raise TypeError(f"Invalid value '{length}' for length (must be a number)") valid_units = CableLengthUnitChoices.values() if unit not in valid_units: raise ValueError(f"Unknown unit {unit}. Must be one of the following: {', '.join(valid_units)}") if unit == CableLengthUnitChoices.UNIT_KILOMETER: return length * 1000 if unit == CableLengthUnitChoices.UNIT_METER: return length if unit == CableLengthUnitChoices.UNIT_CENTIMETER: return length / 100 if unit == CableLengthUnitChoices.UNIT_MILE: return length * Decimal(1609.344) if unit == CableLengthUnitChoices.UNIT_FOOT: return length * Decimal(0.3048) if unit == CableLengthUnitChoices.UNIT_INCH: return length * Decimal(0.3048) * 12 raise ValueError(f"Unknown unit {unit}. Must be 'km', 'm', 'cm', 'mi', 'ft', or 'in'.")