コード例 #1
0
	def runTest(self):
		from zim.newfs import Folder
		folder = self.setUpFolder()
		layout = FilesLayout(folder)
		afolder = layout.get_attachments_folder(Path('Test'))
		self.assertIsInstance(afolder, Folder)
		self.assertIsInstance(afolder, folder.__class__)  # Either LocalFolder or MockFolder
コード例 #2
0
    def setUpNotebook(self,
                      name='notebook',
                      mock=MOCK_ALWAYS_MOCK,
                      content={},
                      folder=None):
        '''
		@param name: name postfix for the folder, see L{setUpFolder}
		@param mock: see L{setUpFolder}, default is C{MOCK_ALWAYS_MOCK}
		@param content: dictionary where the keys are page names and the
		values the page content. If a tuple or list is given, pages are created
		with default text. L{Path} objects are allowed instead of page names
		@param folder: determine the folder to be used, only needed in special
		cases where the folder must be outside of the project folder, like
		when testing version control logic
		'''
        import datetime
        from zim.newfs.mock import MockFolder
        from zim.notebook.notebook import NotebookConfig, Notebook
        from zim.notebook.page import Path
        from zim.notebook.layout import FilesLayout
        from zim.notebook.index import Index
        from zim.formats.wiki import WIKI_FORMAT_VERSION

        if folder is None:
            folder = self.setUpFolder(name, mock)
        folder.touch()  # Must exist for sane notebook
        cache_dir = folder.folder('.zim')
        layout = FilesLayout(folder, endofline='unix')

        if isinstance(folder, MockFolder):
            conffile = folder.file('notebook.zim')
            config = NotebookConfig(conffile)
            index = Index(':memory:', layout)
        else:
            conffile = folder.file('notebook.zim')
            config = NotebookConfig(conffile)
            cache_dir.touch()
            index = Index(cache_dir.file('index.db').path, layout)

        if isinstance(content, (list, tuple)):
            content = dict((p, 'test 123') for p in content)

        notebook = Notebook(cache_dir, config, folder, layout, index)
        for name, text in list(content.items()):
            path = Path(name) if isinstance(name, str) else name
            file, folder = layout.map_page(path)
            file.write(
                ('Content-Type: text/x-zim-wiki\n'
                 'Wiki-Format: %s\n'
                 'Creation-Date: %s\n\n') %
                (WIKI_FORMAT_VERSION, datetime.datetime.now().isoformat()) +
                text)

        notebook.index.check_and_update()
        assert notebook.index.is_uptodate
        return notebook
コード例 #3
0
ファイル: __init__.py プロジェクト: xbynet/zim-desktop-wiki
    def setUpNotebook(cls, name=None, mock=MOCK_ALWAYS_MOCK, content={}):
        '''
		@param name: basename for the folder, use class name if C{None}
		@param mock: see L{setUpFolder}, default is C{MOCK_ALWAYS_MOCK}
		@param content: dictionary where the keys are page names and the
		values the page content.
		'''
        import datetime
        from zim.newfs.mock import MockFolder
        from zim.config import VirtualConfigBackend
        from zim.notebook.notebook import NotebookConfig, Notebook
        from zim.notebook.page import Path
        from zim.notebook.layout import FilesLayout
        from zim.notebook.index import Index
        from zim.formats.wiki import WIKI_FORMAT_VERSION

        folder = cls.setUpFolder(name, mock)
        cache_dir = folder.folder('.zim')
        layout = FilesLayout(folder, endofline='unix')

        if isinstance(folder, MockFolder):
            ### XXX - Big HACK here - Get better classes for this - XXX ###
            dir = VirtualConfigBackend()
            file = dir.file('notebook.zim')
            file.dir = dir
            file.dir.basename = folder.basename
            ###
            config = NotebookConfig(file)
            index = Index(':memory:', layout)
        else:
            from zim.fs import Dir
            conffile = Dir(folder.path).file('notebook.zim')
            config = NotebookConfig(conffile)
            cache_dir.touch()
            index = Index(cache_dir.file('index.db').path, layout)

        notebook = Notebook(None, cache_dir, config, folder, layout, index)
        for name, text in content.items():
            file, folder = layout.map_page(Path(name))
            file.write(
                ('Content-Type: text/x-zim-wiki\n'
                 'Wiki-Format: %s\n'
                 'Creation-Date: %s\n\n') %
                (WIKI_FORMAT_VERSION, datetime.datetime.now().isoformat()) +
                text + '\n')

        notebook.index.check_and_update()
        return notebook
