objectify
parent
8a9cb5a82d
commit
ac7b583f76
|
|
@ -7,10 +7,11 @@ class Writer:
|
||||||
def __init__(self, writer):
|
def __init__(self, writer):
|
||||||
self.writer = writer
|
self.writer = writer
|
||||||
self.previous = Line([])
|
self.previous = Line([])
|
||||||
|
self.chooser = LineChooserLatestSticky()
|
||||||
|
|
||||||
def write(self, v):
|
def write(self, v):
|
||||||
latest = Line(v)
|
latest = Line(v)
|
||||||
chosen = Line.choose(self.previous, latest)
|
chosen = self.chooser.choose(self.previous, latest)
|
||||||
if chosen.v != self.previous.v:
|
if chosen.v != self.previous.v:
|
||||||
self.writer.write(chosen)
|
self.writer.write(chosen)
|
||||||
self.previous = chosen
|
self.previous = chosen
|
||||||
|
|
@ -73,13 +74,24 @@ class Line:
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return json.dumps({"t":self.t, "v": self.v})
|
return json.dumps({"t":self.t, "v": self.v})
|
||||||
|
|
||||||
|
def is_nothing(self):
|
||||||
|
return not self.v
|
||||||
|
|
||||||
|
def is_recent(self):
|
||||||
|
return time.time() - self.t < 1
|
||||||
|
|
||||||
|
class LineChooser:
|
||||||
def choose(a, b):
|
def choose(a, b):
|
||||||
if not a:
|
if not a:
|
||||||
return b
|
return b
|
||||||
if not b:
|
if not b:
|
||||||
return a
|
return a
|
||||||
|
return self._choose(a, b)
|
||||||
|
|
||||||
|
class LineChooserLatestSticky(LineChooser):
|
||||||
|
def _choose(self, a, b):
|
||||||
latest = max([a,b], key=lambda x:x.t)
|
latest = max([a,b], key=lambda x:x.t)
|
||||||
oldest = min([a,b], key=lambda x:x.t)
|
oldest = min([a,b], key=lambda x:x.t)
|
||||||
if not latest.v and time.time() - oldest.t < 1:
|
if latest.is_nothing() and oldest.is_recent():
|
||||||
return oldest
|
return oldest
|
||||||
return latest
|
return latest
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue