Skip to content

Commit 517bfc3

Browse files
authored
Merge pull request #50 from pskd73/fix/Fixing_list_field_validate_dict_assertion
Fix list field validate dict assertion
2 parents 39b4b00 + 4b20a3a commit 517bfc3

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

pydictable/field.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,15 @@ def to_dict(self, v, skip_optional: bool = False):
120120
return [self.obj_type.to_dict(e, skip_optional) for e in v]
121121

122122
def validate_dict(self, field_name: str, v):
123-
assert type(v) == list
123+
assert isinstance(v, list)
124124
for i, _val in enumerate(v):
125125
try:
126126
self.obj_type.validate_dict(field_name, _val)
127127
except AssertionError as e:
128128
raise DataValidationError(f'[{i}]', str(e))
129129

130130
def validate(self, field_name: str, v):
131-
assert type(v) == list
131+
assert isinstance(v, list)
132132
[self.obj_type.validate(field_name, x) for x in v]
133133

134134
def of(self):

pydictable/test_field.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from unittest import TestCase
2-
3-
from pydictable import DictField, StrField, DataValidationError, DictAble, ObjectField, UnionField
2+
from pydictable import DictField, StrField, DataValidationError, DictAble, ObjectField, UnionField, ListField
43

54

65
class TestField(TestCase):
@@ -59,3 +58,28 @@ class Rule(DictAble):
5958

6059
r = Rule(dict={'expression': {'expression': 'nested'}})
6160
self.assertEqual(r.expression.expression, 'nested')
61+
62+
def test_list_field(self):
63+
class MyList(list):
64+
pass
65+
66+
class MyListField(ListField):
67+
def validate_dict(self, field_name: str, v):
68+
super(MyListField, self).validate_dict(field_name, v)
69+
assert type(v) == list
70+
71+
def validate(self, field_name: str, v):
72+
super(MyListField, self).validate(field_name, v)
73+
assert type(v) == list
74+
75+
my_list = MyList(['A', 'B'])
76+
77+
field = MyListField(StrField())
78+
self.assertRaises(AssertionError, lambda: field.validate_dict('x', my_list))
79+
self.assertRaises(AssertionError, lambda: field.validate('x', my_list))
80+
81+
field = ListField(StrField())
82+
field.validate_dict('x', my_list)
83+
field.validate('x', my_list)
84+
field.validate_dict('x', list(['A', 'B']))
85+
field.validate('x', list(['A', 'B']))

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setuptools.setup(
44
name='pydictable',
5-
version='2.2.0',
5+
version='2.3.0',
66
author='Pramod Kumar',
77
author_email='pramodkumar.damam73@gmail.com',
88
description='Make your classes from/to dict',

0 commit comments

Comments
 (0)