コード例 #4
0
ファイル: indexers.py プロジェクト: thorhans/zimt
    def runTest(self):
        folder = self.setUpFolder()
        layout = FilesLayout(folder)
        db = sqlite3.connect(':memory:')
        db.row_factory = sqlite3.Row

        file_indexer = tests.MockObject()

        indexer = PagesIndexer(db, layout, file_indexer)

        id1 = indexer.insert_page(Path('Test'), None)
        with tests.LoggingFilter('zim.notebook.index',
                                 'Error while inserting page'):
            id2 = indexer.insert_page(Path('Test'), None)

        self.assertEqual(id1, id2)
コード例 #5
0
ファイル: notebook.py プロジェクト: timckuhn/zim-desktop-wiki
    def setUp(self):
        folder = self.setUpFolder(mock=tests.MOCK_ALWAYS_MOCK)
        layout = FilesLayout(folder, endofline='unix')
        index = Index(':memory:', layout)

        ### XXX - Big HACK here - Get better classes for this - XXX ###
        dir = VirtualConfigBackend()
        file = dir.file('notebook.zim')
        file.dir = dir
        file.dir.basename = 'Unnamed Notebook'
        ###
        config = NotebookConfig(file)

        dir = None
        cache_dir = None
        self.notebook = Notebook(dir, cache_dir, config, folder, layout, index)
        index.check_and_update()
コード例 #6
0
def buildUpdateIter(folder):
    db = sqlite3.connect(':memory:')
    db.row_factory = sqlite3.Row
    layout = FilesLayout(folder)
    return IndexUpdateIter(db, layout)
コード例 #7
0
    def runTest(self):
        # Test in 4 parts:
        #   1. insert files
        #   2. update files
        #   3. add some placeholders
        #   4. delete files

        self.root = self.setUpFolder()
        layout = FilesLayout(self.root)
        db = sqlite3.connect(':memory:')
        db.row_factory = sqlite3.Row

        file_indexer = tests.MockObject()

        indexer = PagesIndexer(db, layout, file_indexer)

        def cb_filter_func(name, o, a):
            if name == 'page-changed':
                row, content = a
            elif name == 'page-row-changed':
                row, oldrow = a
            else:
                row, = a

            self.assertIsInstance(row, sqlite3.Row)
            return row['name']

        signals = tests.SignalLogger(indexer, cb_filter_func)

        # 1. insert files
        for i, path in enumerate(self.FILES):
            file = self.root.file(path)
            file.write('test 123')
            row = {'id': i, 'path': path}
            indexer.on_file_row_inserted(file_indexer, row)
            self.assertPagesDBConsistent(db)

        self.assertPagesDBEquals(db, self.PAGES)
        self.assertEqual(set(signals['page-row-inserted']), set(self.PAGES))
        self.assertEqual(set(signals['page-row-changed']),
                         set(self.NAMESPACES))
        self.assertEqual(signals['page-row-deleted'], [])
        self.assertEqual(signals['page-changed'], [])

        # 2. update files
        signals.clear()
        for i, path in enumerate(self.FILES):
            row = {'id': i, 'path': path}
            indexer.on_file_row_changed(file_indexer, row)
            self.assertPagesDBConsistent(db)

        self.assertPagesDBEquals(db, self.PAGES)
        self.assertEqual(signals['page-row-inserted'], [])
        self.assertEqual(set(signals['page-row-changed']), set(self.CONTENT))
        self.assertEqual(signals['page-row-deleted'], [])
        self.assertEqual(set(signals['page-changed']), set(self.CONTENT))

        # 3. add some placeholders
        for pagename in self.PLACEHOLDERS:
            indexer.insert_link_placeholder(Path(pagename))
            self.assertPagesDBConsistent(db)

        self.assertPagesDBEquals(db, self.PAGES + self.PLACEHOLDERS_ALL)

        for pagename in self.PLACEHOLDERS:
            indexer.delete_link_placeholder(Path(pagename))
            self.assertPagesDBConsistent(db)

        self.assertPagesDBEquals(db, self.PAGES)

        # 4. delete files
        signals.clear()
        for i, path in enumerate(self.FILES):
            file = self.root.file(path)
            file.remove()
            row = {'id': i, 'path': path}
            indexer.on_file_row_deleted(file_indexer, row)
            self.assertPagesDBConsistent(db)

        self.assertPagesDBEquals(db, [])
        self.assertEqual(signals['page-row-inserted'], [])
        self.assertEqual(set(signals['page-row-changed']), set(['foo']))
        # "foo" has source that is deleted before children
        self.assertEqual(set(signals['page-row-deleted']), set(self.PAGES))
        self.assertEqual(signals['page-changed'], ['foo'])
