[docs]defmin_max_validator_int(min_val,max_val):defvalidator(val):# put limits on motiontry:val=int(val)ifval<min_val:val=min_valelifval>max_val:val=max_valifval!=val:raiseRelayValueCoerced(val)return# catch NaN's hitting the intexceptValueError:raiseRelayValueRejected()returnvalreturnvalidator
[docs]defmin_max_validator(min_val,max_val,min_ne=False,max_ne=False,allow_nan=False):ifnotmin_ne:ifnotmax_ne:defvalidator(val):ifnotmath.isfinite(val):ifallow_nan:returnelse:raiseRelayValueRejected()# put limits on motionifval<min_val:raiseRelayValueCoerced(min_val)elifval>max_val:raiseRelayValueCoerced(max_val)returnvalelse:defvalidator(val):ifnotmath.isfinite(val):ifallow_nan:returnelse:raiseRelayValueRejected()# put limits on motionifval<min_val:raiseRelayValueCoerced(min_val)elifval>=max_val:raiseRelayValueRejected()returnvalelse:ifnotmax_ne:defvalidator(val):ifnotmath.isfinite(val):ifallow_nan:returnelse:raiseRelayValueRejected()# put limits on motionifval<=min_val:raiseRelayValueRejected()elifval>max_val:raiseRelayValueCoerced(max_val)returnvalelse:defvalidator(val):ifnotmath.isfinite(val):ifallow_nan:returnelse:raiseRelayValueRejected()# put limits on motionifval<=min_val:raiseRelayValueRejected()elifval>=max_val:raiseRelayValueRejected()returnvalreturnvalidator