def _do_set_or_frozenset_item(self, items, func): for path, value in items.items(): elements = _path_to_elements(path) parent = _get_nested_obj(obj=self, elements=elements[:-1]) elem, action = elements[-1] obj = self._get_elem_and_compare_to_old_value( parent, path_for_err_reporting=path, expected_old_value=None, elem=elem, action=action) new_value = getattr(obj, func)(value) self._simple_set_elem_value(parent, path_for_err_reporting=path, elem=elem, value=new_value, action=action)
def _get_elements_and_details(self, path): try: elements = _path_to_elements(path) if len(elements) > 1: parent = _get_nested_obj(obj=self, elements=elements[:-2]) parent_to_obj_elem, parent_to_obj_action = elements[-2] obj = self._get_elem_and_compare_to_old_value( obj=parent, path_for_err_reporting=path, expected_old_value=None, elem=parent_to_obj_elem, action=parent_to_obj_action) else: parent = parent_to_obj_elem = parent_to_obj_action = None obj = _get_nested_obj(obj=self, elements=elements[:-1]) elem, action = elements[-1] except Exception as e: self._raise_or_log(UNABLE_TO_GET_ITEM_MSG.format(path, e)) return None else: if obj is not_found: return None return elements, parent, parent_to_obj_elem, parent_to_obj_action, obj, elem, action
def test_path_to_elements(path, expected): result = _path_to_elements(path, root_element=None) assert tuple(expected) == result