Пример #1
0
def write_notebook(dir, pages):
    init_notebook(dir)
    notebook = Notebook.new_from_dir(dir)

    for path, content in pages:
        p = notebook.get_page(path)
        p.parse('wiki', content)
        notebook.store_page(p)
        print "Wrote", p.source.path
Пример #2
0
    def runTest(self):
        dir = Dir(self.create_tmp_dir())
        notebook = Notebook.new_from_dir(dir)
        page = notebook.get_page(Path('SomePage'))

        orig_store_page_1 = notebook.store_page
        orig_store_page_2 = notebook.store_page_async
        store_page_counter = tests.Counter()

        def wrapper1(page):
            store_page_counter()
            orig_store_page_1(page)

        def wrapper2(page, tree):
            store_page_counter()
            return orig_store_page_2(page, tree)

        notebook.store_page = wrapper1
        notebook.store_page_async = wrapper2

        pageview = tests.MockObject()
        pageview.readonly = False

        handler = SavePageHandler(pageview, notebook, lambda: page)

        # Normal operation
        self.assertFalse(page.modified)
        handler.try_save_page()
        self.assertEqual(store_page_counter.count, 0)

        self.assertFalse(page.modified)
        handler.save_page_now()
        self.assertEqual(store_page_counter.count, 1)

        page.modified = True
        handler.try_save_page()
        self.assertEqual(store_page_counter.count, 2)
        ongoing_operation(notebook)()  # effectively a join
        self.assertFalse(page.modified)

        page.modified = True
        handler.save_page_now()
        self.assertEqual(store_page_counter.count, 3)
        self.assertFalse(page.modified)

        # With errors
        def wrapper3(page):
            raise AssertionError

        def wrapper4(page, tree):
            def error_cb():
                raise AssertionError

            return orig_store_page_2(page, error_cb)

        notebook.store_page = wrapper3
        notebook.store_page_async = wrapper4

        page.modified = True

        def catch_dialog(dialog):
            assert isinstance(dialog, SavePageErrorDialog)

        with tests.LoggingFilter('zim'):
            with tests.DialogContext(catch_dialog):
                handler.save_page_now()
        self.assertTrue(page.modified)

        # For autosave first error is ignore, 2nd results in dialog
        self.assertFalse(handler._error_event
                         and handler._error_event.is_set())
        with tests.LoggingFilter('zim'):
            handler.try_save_page()
            ongoing_operation(notebook)()  # effectively a join
        self.assertTrue(handler._error_event and handler._error_event.is_set())

        with tests.LoggingFilter('zim'):
            with tests.DialogContext(catch_dialog):
                handler.try_save_page()
        self.assertTrue(page.modified)