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
Exemple #2
0
    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)