Skip to content

Commit c18f38a

Browse files
improved modeled.member.dict with itemtype, keytype and valuetype properties and keyname and itemname options
1 parent f3967cc commit c18f38a

1 file changed

Lines changed: 40 additions & 8 deletions

File tree

modeled/member/dict.py

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

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

26-
from modeled.dict import dict as mdict
26+
import modeled
2727
from . import member
2828

2929

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

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

39+
@property
40+
def keytype(cls):
41+
return cls.mtype.mtype.mtypes[0]
3742

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)):
3951
__module__ = 'modeled'
4052

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+
4165
def __init__(self, items=None, **options):
4266
try:
43-
assert(issubclass(self.mtype, mdict))
67+
assert(issubclass(self.mtype, modeled.dict))
4468
except AttributeError:
45-
items = mdict(items)
69+
items = modeled.dict(items)
4670
self.__class__ = type(self)[items.mtype.mtypes]
4771
member.__init__(self, items, **options)
4872
else:
4973
if items is None:
5074
member.__init__(self, **options)
5175
else:
5276
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'
5385

5486
Dict.__name__ = 'member.dict'

0 commit comments

Comments
 (0)