Skip to content

Commit f3967cc

Browse files
improved modeled.member.list with itemtype property and indexname and itemname options
1 parent 6f2dac2 commit f3967cc

1 file changed

Lines changed: 24 additions & 8 deletions

File tree

modeled/member/list.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,34 +21,50 @@
2121
"""
2222
from six import with_metaclass
2323

24-
from moretools import cached
24+
from moretools import cached, decamelize
2525

26-
from modeled.list import list as mlist
26+
import modeled
2727
from . import member
2828

2929

30-
class Type(member.type):
30+
class meta(member.type):
3131
@cached
3232
def __getitem__(cls, mtype):
33-
return member.type.__getitem__(cls, mlist[mtype])
33+
return member.type.__getitem__(cls, modeled.list[mtype])
3434

35-
Type.__name__ = 'member.list.type'
35+
@property
36+
def itemtype(cls):
37+
return cls.mtype.mtype
3638

39+
meta.__name__ = 'member.list.meta'
3740

38-
class List(with_metaclass(Type, member)):
41+
42+
class List(with_metaclass(meta, member)):
3943
__module__ = 'modeled'
4044

45+
@property
46+
def itemtype(self):
47+
return self.mtype.mtype
48+
4149
def __init__(self, items=None, **options):
4250
try:
43-
assert(issubclass(self.mtype, mlist))
51+
assert(issubclass(self.mtype, modeled.list))
4452
except AttributeError:
45-
items = mlist(items)
53+
items = modeled.list(items)
4654
self.__class__ = type(self)[items.mtype]
4755
member.__init__(self, items, **options)
4856
else:
4957
if items is None:
5058
member.__init__(self, **options)
5159
else:
5260
member.__init__(self, items, **options)
61+
self.indexname = options.get('indexname', 'index')
62+
try:
63+
self.itemname = options['itemname']
64+
except KeyError:
65+
if modeled.ismodeledclass(self.itemtype):
66+
self.itemname = decamelize(self.itemtype.__name__)
67+
else:
68+
self.itemname = 'item'
5369

5470
List.__name__ = 'member.list'

0 commit comments

Comments
 (0)