Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/mog_commons/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.1.0'
__version__ = '0.1.1'
12 changes: 12 additions & 0 deletions src/mog_commons/case_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,18 @@ def __eq__(self, other):
def __repr__(self):
return '%s(%s)' % (self.__class__.__name__, ', '.join('%s=%r' % (k, getattr(self, k)) for k in self._keys))

def copy(self, **kwargs):
"""
:param kwargs:
:return: copy of this object modifying the kwargs
"""
for k in kwargs:
assert k in self._keys, 'Invalid key: %s' % k

d = self.values()
d.update(kwargs)
return self.__class__(**d)

def values(self):
"""
:return: key-value dict : { string: any }
Expand Down
14 changes: 11 additions & 3 deletions tests/mog_commons/test_case_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,16 @@ class AAA:
self.assertRaisesRegexp(TypeError, '^unorderable types: Coord\(\) < ', lambda: Coord(123, 45) < 'x')
self.assertRaisesRegexp(TypeError, '^unorderable types: Coord\(\) < AAA\(\)$', lambda: Coord(123, 45) < AAA())

def test_values(self):
self.assertEqual(Coord(123, 45).values(), {'x': 123, 'y': 45})

def test_repr(self):
self.assertEqual(repr(Coord(123, 45)), 'Coord(x=123, y=45)')

def test_copy(self):
a = Coord(123, 45)
b = a.copy(y=67)
self.assertEqual(b, Coord(123, 67))

def test_copy_error(self):
self.assertRaisesRegexp(AssertionError, 'Invalid key: z', Coord(123, 45).copy, x=999, z=999)

def test_values(self):
self.assertEqual(Coord(123, 45).values(), {'x': 123, 'y': 45})