From a1983697c79fd333d0dae8733e2dd47bec05bc88 Mon Sep 17 00:00:00 2001 From: Christophe de Vienne Date: Fri, 28 Oct 2011 18:19:00 +0200 Subject: [PATCH] Enum now takes values as args instead of a list --- wsme/tests/protocol.py | 3 ++- wsme/tests/test_types.py | 3 +-- wsme/types.py | 12 ++++++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/wsme/tests/protocol.py b/wsme/tests/protocol.py index c0dfe61..d41ff30 100644 --- a/wsme/tests/protocol.py +++ b/wsme/tests/protocol.py @@ -29,7 +29,7 @@ class CallException(RuntimeError): self.faultcode, self.faultstring, self.debuginfo) -myenumtype = wsme.types.Enum(str, set(['v1', 'v2'])) +myenumtype = wsme.types.Enum(str, 'v1', 'v2') class NestedInner(object): @@ -220,6 +220,7 @@ class ArgTypes(object): assert type(value) == str return value + class WithErrors(object): @expose() def divide_by_zero(self): diff --git a/wsme/tests/test_types.py b/wsme/tests/test_types.py index a3ab53d..ada0e81 100644 --- a/wsme/tests/test_types.py +++ b/wsme/tests/test_types.py @@ -135,7 +135,7 @@ class TestTypes(unittest.TestCase): assert AType().test == 'test' def test_enum(self): - aenum = types.Enum(str, ['v1', 'v2']) + aenum = types.Enum(str, 'v1', 'v2') assert aenum.basetype is str class AType(object): @@ -149,7 +149,6 @@ class TestTypes(unittest.TestCase): obj.a = 'v1' assert obj.a == 'v1' - try: obj.a = 'v3' assert False, 'ValueError was not raised' diff --git a/wsme/types.py b/wsme/types.py index 2fe358f..bbf3736 100644 --- a/wsme/types.py +++ b/wsme/types.py @@ -4,6 +4,7 @@ import decimal import inspect import weakref + class UserType(object): basetype = None @@ -45,10 +46,16 @@ class Enum(UserType): :param values: A set of possible values If nullable, 'None' should be added the values set. + + Example:: + + Gender = Enum(str, 'male', 'female') + Specie = Enum(str, 'cat', 'dog') + """ - def __init__(self, basetype, values): + def __init__(self, basetype, *values): self.basetype = basetype - self.values = values + self.values = set(values) def validate(self, value): if value not in self.values: @@ -91,6 +98,7 @@ def validate_value(datatype, value): datatype, type(value) )) + class wsproperty(property): """ A specialised :class:`property` to define typed-property on complex types.