Skip to content

Instantly share code, notes, and snippets.

@Neppord
Forked from objarni/alarm.py
Created September 14, 2012 15:55
Show Gist options
  • Save Neppord/3722840 to your computer and use it in GitHub Desktop.
Save Neppord/3722840 to your computer and use it in GitHub Desktop.
fuse variation
import random
class Sensor(object):
OFFSET = 16
def pop_next_pressure_psi_value(self):
pressure_telemetry_value = self.sample_pressure()
return Sensor.OFFSET + pressure_telemetry_value
def __iter__(self):
return iter(self.pop_next_pressure_psi_value, Ellipsis)
@staticmethod
def sample_pressure():
# placeholder implementation that simulate a real sensor in a real tire
pressure_telemetry_value = 6 * random.random() * random.random()
return pressure_telemetry_value
class TirePressureAlarm():
def __init__(self):
self.fuse = Fuse(
condition=lambda value : not 17 <= value <= 21,
iterator=iter(Sensor())
)
def check(self):
self.fuse.check()
def is_alarm_on(self):
return self.fuse.on
Alarm = TirePressureAlarm
class Fuse(object):
def __init__(self, condition, iterator):
self.__conditon = condition
self.__iterator = iterator
self.__on = False
def check(self):
value = self.__iterator.next()
self.__on = self.on or self.__conditon(value)
@property
def on(self):
return self.__on
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment