Skip to content

Commit

Permalink
support all kinds of weird arguments to __init__
Browse files Browse the repository at this point in the history
  • Loading branch information
hannosch committed May 4, 2013
1 parent 59f86f5 commit 511c336
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/Record/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,20 @@ def __init__(self, data=None):
if cls_schema is None:
cls_schema = {}
self._schema = schema = cls_schema
len_schema = len(schema)
if data is not None:
self._data = data
if isinstance(data, dict):
self._data = (None, ) * len_schema
for k, v in data.items():
if k in schema:
self[k] = v
elif len(data) == len_schema:
self._data = tuple(data)
else:
self._data = (None, ) * len_schema
maxlength = min(len(data), len_schema)
for i in xrange(maxlength):
self[i] = data[i]
else:
self._data = (None, ) * len(schema)

Expand Down
16 changes: 16 additions & 0 deletions src/Record/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,22 @@ class R(Record):

class RecordTest(unittest.TestCase):

def test_init(self):
r = R()
self.assertEqual(tuple(r), (None, None, None))
r = R((1, 2, 3))
self.assertEqual(tuple(r), (1, 2, 3))
r = R([1, 2, 3])
self.assertEqual(tuple(r), (1, 2, 3))
r = R({})
self.assertEqual(tuple(r), (None, None, None))
r = R({'a': 1, 'c': 3, 'd': 4})
self.assertEqual(tuple(r), (1, None, 3))
r = R((1, 2))
self.assertEqual(tuple(r), (1, 2, None))
r = R((1, 2, 3, 4))
self.assertEqual(tuple(r), (1, 2, 3))

def test_pickling(self):
# We can create records from sequences
r = R(('x', 42, 1.23))
Expand Down

0 comments on commit 511c336

Please sign in to comment.