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"
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()
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()
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
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"
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()