コード例 #8
0
ファイル: __init__.py プロジェクト: xbynet/zim-desktop-wiki
def new_notebook(fakedir=None):
    '''Returns a new Notebook object with all data in memory

	Uses data from L{WikiTestData}

	@param fakedir: optional parameter to set the 'dir' attribute for
	the notebook which allows you to resolve file
	paths etc. It will not automatically touch the dir
	(hence it being 'fake').
	'''
    import sqlite3

    from zim.fs import Dir
    from zim.config import VirtualConfigBackend
    from zim.notebook import Notebook, Path
    from zim.notebook.notebook import NotebookConfig
    from zim.notebook.index import Index

    from zim.notebook.layout import FilesLayout
    from zim.newfs.mock import MockFolder, clone_mock_object, os_native_path

    global _notebook_data
    if not _notebook_data:  # run this one time only
        templfolder = MockFolder('/mock/notebook')
        layout = FilesLayout(templfolder, endofline='unix')

        manifest = []
        for name, text in WikiTestData:
            manifest.append(name)
            file, x = layout.map_page(Path(name))
            file.write(text)

        manifest = frozenset(_expand_manifest(manifest))

        index = Index(':memory:', layout)
        index.check_and_update()
        lines = list(index._db.iterdump())
        sql = '\n'.join(lines)

        _notebook_data = (templfolder, sql, manifest)

    if fakedir:
        fakedir = fakedir if isinstance(fakedir, basestring) else fakedir.path
        fakedir = os_native_path(fakedir)
    templfolder, sql, manifest = _notebook_data
    folder = MockFolder(fakedir or templfolder.path)
    clone_mock_object(templfolder, folder)

    #~ print ">>>>>>>>>>>>>"
    #~ for path in folder._fs.tree():
    #~ print path

    layout = FilesLayout(folder, endofline='unix')
    index = Index(':memory:', layout)
    tables = [
        r[0] for r in index._db.execute(
            'SELECT name FROM sqlite_master '
            'WHERE type="table" and name NOT LIKE "sqlite%"')
    ]
    for table in tables:
        index._db.execute('DROP TABLE %s' % table)
    index._db.executescript(sql)
    index._db.commit()

    ### XXX - Big HACK here - Get better classes for this - XXX ###
    dir = VirtualConfigBackend()
    file = dir.file('notebook.zim')
    file.dir = dir
    file.dir.basename = 'Unnamed Notebook'
    ###
    config = NotebookConfig(file)

    notebook = Notebook(None, None, config, folder, layout, index)
    if fakedir:
        notebook.dir = Dir(fakedir)

    notebook.testdata_manifest = manifest
    return notebook
コード例 #9
0
ファイル: indexers.py プロジェクト: thorhans/zimt
 def setUp(self):
     self.folder = self.setUpFolder(mock=tests.MOCK_ALWAYS_REAL)
     self.folder.touch()  # Must exist for sane notebook
     self.layout = FilesLayout(self.folder)