def move(self): response = copy.deepcopy(self._response) try: # The ID of the node which want be moved. node_id = self.request.params.get("moved_node_id") if not node_id is None: node_id = int(node_id) # The ID of the new parent node. parent_id = self.request.params.get("new_parent_id") if not parent_id is None: parent_id = int(parent_id) # The ID of the previous node of 'node_id' in the new position. previous_node_id = self.request.params.get("previous_node_id") if previous_node_id == "": previous_node_id = None elif not previous_node_id is None: previous_node_id = int(previous_node_id) # The ID of the next node of 'node_id' in the new position. next_node_id = self.request.params.get("next_node_id") if next_node_id == "": next_node_id = None elif not next_node_id is None: next_node_id = int(next_node_id) Node.move(self.session, node_id, parent_id, previous_node_id, next_node_id) except (TypeError, NoResultFound, ConstraintError) as e: log.exception("Bad request params.") self.session.rollback() self.request.response.status = 400 response["errors"] = {} response["success"] = False response["errors"]["400"] = str(e) except Exception as e: log.exception("Unknown Error.") self.session.rollback() self.request.response.status = 500 response["errors"] = {} response["success"] = False response["errors"]["500"] = str(e) else: self.session.commit() self.request.response.status = 200 response["errors"] = {} response["dataset"] = [] response["dataset_len"] = 1 response["success"] = True return response
def test_move_end(self): menu = Menu(id=1, parent=None, weight=0) self.session.add(menu) page = Page(id=2, parent=menu, weight=1) self.session.add(page) section = Section(id=3, parent=menu, weight=2) self.session.add(section) page2 = Page(id=4, parent=section, weight=3) self.session.add(page2) external_link = ExternalLink(id=5, parent=menu, weight=4) self.session.add(external_link) internal_link = InternalLink(id=6, parent=menu, weight=5) self.session.add(internal_link) self.session.flush() # Test move node at the end of branch. weight = page2.weight + 1 Node.move(self.session, id_=5, parent_id=3, previous_node_id=4, next_node_id=None) self.session.flush() self.assertEqual(weight, external_link.weight) # Test move node at the beginning of branch weight = page2.weight Node.move(self.session, id_=6, parent_id=3, previous_node_id=None, next_node_id=4) self.session.flush() self.assertEqual(weight, internal_link.weight) # Test move node in the middle of branch weight = section.weight Node.move(self.session, id_=6, parent_id=1, previous_node_id=2, next_node_id=3) self.session.flush() self.assertEqual(weight, internal_link.weight)