1"""
2This adds some usefull conveniences to NSManagedObject and subclasses thereof
3
4These conveniences try to enable KVO by default on NSManagedObject instances,
5this no longer works on Leopard due to the way NSManagedObject is implemented
6there (it generates accessor methods at runtime, which interferes with the
7implementation in this file).
8"""
9__all__ = ()
10from objc import addConvenienceForClass
11from Foundation import NSObject
12
13def NSMOsetValue_ForKey_(self, name, value):
14    try:
15        if '__objc_python_subclass__' in self.__class__.__dict__:
16            super(self.__class__, self).setValue_forKey_(value, name)
17        else:
18            self.setValue_forKey_(value, name)
19
20    except KeyError as msg:
21        NSObject.__setattr__(self, name, value)
22
23
24def NSMOgetValueForKey_(self, name):
25    try:
26        if '__objc_python_subclass__' in self.__class__.__dict__:
27            return super(self.__class__, self).valueForKey_(name)
28        else:
29            return self.valueForKey_(name)
30
31    except KeyError as msg:
32        raise AttributeError(name)
33
34addConvenienceForClass('NSManagedObject', (
35    ('__setattr__', NSMOsetValue_ForKey_),
36    ('__getattr__', NSMOgetValueForKey_),
37))
38