|
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.dict import dict as mdict |
| 26 | +import modeled |
27 | 27 | from . import member |
28 | 28 |
|
29 | 29 |
|
30 | | -class Type(member.type): |
| 30 | +class meta(member.meta): |
31 | 31 | @cached |
32 | 32 | def __getitem__(cls, mtypes): |
33 | | - return member.type.__getitem__(cls, mdict[mtypes]) |
| 33 | + return member.type.__getitem__(cls, modeled.dict[mtypes]) |
34 | 34 |
|
35 | | -Type.__name__ = 'member.dict.type' |
| 35 | + @property |
| 36 | + def itemtype(cls): |
| 37 | + return cls.mtype.mtype |
36 | 38 |
|
| 39 | + @property |
| 40 | + def keytype(cls): |
| 41 | + return cls.mtype.mtype.mtypes[0] |
37 | 42 |
|
38 | | -class Dict(with_metaclass(Type, member)): |
| 43 | + @property |
| 44 | + def valuetype(cls): |
| 45 | + return cls.mtype.mtype.mtypes[1] |
| 46 | + |
| 47 | +meta.__name__ = 'member.dict.meta' |
| 48 | + |
| 49 | + |
| 50 | +class Dict(with_metaclass(meta, member)): |
39 | 51 | __module__ = 'modeled' |
40 | 52 |
|
| 53 | + @property |
| 54 | + def itemtype(self): |
| 55 | + return self.mtype.mtype |
| 56 | + |
| 57 | + @property |
| 58 | + def keytype(self): |
| 59 | + return self.mtype.mtype.mtypes[0] |
| 60 | + |
| 61 | + @property |
| 62 | + def valuetype(self): |
| 63 | + return self.mtype.mtype.mtypes[1] |
| 64 | + |
41 | 65 | def __init__(self, items=None, **options): |
42 | 66 | try: |
43 | | - assert(issubclass(self.mtype, mdict)) |
| 67 | + assert(issubclass(self.mtype, modeled.dict)) |
44 | 68 | except AttributeError: |
45 | | - items = mdict(items) |
| 69 | + items = modeled.dict(items) |
46 | 70 | self.__class__ = type(self)[items.mtype.mtypes] |
47 | 71 | member.__init__(self, items, **options) |
48 | 72 | else: |
49 | 73 | if items is None: |
50 | 74 | member.__init__(self, **options) |
51 | 75 | else: |
52 | 76 | member.__init__(self, items, **options) |
| 77 | + self.keyname = options.get('keyname', 'key') |
| 78 | + try: |
| 79 | + self.valuename = options['valuename'] |
| 80 | + except KeyError: |
| 81 | + if modeled.ismodeledclass(self.valuetype): |
| 82 | + self.valuename = decamelize(self.valuetype.__name__) |
| 83 | + else: |
| 84 | + self.valuename = 'value' |
53 | 85 |
|
54 | 86 | Dict.__name__ = 'member.dict' |
0 commit comments