persistent icon indicating copy to clipboard operation
persistent copied to clipboard

Option to prevent storage of non-persistent mutable objects

Open jimfulton opened this issue 6 years ago • 2 comments

An important bit of ZODB fine print and, for some, a common pitfall is the persistence rule that if you store non-persistent subobjects, you need to take special case, possibly inviting bugs.

I think it would be useful to enforce a restriction to only storing persistent or immutable objects. Amongts the ways to do this:

  • White list known immutable objects, with a way to add objects to the white list. A possible way to whitelist custom objects might be to use an ABC. I suspect that a static white list would address 98% of cases. We might want to create some new immutable objects, like linked lists.

  • Inspect types for mutators (e.g. setattr, setitem). I can see this becomming a maintenance burden.

jimfulton avatar Sep 26 '18 13:09 jimfulton

I agree with this idea, non-persistence of objects (eg. imported from/to json and yaml) is a scary thing,

I developed lot of utilities to constantly check my DB (especially since some methods of Persistent* objects returned non-persistent types), but it remains dangerous. ---> https://github.com/ChrysalisTeam/pychronia/blob/7a9efef62da3451e1aa22efbe4c6ca0568dddf96/pychronia_game/utilities/init.py#L205

Having safeguards against this, built in ZODB, would be awesome.

pakal avatar May 01 '19 21:05 pakal

(See https://github.com/zopefoundation/persistent/issues/112 for a nasty case where persistence can be lost unknowingly)

pakal avatar May 02 '19 07:05 pakal