diff --git a/src/mog_commons/__init__.py b/src/mog_commons/__init__.py index b794fd4..df9144c 100644 --- a/src/mog_commons/__init__.py +++ b/src/mog_commons/__init__.py @@ -1 +1 @@ -__version__ = '0.1.0' +__version__ = '0.1.1' diff --git a/src/mog_commons/case_class.py b/src/mog_commons/case_class.py index 811af7d..d4806a1 100644 --- a/src/mog_commons/case_class.py +++ b/src/mog_commons/case_class.py @@ -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 } diff --git a/tests/mog_commons/test_case_class.py b/tests/mog_commons/test_case_class.py index af73682..5bae431 100644 --- a/tests/mog_commons/test_case_class.py +++ b/tests/mog_commons/test_case_class.py @@ -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})