2809dbc52d607ea827911a66e83f7561296310f9
[redakcja.git] / apps / wiki / models.py
1 import vstorage
2 from vstorage import DocumentNotFound
3 from wiki import settings
4
5
6 class DocumentStorage(object):
7     def __init__(self, path):
8         self.vstorage = vstorage.VersionedStorage(path)
9     
10     def get(self, name, revision=None):
11         if revision is None:
12             text = self.vstorage.page_text(name)
13         else:
14             text = self.vstorage.revision_text(name, revision)
15         return Document(self, name=name, text=text)
16     
17     def put(self, document, author, comment, parent):
18         self.vstorage.save_text(document.name, document.text, author, comment, parent)
19
20     def delete(self, name, author, comment):
21         self.vstorage.delete_page(name, author, comment)
22
23     def all(self):
24         return list(self.vstorage.all_pages())
25
26     def _info(self, name):
27         return self.vstorage.page_meta(name)
28
29
30 class Document(object):
31     def __init__(self, storage, **kwargs):
32         self.storage = storage
33         for attr, value in kwargs.iteritems():
34             setattr(self, attr, value)
35             
36     def revision(self):
37         try:
38             return self.storage._info(self.name)[0]
39         except DocumentNotFound:
40             return -1
41
42
43 storage = DocumentStorage(settings.REPOSITORY_PATH)
44