Ok... here is the class:<br>SocketRecordVault is a trellis.Set<br><br>class LumberjackWidget(trellis.Component):<br> <br> trellis.values(<br> records = None,<br> filtered_records = None,<br> sorted_records = None,<br>
)<br> <br> def __init__(self, parent):<br> wx.Panel.__init__(self, parent)<br> trellis.Component.__init__(self)<br> <br> self.records = SocketRecordVault()<br> self.filtered_records = trellis.Set()<br>
self.sorted_records = collections.SortedSet(data=self.filtered_records)<br> <br> self.sorted_records.sort_key = lambda x: x.created<br> <br> <br> self.txt = wx.TextCtrl(self, style=wx.TE_MULTILINE)<br>
<br> box = wx.BoxSizer()<br> box.Add(self.txt, 1, wx.EXPAND)<br> self.SetSizer(box)<br> <br> self.fmt = logging.Formatter('%(levelname)s | %(name)s | %(message)s [@ %(asctime)s in %(filename)s:%(lineno)d]')<br>
<br> <br> @trellis.observer<br> def updateView(self):<br> x = len(self.records) # needed to monitor changes<br> self.filtered_records = [x for x in self.records]<br> if self.sorted_records:<br>
self.txt.Clear()<br> for r in self.sorted_records:<br> self.txt.AppendText(self.fmt.format(r)+"\n<br><br>the traceback is:<br><br>Traceback (most recent call last):<br> File "lumberjack.py", line 141, in <module><br>
main()<br> File "lumberjack.py", line 133, in main<br> panel = LumberjackWidget(frame)<br> File "c:\python25\lib\site-packages\DecoratorTools-1.7-py2.5.egg\peak\util\decorators.py", line 634, in __call__<br>
return cls.__class_call__.im_func(cls, *args, **kw)<br> File "<peak.events.trellis.wrap wrapping peak.events.trellis.__class_call__ at 0x01BB4770>", line 5, in __class_call__<br> File "C:\Python25\lib\site-packages\trellis-0.6a1-py2.5.egg\peak\events\stm.py", line 466, in atomically<br>
return super(Controller,self).atomically(self._process, func, args, kw)<br> File "C:\Python25\lib\site-packages\trellis-0.6a1-py2.5.egg\peak\events\stm.py", line 186, in atomically<br> self.cleanup(*sys.exc_info())<br>
File "C:\Python25\lib\site-packages\trellis-0.6a1-py2.5.egg\peak\events\stm.py", line 309, in cleanup<br> return super(Controller, self).cleanup(*args)<br> File "C:\Python25\lib\site-packages\trellis-0.6a1-py2.5.egg\peak\events\stm.py", line 182, in atomically<br>
retval = func(*args, **kw)<br> File "C:\Python25\lib\site-packages\trellis-0.6a1-py2.5.egg\peak\events\stm.py", line 482, in _process<br> self.run_rule(listener)<br> File "C:\Python25\lib\site-packages\trellis-0.6a1-py2.5.egg\peak\events\stm.py", line 359, in run_rule<br>
listener.run()<br> File "lumberjack.py", line 124, in updateView<br> self.filtered_records = [x for x in self.records]<br> File "C:\Python25\lib\site-packages\trellis-0.6a1-py2.5.egg\peak\events\trellis.py", line 615, in __set__<br>
cell.value = value<br> File "C:\Python25\lib\site-packages\trellis-0.6a1-py2.5.egg\peak\events\trellis.py", line 144, in set_value<br> raise InputConflict(self._value, value) #self._set_by) #, value, ctrl.current_listener) # XXX<br>
peak.events.trellis.InputConflict: (Set([]), [])<br><br><div class="gmail_quote">On Wed, Apr 16, 2008 at 9:32 PM, Phillip J. Eby <<a href="mailto:pje@telecommunity.com">pje@telecommunity.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">At 08:06 PM 4/16/2008 +0300, Peter Damoc wrote:<br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="Ih2E3d">
Hi Phillip,<br>
<br>
I tried a naive<br>
<br></div>
fitered_records = [r for r in records if "some segment" in <<a href="http://r.name" target="_blank">http://r.name</a>><a href="http://r.name" target="_blank">r.name</a>]<div class="Ih2E3d"><br>
<br>
It didn't work :)<br>
I get:<br>
peak.events.trellis.InputConflict: (Set([]), [])<br>
</div></blockquote>
<br>
You've left out any information that would help me know what the heck is going on with this bit. Like the traceback, and the code. :)<div class="Ih2E3d"><br>
<br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
as for changes, here is the code:<br>
<br>
@trellis.observer<br>
def updateView(self):<br>
x = len(self.records) # needed to monitor changes<br>
if self.sorted_records:<br>
self.txt.Clear()<br>
for r in self.sorted_records:<br>
self.txt.AppendText(self.fmt.format(r)+"\n")<br>
<br>
if I remove the first line in the method the observer no longer gets triggered.<br>
In all cases the only thing that changes are new record being added to the records set.<br>
</blockquote>
<br></div>
Ah... you need to be using 'self.sorted_records.changes' in order to detect changes in a SortedSet, currently. Really, that's what SortedSet is for, to produce a position-based change log.<br>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>There is NO FATE, we are the creators.