Example #1
0
    def test_new(self):

        browser.open(
            "/en/cms/content/new/"
            "?item_type=woost.tests.test_selenium.test_edit.EditTestModel")
        admin_login()

        assert not browser.is_element_present(
            "css=.part_field .control .select")
        assert not browser.is_element_present("css=.part_field .control .edit")
        assert not browser.is_element_present(
            "css=.part_field .control .delete")
        assert not browser.is_element_present(
            "css=.part_field .control .unlink")

        browser.click("css=.part_field .control .new")
        browser.wait_for_page_to_load(10000)

        browser.type("edited_item_description", "Foo")
        browser.click("css=.save_action")
        browser.wait_for_page_to_load(10000)

        datastore.sync()
        part_id = int(browser.get_value("edited_item_part"))
        assert EditTestModel.require_instance(part_id).description == "Foo"
Example #2
0
    def submit(self):

        collection = self.collection
        selection = self.selection
        parent = self.item
        position = self.position
        related_end = self.member.related_end

        size = len(collection)

        if position < 0:
            position = size + position

        position = min(position, size)

        if any(parent.descends_from(item) for item in selection):
            raise TreeCycleError()

        for i in range(self.MAX_TRANSACTION_ATTEMPTS):
            with changeset_context(get_current_user()):
                for item in reversed(selection):

                    if isinstance(related_end, Reference) \
                    and item.get(related_end) is parent:
                        collection.remove(item)

                    collection.insert(position, item)            
            try:
                datastore.commit()
            except ConflictError:
                datastore.abort()
                datastore.sync()
            else:
                break
    def execute(self):
        @transaction
        def begin():
            self.export.state = "running"
            if self.reset:
                for task in self.export.tasks.itervalues():
                    task["state"] = "pending"

        with self.exporter:

            self.export_starting()

            try:
                for task in self.export.tasks.itervalues():

                    # Ignore completed / failed tasks
                    if task["state"] != "pending":
                        continue

                    # Give other scripts a chance to abort the export operation
                    datastore.sync()
                    if self.export.state != "running":
                        raise Halt()

                    self.execute_task(task)

                if self.dependencies:
                    self.export_dependencies()

            except Halt:
                pass
            except Exception as error:

                @transaction
                def complete():
                    self.export.state = "idle"

                self.export_failed(error=error)
                if self.errors == "raise":
                    raise
            else:

                @transaction
                def complete():
                    self.export.state = "completed"

                self.export_completed()
            finally:
                self.export_ended()
                self.exporter.close()
Example #4
0
    def handle_traversed(cls, event):

        datastore.sync()

        cms = event.source

        cms.context.update(cms=cms, publishable=None)

        # Determine the active website
        cms._establish_active_website()

        # Set the default language
        language = app.language.infer_language()
        set_language(language)

        # Invoke the authentication module
        app.authentication.process_request()
Example #5
0
    def test_delete(self):

        datastore.sync()
        container = EditTestModel()
        container.description = "test_edit container"

        part = EditTestModel()
        part.description = "test_edit part"
        container.part = part

        container.insert()
        datastore.commit()

        browser.open("/en/cms/content/%d/fields" % container.id)
        admin_login()

        assert not browser.is_element_present(
            "css=.part_field .control .select")
        assert not browser.is_element_present("css=.part_field .control .new")
        assert not browser.is_element_present(
            "css=.part_field .control .unlink")

        location = browser.get_location()
        browser.click("css=.part_field .control .delete")
        browser.wait_for_page_to_load(10000)
        assert browser.get_location() == location
        assert not browser.get_value("edited_item_part")

        datastore.sync()
        assert EditTestModel.get_instance(part.id) is part

        browser.click("css=.save_action")
        browser.wait_for_page_to_load(10000)
        datastore.sync()
        assert EditTestModel.get_instance(part.id) is None
Example #6
0
    def test_edit(self):

        datastore.sync()
        container = EditTestModel()
        container.description = "test_edit container"

        part = EditTestModel()
        part.description = "test_edit part"
        container.part = part

        container.insert()
        datastore.commit()

        browser.open("/en/cms/content/%d/fields" % container.id)
        admin_login()

        assert not browser.is_element_present(
            "css=.part_field .control .select")
        assert not browser.is_element_present("css=.part_field .control .new")
        assert not browser.is_element_present(
            "css=.part_field .control .unlink")
        assert browser.get_value("edited_item_part") == str(part.id)

        browser.click("css=.part_field .control .edit")
        browser.wait_for_page_to_load(10000)

        browser.type("edited_item_description", "modified test_edit part")
        browser.click("css=.save_action")
        browser.wait_for_page_to_load(10000)

        browser.click("css=.cancel_action")
        browser.wait_for_page_to_load(10000)

        datastore.sync()
        assert browser.get_value("edited_item_part") == str(part.id)
        assert part.description == "modified test_edit part"
Example #7
0
    def save_item(self):

        for i in range(self.MAX_TRANSACTION_ATTEMPTS):
            user = get_current_user()
            stack_node = self.stack_node
            item = stack_node.item
            is_new = not item.is_inserted
            changeset = None

            with restricted_modification_context(
                item, 
                user, 
                member_subset = set(stack_node.form_schema.members())
            ):
                with changeset_context(author = user) as changeset:
                    self._apply_changes(item)
            try:
                datastore.commit()
            except ConflictError:
                datastore.abort()
                datastore.sync()
            else:
                break

        change = changeset.changes.get(item.id) if changeset else None

        # Edit stack event
        stack_node.committed(
            user = user,
            changeset = changeset
        )

        # Application-wide event
        if change is not None:
            self.context["cms"].item_saved(
                item = item,
                user = user,
                is_new = is_new,
                change = change
            )

        # User notification
        stack_node.item_saved_notification(is_new, change)

        # A new item was created
        if is_new:

            # The edit operation was the root of the edit stack; redirect the
            # browser to the new item
            if len(self.edit_stack) == 1:
                if self.edit_stack.root_url:
                    self.edit_stack.go_back()
                else:
                    raise cherrypy.HTTPRedirect(
                        self.edit_uri(item)
                    )

            # The edit operation was nested; relate the created item to its
            # owner, and redirect the browser to the owner
            elif isinstance(stack_node.parent_node, RelationNode):
                member = stack_node.parent_node.member
                parent_edit_node = stack_node.get_ancestor_node(EditNode)
                parent_edit_node.relate(member, item)
                self.edit_stack.go(-3)

        if stack_node.parent_node is None and self.edit_stack.root_url:
            self.edit_stack.go_back()