def test_deep(self): class A(object): __slots__ = ['foo', 'bar'] class B(A): __slots__ = ('gak',) class C(B): pass self.assertTrue(util.is_class_sealed(A)) self.assertTrue(util.is_class_sealed(B)) self.assertFalse(util.is_class_sealed(C))
def test_new_mixed(self): class A(object): __slots__ = ['foo', 'bar'] class B(A): pass class C(B): __slots__ = ('spam', 'eggs') self.assertTrue(util.is_class_sealed(A)) self.assertFalse(util.is_class_sealed(B)) self.assertFalse(util.is_class_sealed(C))
def test_deep(self): class A(object): __slots__ = ['foo', 'bar'] class B(A): __slots__ = ('gak', ) class C(B): pass self.assertTrue(util.is_class_sealed(A)) self.assertTrue(util.is_class_sealed(B)) self.assertFalse(util.is_class_sealed(C))
def compile(self): """ This compiles the alias into a form that can be of most benefit to the en/decoder. """ if self._compiled: return self.decodable_properties = set() self.encodable_properties = set() self.inherited_dynamic = None self.inherited_sealed = None self.bases = [] self.exclude_attrs = set(self.exclude_attrs or []) self.readonly_attrs = set(self.readonly_attrs or []) self.static_attrs = list(self.static_attrs or []) self.static_attrs_set = set(self.static_attrs) self.proxy_attrs = set(self.proxy_attrs or []) self.sealed = util.is_class_sealed(self.klass) if self.external: self._checkExternal() self._finalise_compile() # this class is external so no more compiling is necessary return if hasattr(self.klass, '__slots__'): self.decodable_properties.update(self.klass.__slots__) self.encodable_properties.update(self.klass.__slots__) for k, v in six.iteritems(self.klass.__dict__): if not isinstance(v, property): continue if v.fget: self.encodable_properties.update([k]) if v.fset: self.decodable_properties.update([k]) else: self.readonly_attrs.update([k]) mro = inspect.getmro(self.klass)[1:] for c in mro: self._compile_base_class(c) self.getCustomProperties() self._finalise_compile()
def compile(self): """ This compiles the alias into a form that can be of most benefit to the en/decoder. """ if self._compiled: return self.decodable_properties = set() self.encodable_properties = set() self.inherited_dynamic = None self.inherited_sealed = None self.bases = [] self.exclude_attrs = set(self.exclude_attrs or []) self.readonly_attrs = set(self.readonly_attrs or []) self.static_attrs = list(self.static_attrs or []) self.static_attrs_set = set(self.static_attrs) self.proxy_attrs = set(self.proxy_attrs or []) self.sealed = util.is_class_sealed(self.klass) if self.external: self._checkExternal() self._finalise_compile() # this class is external so no more compiling is necessary return if hasattr(self.klass, '__slots__'): self.decodable_properties.update(self.klass.__slots__) self.encodable_properties.update(self.klass.__slots__) for k, v in self.klass.__dict__.iteritems(): if not isinstance(v, property): continue if v.fget: self.encodable_properties.update([k]) if v.fset: self.decodable_properties.update([k]) else: self.readonly_attrs.update([k]) mro = inspect.getmro(self.klass)[1:] for c in mro: self._compile_base_class(c) self.getCustomProperties() self._finalise_compile()