Force exception on attribute write access only one object

Thomas Guettler hv at tbz-pariv.de
Fri Jan 9 08:01:10 EST 2009


Hi Peter and others,

your idea was good, but it does not work with Django ORM Models:

Traceback (most recent call last):
  File "/localhome/modw/django/core/handlers/base.py", line 87, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/localhome/modw/foo/views/filter.py", line 473, in add
    return edit(request, 'add')
  File "/localhome/modw/foo/views/filter.py", line 493, in edit
    filter=form.save()
  File "/localhome/modw/foo/views/filter.py", line 457, in save
    action=form.save()
  File "/localhome/modw/django/forms/models.py", line 315, in save
    if self.instance.pk is None:
  File "/localhome/modw/django/db/models/base.py", line 292, in _get_pk_val
    return getattr(self, meta.pk.attname)
AttributeError: 'MyAction' object has no attribute 'filter_action_ptr_id'


Peter Otten schrieb:
> Thomas Guettler wrote:
> 
>> for debugging I want to raise an exception if an attribute is
>> changed on an object. Since it is only for debugging I don't want
>> to change the integer attribute to a property.
> 
> Why?
>  
>> This should raise an exception:
>>
>> myobj.foo=1
>>
>> Background:
>> Somewhere this value gets changed. But I don't now where.
> 
> If you change your mind:
> 
> class A(object):
>     def __init__(self): 
>         self.foo = 42
> 
> a = A()
> b = A()
> 
> class B(A):
>     @property
>     def foo(self):
>         return self.__dict__["foo"]
> 
> b.__class__ = B
> 
> a.foo = "whatever"
> print b.foo
> b.foo = "whatever"
> 
> Peter


-- 
Thomas Guettler, http://www.thomas-guettler.de/
E-Mail: guettli (*) thomas-guettler + de



More information about the Python-list mailing list