def test_wsproperty(self): class WithWSProp(object): def __init__(self): self._aint = 0 def get_aint(self): return self._aint def set_aint(self, value): self._aint = value aint = types.wsproperty(int, get_aint, set_aint, mandatory=True) types.register_type(WithWSProp) print(WithWSProp._wsme_attributes) assert len(WithWSProp._wsme_attributes) == 1 a = WithWSProp._wsme_attributes[0] assert a.key == 'aint' assert a.datatype == int assert a.mandatory o = WithWSProp() o.aint = 12 assert o.aint == 12
def test_private_attr(self): class WithPrivateAttrs(object): _private = 12 types.register_type(WithPrivateAttrs) assert len(WithPrivateAttrs._wsme_attributes) == 0
def test_selfreftype(self): class SelfRefType(object): pass SelfRefType.parent = SelfRefType types.register_type(SelfRefType)
def test_inspect_with_property(self): class AType(object): @property def test(self): return 'test' types.register_type(AType) assert len(AType._wsme_attributes) == 0 assert AType().test == 'test'
def test_nested(self): class Inner(object): aint = int class Outer(object): inner = Inner types.register_type(Outer) assert hasattr(Inner, '_wsme_attributes') assert len(Inner._wsme_attributes) == 1
def test_inspect_with_inheritance(self): class Parent(object): parent_attribute = int class Child(Parent): child_attribute = int types.register_type(Parent) types.register_type(Child) assert len(Child._wsme_attributes) == 2
def test_cross_referenced_types(self): class A(object): b = types.wsattr('B') class B(object): a = A types.register_type(A) types.register_type(B) assert A.b.datatype is B
def test_list_of_complextypes(self): class A(object): bs = types.wsattr(['B']) class B(object): i = int types.register_type(A) types.register_type(B) assert A.bs.datatype.item_type is B
def test_attribute_validation_minimum(self): class ATypeInt(object): attr = types.IntegerType(minimum=1, maximum=5) types.register_type(ATypeInt) obj = ATypeInt() obj.attr = 2 # comparison between 'zero' value and intger minimum (1) raises a # TypeError which must be wrapped into an InvalidInput exception self.assertRaises(exc.InvalidInput, setattr, obj, 'attr', 'zero')
def test_wsattr_del(self): class MyType(object): a = types.wsattr(int) types.register_type(MyType) value = MyType() value.a = 5 assert value.a == 5 del value.a assert value.a is types.Unset
def test_named_attribute(self): class ABCDType(object): a_list = types.wsattr([int], name='a.list') astr = str types.register_type(ABCDType) assert len(ABCDType._wsme_attributes) == 2 attrs = ABCDType._wsme_attributes assert attrs[0].key == 'a_list', attrs[0].key assert attrs[0].name == 'a.list', attrs[0].name assert attrs[1].key == 'astr', attrs[1].key assert attrs[1].name == 'astr', attrs[1].name
def test_encode_sample_value(self): class MyType(object): aint = int astr = str register_type(MyType) v = MyType() v.aint = 4 v.astr = "s" r = wsme.rest.json.encode_sample_value(MyType, v, True) print(r) assert r[0] == ("javascript") assert r[1] == json.dumps({"aint": 4, "astr": "s"}, ensure_ascii=False, indent=4, sort_keys=True)
def test_encode_sample_value(self): class MyType(object): aint = int astr = str register_type(MyType) v = MyType() v.aint = 4 v.astr = 's' r = wsme.rest.json.encode_sample_value(MyType, v, True) print(r) assert r[0] == ('javascript') assert r[1] == json.dumps({'aint': 4, 'astr': 's'}, ensure_ascii=False, indent=4, sort_keys=True)
def test_text_attribute_conversion(self): class SType(object): atext = types.text abytes = types.bytes types.register_type(SType) obj = SType() obj.atext = six.b('somebytes') assert obj.atext == six.u('somebytes') assert isinstance(obj.atext, types.text) obj.abytes = six.u('sometext') assert obj.abytes == six.b('sometext') assert isinstance(obj.abytes, types.bytes)
def test_attribute_validation(self): class AType(object): alist = [int] aint = int types.register_type(AType) obj = AType() obj.alist = [1, 2, 3] assert obj.alist == [1, 2, 3] obj.aint = 5 assert obj.aint == 5 self.assertRaises(exc.InvalidInput, setattr, obj, 'alist', 12) self.assertRaises(exc.InvalidInput, setattr, obj, 'alist', [2, 'a'])
def test_enum(self): aenum = types.Enum(str, 'v1', 'v2') assert aenum.basetype is str class AType(object): a = aenum types.register_type(AType) assert AType.a.datatype is aenum obj = AType() obj.a = 'v1' assert obj.a == 'v1', repr(obj.a) self.assertRaisesRegexp( exc.InvalidInput, "Invalid input for field/attribute a. \ Value: 'v3'. Value should be one of: v., v.", setattr, obj, 'a', 'v3')
def test_encode_sample_value(self): class MyType(object): aint = int atext = wsme.types.text register_type(MyType) value = MyType() value.aint = 5 value.atext = u('test') language, sample = wsme.rest.xml.encode_sample_value( MyType, value, True) print (language, sample) assert language == 'xml' assert sample == b("""<value> <aint>5</aint> <atext>test</atext> </value>""")
def test_encode_sample_value(self): class MyType(object): aint = int atext = wsme.types.text register_type(MyType) value = MyType() value.aint = 5 value.atext = u('test') language, sample = wsme.rest.xml.encode_sample_value( MyType, value, True) print(language, sample) assert language == 'xml' assert sample == b("""<value> <aint>5</aint> <atext>test</atext> </value>""")
def test_enum(self): aenum = types.Enum(str, 'v1', 'v2') assert aenum.basetype is str class AType(object): a = aenum types.register_type(AType) assert AType.a.datatype is aenum obj = AType() obj.a = 'v1' assert obj.a == 'v1', repr(obj.a) try: obj.a = 'v3' assert False, 'ValueError was not raised' except ValueError as e: assert str(e) == \ "a: Value 'v3' is invalid (should be one of: v1, v2)", e
def test_encode_sample_value(self): class MyType(object): aint = int astr = str register_type(MyType) v = MyType() v.aint = 4 v.astr = 's' r = wsme.rest.json.encode_sample_value(MyType, v, True) print(r) assert r[0] == ('javascript') assert r[1] == json.dumps({ 'aint': 4, 'astr': 's' }, ensure_ascii=False, indent=4, sort_keys=True)
def test_attribute_order(self): class ForcedOrder(object): _wsme_attr_order = ("a2", "a1", "a3") a1 = int a2 = int a3 = int types.register_type(ForcedOrder) print(ForcedOrder._wsme_attributes) assert ForcedOrder._wsme_attributes[0].key == "a2" assert ForcedOrder._wsme_attributes[1].key == "a1" assert ForcedOrder._wsme_attributes[2].key == "a3" c = gen_class() print(c) types.register_type(c) del c._wsme_attributes c.a2 = int c.a1 = int c.a3 = int types.register_type(c) assert c._wsme_attributes[0].key == "a1", c._wsme_attributes[0].key assert c._wsme_attributes[1].key == "a2" assert c._wsme_attributes[2].key == "a3"
def test_attribute_order(self): class ForcedOrder(object): _wsme_attr_order = ('a2', 'a1', 'a3') a1 = int a2 = int a3 = int types.register_type(ForcedOrder) print(ForcedOrder._wsme_attributes) assert ForcedOrder._wsme_attributes[0].key == 'a2' assert ForcedOrder._wsme_attributes[1].key == 'a1' assert ForcedOrder._wsme_attributes[2].key == 'a3' c = gen_class() print(c) types.register_type(c) del c._wsme_attributes c.a2 = int c.a1 = int c.a3 = int types.register_type(c) assert c._wsme_attributes[0].key == 'a1', c._wsme_attributes[0].key assert c._wsme_attributes[1].key == 'a2' assert c._wsme_attributes[2].key == 'a3'
def test_attribute_order(self): class ForcedOrder(object): _wsme_attr_order = ('a2', 'a1', 'a3') a1 = int a2 = int a3 = int types.register_type(ForcedOrder) print(ForcedOrder._wsme_attributes) assert ForcedOrder._wsme_attributes[0].key == 'a2' assert ForcedOrder._wsme_attributes[1].key == 'a1' assert ForcedOrder._wsme_attributes[2].key == 'a3' c = gen_class() print(c) types.register_type(c) del c._wsme_attributes c.a2 = int c.a1 = int c.a3 = int types.register_type(c) assert c._wsme_attributes[0].key == 'a1', c._wsme_attributes[0].key assert c._wsme_attributes[1].key == 'a2' assert c._wsme_attributes[2].key == 'a3'
def test_enum(self): aenum = types.Enum(str, 'v1', 'v2') assert aenum.basetype is str class AType(object): a = aenum types.register_type(AType) assert AType.a.datatype is aenum obj = AType() obj.a = 'v1' assert obj.a == 'v1', repr(obj.a) self.assertRaisesRegexp(exc.InvalidInput, "Invalid input for field/attribute a. \ Value: 'v3'. Value should be one of: v., v.", setattr, obj, 'a', 'v3')
def test_flat_type(self): class Flat(object): aint = int abytes = six.binary_type atext = six.text_type afloat = float types.register_type(Flat) assert len(Flat._wsme_attributes) == 4 attrs = Flat._wsme_attributes print(attrs) assert attrs[0].key == 'aint' assert attrs[0].name == 'aint' assert isinstance(attrs[0], types.wsattr) assert attrs[0].datatype == int assert attrs[0].mandatory is False assert attrs[1].key == 'abytes' assert attrs[1].name == 'abytes' assert attrs[2].key == 'atext' assert attrs[2].name == 'atext' assert attrs[3].key == 'afloat' assert attrs[3].name == 'afloat'
def test_flat_type(self): class Flat(object): aint = int abytes = six.binary_type atext = six.text_type afloat = float types.register_type(Flat) assert len(Flat._wsme_attributes) == 4 attrs = Flat._wsme_attributes print(attrs) assert attrs[0].key == 'aint' assert attrs[0].name == 'aint' assert isinstance(attrs[0], types.wsattr) assert attrs[0].datatype == int assert attrs[0].mandatory is False assert attrs[1].key == 'abytes' assert attrs[1].name == 'abytes' assert attrs[2].key == 'atext' assert attrs[2].name == 'atext' assert attrs[3].key == 'afloat' assert attrs[3].name == 'afloat'