|
21 | 21 | """ |
22 | 22 | from six import with_metaclass |
23 | 23 |
|
24 | | -from moretools import cached |
| 24 | +from moretools import cached, decamelize |
25 | 25 |
|
26 | | -from modeled.list import list as mlist |
| 26 | +import modeled |
27 | 27 | from . import member |
28 | 28 |
|
29 | 29 |
|
30 | | -class Type(member.type): |
| 30 | +class meta(member.type): |
31 | 31 | @cached |
32 | 32 | def __getitem__(cls, mtype): |
33 | | - return member.type.__getitem__(cls, mlist[mtype]) |
| 33 | + return member.type.__getitem__(cls, modeled.list[mtype]) |
34 | 34 |
|
35 | | -Type.__name__ = 'member.list.type' |
| 35 | + @property |
| 36 | + def itemtype(cls): |
| 37 | + return cls.mtype.mtype |
36 | 38 |
|
| 39 | +meta.__name__ = 'member.list.meta' |
37 | 40 |
|
38 | | -class List(with_metaclass(Type, member)): |
| 41 | + |
| 42 | +class List(with_metaclass(meta, member)): |
39 | 43 | __module__ = 'modeled' |
40 | 44 |
|
| 45 | + @property |
| 46 | + def itemtype(self): |
| 47 | + return self.mtype.mtype |
| 48 | + |
41 | 49 | def __init__(self, items=None, **options): |
42 | 50 | try: |
43 | | - assert(issubclass(self.mtype, mlist)) |
| 51 | + assert(issubclass(self.mtype, modeled.list)) |
44 | 52 | except AttributeError: |
45 | | - items = mlist(items) |
| 53 | + items = modeled.list(items) |
46 | 54 | self.__class__ = type(self)[items.mtype] |
47 | 55 | member.__init__(self, items, **options) |
48 | 56 | else: |
49 | 57 | if items is None: |
50 | 58 | member.__init__(self, **options) |
51 | 59 | else: |
52 | 60 | 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' |
53 | 69 |
|
54 | 70 | List.__name__ = 'member.list' |
0 commit comments