[PEAK] Re: Trellis: Sensor.listening and iter_listeners()

Sergey Schetinin maluke at gmail.com
Wed Nov 12 13:16:29 EST 2008


Switching to a manager instead of scheduling update_connection
pseudo-rule fixed the issue.

from peak.util.addons import AddOn

class UpdateConnection(AddOn):
    def __init__(self, sensor):
        self.sensor = sensor

    def __enter__(self):
        pass

    def update_connection(self):
        sensor = self.sensor
        descr = type(sensor).listening
        listening = descr.__get__(sensor)
        if sensor.next_listener is not None:
            if listening is NOT_GIVEN:
                descr.__set__(sensor, sensor.connector.connect(self))
        elif listening is not NOT_GIVEN:
            sensor.connector.disconnect(sensor, listening)
            descr.__set__(sensor, NOT_GIVEN)

    def __exit__(self, *args):
        self.update_connection()
        self.delete_from(self.sensor)


then manage(UpdateManager(self)) or

from contextlib import contextmanager

    @property
    def upd_manager(self):
        if not self._upd_manager:
            self._upd_manager = self.make_upd_manager()
        return self._upd_manager

    @contextmanager
    def make_upd_manager(self):
        yield
        descr = type(self).listening
        listening = descr.__get__(self)
        if self.next_listener is not None:
            if listening is NOT_GIVEN:
                descr.__set__(self, self.connector.connect(self))
        elif listening is not NOT_GIVEN:
            self.connector.disconnect(self, listening)
            descr.__set__(self, NOT_GIVEN)
        if not isinstance(self, ConstantMixin):
            self._upd_manager = None

then manage(self.upd_manager).





On Wed, Nov 12, 2008 at 19:24, Sergey Schetinin <maluke at gmail.com> wrote:
> After adding `if self.update_connection not in pending:
> on_undo(pending.remove, self.update_connection)` in relevant places,
> the printed counts show that all of them get called, so this has to be
> something else.
>
>
> On Wed, Nov 12, 2008 at 18:25, Sergey Schetinin <maluke at gmail.com> wrote:
>> I forgot to mention that the same debug prints were added to
>> LazyCell.run right after scheduling of update_connection.
>>
>> On Wed, Nov 12, 2008 at 18:19, Sergey Schetinin <maluke at gmail.com> wrote:
>>> I tracked this down to the fact that not all scheduled
>>> update_connection get called.
>>>
>>> In attempt to find out how often does this happen I added the
>>> following to SensorBase._set_listener (`pending` refers to a global
>>> set())
>>>
>>>            print len(pending), '++'
>>>            pending.add(self)
>>>
>>>  and in update_connection
>>>
>>>            print len(pending), '--'
>>>            pending.remove(self)
>>>
>>> And the printed counts don't go back to 1 even for tests that seem to
>>> work correctly. Am I missing something?
>>>
>>>
>>>
>>>
>>> On Wed, Nov 12, 2008 at 16:18, Sergey Schetinin <maluke at gmail.com> wrote:
>>>> I tracked one of the issues I was having periodically to a case when a
>>>> sensor did not connect when it should have.
>>>>
>>>>>>> evt_cell
>>>> Sensor(<bound method PyEventBinder._events of <wx._core.PyEventBinder
>>>> object at 0x00E5DD10>>, None, discrete[None])
>>>>>>> evt_cell.listening
>>>> NOT_GIVEN
>>>>>>> list(evt_cell.iter_listeners())
>>>> [WxCell(221), WxCell(392)]
>>>>
>>>> This state is invalid, correct?
>>>>
>>>>
>>>> --
>>>> Best Regards,
>>>> Sergey Schetinin
>>>>
>>>> http://s3bk.com/ -- S3 Backup
>>>> http://word-to-html.com/ -- Word to HTML Converter
>>>>
>>>
>>>
>>>
>>> --
>>> Best Regards,
>>> Sergey Schetinin
>>>
>>> http://s3bk.com/ -- S3 Backup
>>> http://word-to-html.com/ -- Word to HTML Converter
>>>
>>
>>
>>
>> --
>> Best Regards,
>> Sergey Schetinin
>>
>> http://s3bk.com/ -- S3 Backup
>> http://word-to-html.com/ -- Word to HTML Converter
>>
>
>
>
> --
> Best Regards,
> Sergey Schetinin
>
> http://s3bk.com/ -- S3 Backup
> http://word-to-html.com/ -- Word to HTML Converter
>



-- 
Best Regards,
Sergey Schetinin

http://s3bk.com/ -- S3 Backup
http://word-to-html.com/ -- Word to HTML Converter



More information about the PEAK mailing list