def test_safe_deepcopy_with_nonexisting_path(self): problem_object = uncopyable() data = dict(_volatile=['bar', 'unsafe'], foo=42, unsafe=problem_object) # bar does not exist in the original, but that should not cause errors copy = util.safe_deepcopy(data, object_describer=id) expected_copy = dict(_volatile=['bar', 'unsafe'], foo=42, unsafe=id(problem_object)) self.assertEquals(copy, expected_copy)
def process(self, baton): if self.deepcopy: copy_of_baton = util.safe_deepcopy(baton) else: copy_of_baton = baton if self.describer: self.list.append(self.describer(copy_of_baton)) else: self.list.append(copy_of_baton) return baton
def test_safe_deepcopy(self): problem_object = uncopyable() d = dict(foo='bar', nested=dict(unsafe=problem_object), _volatile=['nested.unsafe']) d2 = util.safe_deepcopy(d) expected_copy = dict(foo='bar', nested=dict(unsafe=repr(problem_object)), _volatile=['nested.unsafe']) self.assertEquals(d2, expected_copy) self.assertEquals(d, dict(foo='bar', nested=dict(unsafe=problem_object), _volatile=['nested.unsafe'])) # Ensure that the original object is not mangled: d = dict(foo='bar', nested=dict(unsafe=problem_object)) self.assertRaises(copy.Error, util.safe_deepcopy, d) self.assertEquals(d, dict(foo='bar', nested=dict(unsafe=problem_object))) # Test custom object describer d = dict(foo='bar', nested=dict(unsafe=problem_object), _volatile=['nested.unsafe']) d2 = util.safe_deepcopy(d, object_describer=id) expected_copy = dict(foo='bar', nested=dict(unsafe=id(problem_object)), _volatile=['nested.unsafe']) self.assertEquals(d2, expected_copy)
def test_safe_deepcopy_on_primitives(self): self.assertEquals(util.safe_deepcopy('foo'), 'foo') self.assertEquals(util.safe_deepcopy(42), 42) self.assertEquals(util.safe_deepcopy([1,2]), [1,2])