def __set__(self, instance, value): if super(FloatDescriptor, self).__set__(instance, value): # the None handler...kinda hacky return try: iv = parse_float(value, self.name, instance) except Exception as e: logger.error( 'Failed converting {} of type {} to `float`\n\t' 'for field {} of class {} with exception {} - {}.\n\t' 'Setting value to None, which may be against the standard'.format( value, type(value), self.name, instance.__class__.__name__, type(e), e)) self.data[instance] = None return if self._in_bounds(iv): self.data[instance] = iv else: msg = 'Attribute {} of class {}\n\t' \ 'is required by standard to take value between {}.'.format( self.name, instance.__class__.__name__, self.bounds) if self.strict: raise ValueError(msg) else: logger.info(msg) self.data[instance] = iv
def RcvFMRate(self, value): if value is None: self._RcvFMRate = None else: try: self._RcvFMRate = parse_float(value, 'RcvFMRate', self) except Exception as e: logger.error( 'Failed parsing value {} for field RCVFMRate of type "float",\n\t' 'with error {} - {}.\n\t' 'The value has been set to None.'.format(value, type(e), e)) self._RcvFMRate = None
def __set__(self, instance, value): if super(FloatModularDescriptor, self).__set__(instance, value): # the None handler...kinda hacky return try: val = parse_float(value, self.name, instance) except Exception as e: logger.error( 'Failed converting {} of type {} to `float`\n\t' 'for field {} of class {} with exception {} - {}.\n\t' 'Setting value to None, which may be against the standard'.format( value, type(value), self.name, instance.__class__.__name__, type(e), e)) self.data[instance] = None return # do modular arithmetic manipulations val = (val % (2 * self.limit)) # NB: % and * have same precedence, so it can be super dumb self.data[instance] = val if val <= self.limit else val - 2 * self.limit