Skip to content

Commit db9a3e9

Browse files
added itemtype, keytype and valuetype properties for modeled.dict class and instances and made some fixes
1 parent 0196baf commit db9a3e9

1 file changed

Lines changed: 31 additions & 13 deletions

File tree

modeled/dict.py

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,30 @@
2727

2828
from moretools import cached
2929

30-
from modeled.tuple import tuple as mtuple
30+
import modeled
3131
from . import typed
3232

3333

3434
class Type(typed.base.type):
3535
__module__ = 'modeled'
3636

3737
@cached
38-
def __getitem__(cls, mtypes):
39-
return typed.base.type.__getitem__(cls, mtuple[mtypes])
38+
def __getitem__(cls, types):
39+
keytype, valuetype = types
40+
return typed.base.type.__getitem__(
41+
cls, modeled.tuple[keytype, valuetype])
42+
43+
@property
44+
def itemtype(cls):
45+
return cls.mtype
46+
47+
@property
48+
def keytype(cls):
49+
return cls.mtype.mtypes[0]
50+
51+
@property
52+
def valuetype(cls):
53+
return cls.mtype.mtypes[1]
4054

4155
Type.__name__ = 'dict.type'
4256

@@ -45,11 +59,15 @@ class dict(with_metaclass(Type, typed.base, builtins.dict)):
4559
__module__ = 'modeled'
4660

4761
@property
48-
def mkeytype(self):
62+
def itemtype(self):
63+
return self.mtype
64+
65+
@property
66+
def keytype(self):
4967
return self.mtype.mtypes[0]
5068

5169
@property
52-
def mvaluetype(self):
70+
def valuetype(self):
5371
return self.mtype.mtypes[1]
5472

5573
def __init__(self, iterable=()):
@@ -66,19 +84,19 @@ def __init__(self, iterable=()):
6684
self.update(items)
6785

6886
def __setitem__(self, key, value):
69-
if not isinstance(key, self.mkeytype):
70-
key = self.mkeytype(key)
71-
if not isinstance(value, self.mvaluetype):
72-
value = self.mvaluetype(value)
87+
if not isinstance(key, self.keytype):
88+
key = self.keytype(key)
89+
if not isinstance(value, self.valuetype):
90+
value = self.valuetype(value)
7391
builtins.dict.__setitem__(self, key, value)
7492

7593
def update(self, iterable):
7694
def items():
7795
for key, value in iterable:
78-
if isinstance(key, self.mkeytype):
79-
key = self.mkeytype(key)
80-
if isinstance(value, self.mvaluetype):
81-
value = self.mvaluetype(value)
96+
if isinstance(key, self.keytype):
97+
key = self.keytype(key)
98+
if isinstance(value, self.valuetype):
99+
value = self.valuetype(value)
82100
yield (key, value)
83101

84102
builtins.dict.update(self, items())

0 commit comments

Comments
 (0)