def validate_scalar_unit(self): regex = re.compile('([0-9.]+)\s*(\w+)') try: result = regex.match(str(self.value)).groups() validateutils.str_to_num(result[0]) except Exception: raise ValueError(_('"%s" is not a valid scalar-unit') % self.value) if result[1].upper() in self.SCALAR_UNIT_DICT.keys(): return self.value raise ValueError(_('"%s" is not a valid scalar-unit') % self.value)
def get_num_from_scalar_unit(self, unit=None): if unit: if unit.upper() not in self.SCALAR_UNIT_DICT.keys(): raise ValueError(_('input unit "%s" is not a valid unit') % unit) else: unit = self.SCALAR_UNIT_DEFAULT self.validate_scalar_unit() regex = re.compile('([0-9.]+)\s*(\w+)') result = regex.match(str(self.value)).groups() converted = (float(validateutils.str_to_num(result[0])) * self.SCALAR_UNIT_DICT[result[1].upper()] / self.SCALAR_UNIT_DICT[unit.upper()]) if converted - int(converted) < 0.0000000000001: converted = int(converted) return converted