Am 25.02.2019 um 10:51 schrieb Jens W. Klein:
> On 24.02.19 08:48, Gerhard Schmidt wrote:> Hi,
>>
>> I'm writing a pyramid app using  traversal and ZODB. Right now i writing
>> unit tests and try to test if the _p_changed attribute is set after a
>> method that changes a persistent object.
>>
>> The problem is that _p_changed is always False when running in the
>> testrunner. Even after I do obj._p_changed = True obj._p_changed is
>> still False.
>>
>> In running environment everything works fine. But I often forget the
>> self._p_changed = True after modifying lists or dicts inside a
>> persistent object. So i really like to test if it's get set.
>>
>> Is there a way to test if a persistent object would be saved when the
>> transaction is committed.
> 
> _p_changed is meant as a trigger, but it is not meant to read a status.
> Triggering _p_changed joins the object to a transaction manager which
> then on commit saves the object.

In the normal code I don't read it, but for testing purposes it would be
quite handy.

> What your're looking for is probably _p_status which is "saved" or
> "unsaved".

it's always 'unsaved' while testing, because all objects are brand new
as the database is new for every test. Even after calling
transaction.commit() it's still unsaved. Is there a way to query the
transaction manager if a object is in the to be saved list.

> For dicts/lists Thierry is right, better use
> PersistentList/PersistentDict in order to not to have to trigger
> _p_changed manually.

For most purposes I use PersistenList/Dict, but first there is no
PersistentSet. PersistenList and PeristentDict (especial PeristentDicts
in a PersistentList) tend to fill the ZODB with many small objects and
remove other from the cache. So I use the not persistent ones when they
don't change often (most of the Time never) but even code that called
once a month or once a year has to be tested. And when _p_changed is not
used often the chance of forgetting increases and testing it is rather
useful.

Regards
    Estartu

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pylons-discuss/5b7fa352-cd5f-199f-ea54-f72b08d72fae%40augusta.de.
For more options, visit https://groups.google.com/d/optout.

Reply via email to