Skip to content

Commit 935ace6

Browse files
committed
Issue #22: DomainModel.get() method has been implemented.
1 parent 9020b8e commit 935ace6

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

domain_models/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,12 @@ def __data__(self):
183183
"""Read only dictionary of model fields/values."""
184184
return dict((field.name, field.get_value(self))
185185
for field in self.__class__.__fields__)
186+
187+
def get(self, field_name, default=None):
188+
"""DomainModel analogue for dict.get python built-in method.
189+
190+
:param string field_name:
191+
:param mixed default:
192+
"""
193+
value = getattr(self, field_name)
194+
return value if value else default

tests/test_models.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,29 @@ class Model2(models.DomainModel):
164164

165165
field = Model1.field
166166

167+
def test_get_method(self):
168+
class SomeModel(models.DomainModel):
169+
"""Test domain model."""
170+
id = fields.Int()
171+
name = fields.String()
172+
not_required = fields.String()
173+
174+
model = SomeModel()
175+
model.id = 2
176+
model.name = 'some-name'
177+
178+
id = model.get('id', 0)
179+
self.assertEqual(id, 2)
180+
181+
name = model.get('name', '')
182+
self.assertEqual(name, 'some-name')
183+
184+
not_required = model.get('not_required', '')
185+
self.assertEqual(not_required, '')
186+
187+
with self.assertRaises(AttributeError):
188+
model.get('unknown')
189+
167190

168191
class ModelReprTests(unittest.TestCase):
169192
"""Tests for model Pythonic representation."""

0 commit comments

Comments
 (0)