Hi

I fixed a very serious bug in getpaid.core:

In getpaid.core.options, the PersistentOptions class, used for
handling the annotation storage on objects, for items as well as
payment processors and so on, was setting the annotation_key on the
PersistentOptions class itself instead of the generated storage
classes (like BuyableContentStorage).

This meant that the last generated class' key would win - and all
annotations created by PersistentOptions in getpaid would use that key
- also payment processors etc.

Before all my items data would be stored under the
getpaid.content.variableamountdonate key. And there could only be one
getpaid related annotation pr. item. Now the correct key is used, and
there can be several annotations per object, like:
...
('getpaid.content.buyable',
  <persistent.dict.PersistentDict object at 0x10a7ec6c>),
 ('getpaid.content.donate',
  <persistent.dict.PersistentDict object at 0x10a5852c>)]

This bug might account for al sorts of strange behaviour, missing or
overwritten settings etc.

I once in a while noticed a strange behavior - sometimes the prices
and other data of my buyable items would disappear - perhaps related
to plone.reloading the payment processor I am working on - this would
regenerate its options class, and suddenly set its own key on the
PersistentOptions class, affecting all getpaid related annotations in
the system (until a restart).

The bad news is that this will require some migration of existing
sites - their annotation data will no longer be available, since the
correct key will now be used for lookup. I did not commit it yet
because of this.

The migration should probably consists of trawling through the whole
site, and fixing annotation keys where necessary, for both content and
settings in general.

How do we handle this?

The fix is simply to change line 132 on trunk
cls.annotation_key = key
to
new_class.annotation_key = key

I committed some very basic tests for annotations using the correct
keys.

regards, Sune W.

-- 
GetPaid for Plone: http://www.plonegetpaid.com (overview info) | 
http://code.google.com/p/getpaid (code and issue tracker)
You received this message because you are subscribed to the Google Groups 
"getpaid-dev" group.
To post to this group, send email to getpaid-dev@googlegroups.com
To unsubscribe from this group, send email to 
getpaid-dev+unsubscr...@googlegroups.com

For more options, visit this group at
http://groups.google.com/group/getpaid-dev?hl=en?hl=en

Reply via email to