Skip to content

Commit 26c86cc

Browse files
authored
Merge pull request #14 from alexei/feature/dict_to_dict
Support dict to dict adapters
2 parents 903153b + 8360204 commit 26c86cc

3 files changed

Lines changed: 25 additions & 2 deletions

File tree

adapter/adapter.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,8 @@ def adapt(self, data=None):
152152
for field_name, field in self.fields.iteritems():
153153
value = field.get_attribute(data or self.data)
154154
adapted_value = field.adapt(value)
155-
setattr(obj, field_name, adapted_value)
155+
if isinstance(obj, collections.Mapping):
156+
obj[field_name] = adapted_value
157+
else:
158+
setattr(obj, field_name, adapted_value)
156159
return obj

tests/adapters.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,11 @@ class Meta(object):
2929
model = outputs.Customer
3030

3131
address = AddressAdapter(source='*')
32+
33+
34+
class PersonDictAdapter(adapter.Adapter):
35+
class Meta(object):
36+
model = dict
37+
38+
first_name = adapter.Field(source='first')
39+
last_name = adapter.Field(source='last')

tests/test_adapter.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212

1313
class AdapterTest(unittest.TestCase):
14-
def test_object(self):
14+
def test_object_to_object(self):
1515
data = inputs.Customer(**{
1616
'first_name': 'Betty',
1717
'last_name': 'Gowin',
@@ -44,3 +44,15 @@ def test_object(self):
4444
self.assertEqual(actual.address.city, expected.address.city)
4545
self.assertEqual(actual.address.region, expected.address.region)
4646
self.assertEqual(actual.address.country, expected.address.country)
47+
48+
def test_dict_to_dict(self):
49+
data = {
50+
'first': 'Jacquelyn',
51+
'last': 'Phillips',
52+
}
53+
actual = adapters.PersonDictAdapter().adapt(data)
54+
expected = {
55+
'first_name': 'Jacquelyn',
56+
'last_name': 'Phillips',
57+
}
58+
self.assertDictEqual(actual, expected)

0 commit comments

Comments
 (0)