~brechtm/zim/mac

« back to all changes in this revision

Viewing changes to zim/stores/base.py

  • Committer: Jaap Karssenberg
  • Date: 2008-09-17 21:41:24 UTC
  • Revision ID: pardus@mirage-20080917214124-91d26kqc9s3qwmuz
Added classes Notebook, Page and PageList
Formats can be loaded dynamically
zim-dump can now generate index trees.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
 
2
 
class Store:
3
 
 
4
 
        def get_namespace(self, name=None):
5
 
                namespace = Namespace(name, self)
6
 
                for page in self.list_pages(name):
7
 
                        namespace.append(page)
8
 
                return namespace
9
 
 
10
 
        def list_namespace(self, name=None):
11
 
                dir = self.resolve_dir(name)
12
 
                for items in dir:
13
 
                        # some checks on file type etc.
14
 
                        yield Page()
15
 
 
16
 
        def resolve_dir(self, name=None):
17
 
                if not name or len(name) == 0:
18
 
                        return self.dir
19
 
                else:
20
 
                        # TODO
21
 
 
22
 
        def get_page(self, name):
23
 
                pass
24
 
                
25
 
class Page():
26
 
 
27
 
        def __init__(self, name, store):
28
 
                #assert name is valid
29
 
                self.name = name
30
 
                self.store = store
31
 
                self.namespace = None
32
 
 
33
 
 
34
 
        def get_parse_tree(self):
35
 
                if self.format:
36
 
                        return self.tree
37
 
                else:
38
 
                        return self.format.Parser().parse_file(self.source)
39
 
 
40
 
        def set_parse_tree(self, tree):
41
 
                if self.format:
42
 
                        if self.source:
43
 
                                self.format.Dumper().dump_file(self.source, tree)
44
 
                        else:
45
 
                                self.content = self.format.Dumper().dump_string(tree)
46
 
                else:
47
 
                        self.tree = tree
48
 
 
49
 
        def set_content(self, string)
50
 
                # TODO
51
 
                pass
52
 
 
53
 
        def path(self):
54
 
                '''Generator function for parent names
55
 
                can be used for:
56
 
 
57
 
                        for namespace in page.path():
58
 
                                if namespace.page('foo').exists:
59
 
                                        # ...
 
2
class StoreClass():
 
3
 
 
4
        def __init__(self, **args):
 
5
                '''Constructor for stores.
 
6
                At least pass a store and a namespace.
60
7
                '''
61
 
                path = self.name.split(':')
62
 
                path.pop(-1)
63
 
                while len(path) > 0:
64
 
                        namespace = path.join(':')
65
 
                        yield Namespace(namespace, self.store)
66
 
 
67
 
class Namespace():
68
 
'''List with pages, page object can in turn have a namespace attribute for further recursion'''
69
 
 
70
 
        def __init__(self, name, store):
71
 
                #assert name is valid
72
 
                self.store = store
73
 
                self.name = name
74
 
 
75
 
        def __iter__(self):
76
 
                # or can we call list_page and yield directly from there ?
77
 
                for item in self.store.list_namespace(self.name):
78
 
                        yield item
79
 
 
80
 
        def page(self, name):
81
 
                #assert name
82
 
                return self.store.get_page(name)
 
8
                assert args.has_key('notebook')
 
9
                assert args.has_key('namespace')
 
10
                self.notebook = args['notebook']
 
11
                self.namespace = args['namespace']
 
12
 
 
13
        def relname(self, name):
 
14
                '''Remove our namespace from a page name'''
 
15
                if self.namespace == '' and name.startswith(':'):
 
16
                        i = 1
 
17
                else:
 
18
                        i = len(self.namespace)
 
19
                return name[i:]
 
20
 
 
21
 
83
22