To avoid any array or dict duplication, use set() instead of list() for the registry array_types and dict_types attributes

This commit is contained in:
Christophe de Vienne 2012-09-14 10:54:10 +02:00
parent 110db71c8e
commit 3d27316575

View File

@ -416,8 +416,8 @@ def list_attributes(class_):
class Registry(object):
def __init__(self):
self.complex_types = []
self.array_types = []
self.dict_types = []
self.array_types = set()
self.dict_types = set()
def register(self, class_):
"""
@ -439,8 +439,7 @@ class Registry(object):
raise ValueError("Cannot register type %s" % repr(class_))
dt = ArrayType(class_[0])
self.register(dt.item_type)
if dt not in self.array_types:
self.array_types.append(dt)
self.array_types.add(dt)
return dt
if isinstance(class_, dict):
@ -448,8 +447,7 @@ class Registry(object):
raise ValueError("Cannot register type %s" % repr(class_))
dt = DictType(*list(class_.items())[0])
self.register(dt.value_type)
if dt not in self.dict_types:
self.dict_types.append(dt)
self.dict_types.add(dt)
return dt
class_._wsme_attributes = None
@ -479,12 +477,12 @@ class Registry(object):
type_ = DictType(list(type_.keys())[0], list(type_.values())[0])
if isinstance(type_, ArrayType):
type_ = ArrayType(self.resolve_type(type_.item_type))
self.array_types.append(type_)
self.array_types.add(type_)
elif isinstance(type_, DictType):
type_ = DictType(
type_.key_type,
self.resolve_type(type_.value_type))
self.dict_types.append(type_)
self.dict_types.add(type_)
else:
type_ = self.register(type_)
return type_