Example #1
0
class WriterWiki(object):
    
    def __init__(self, repo_path):
        self.dao = DAO(repo_path)
    
    def get_page(self, name):
        page = self.dao.get_page(name)
        if page is None:
            page = Page(name, StringIO.StringIO(""))
        return page
        
    def update_page(self, page):
        self.dao.store_page_update(page)
        
    def snapshot(self):
        self.dao.add_all_commit()
        
    def get_template_names(self):
        return self.dao.get_template_names()
        
    def get_template(self, name):
        return self.dao.get_template(name)
        
    def get_recently_modified_pages(self):
        return self.dao.get_recently_modified_pages()
        
    def get_all_pages(self):
        return self.dao.get_all_pages()
    
    # manage the working set
    ###################################################################
    
    def get_workingset(self):
        return self.dao.get_workingset()
        
    def add_to_workingset(self, page):
        if not self.dao.page_exists(page):
            return
        ws = self.dao.get_workingset()
        if page not in ws:
            ws.append(page)
        self.dao.update_workingset(ws)
        
    def remove_from_workingset(self, page):
        ws = self.dao.get_workingset()
        if page in ws:
            ws.remove(page)
        self.dao.update_workingset(ws)
        
    # manage the tags
    ###################################################################
    
    def get_tags(self, page):
        if not self.dao.page_exists(page):
            return {}
        tags = self.dao.get_tags(page)
        if tags is None:
            return {}
        return tags
        
    def set_tags(self, page, tags):
        if not self.dao.page_exists(page):
            return
        self.dao.set_tags(page, tags)
        
    def get_tag_cloud(self):
        return self.dao.get_all_tags()
        
    def get_tagged_pages(self, tag):
        return self.dao.get_tagged_pages(tag)
        
    # manage the works
    ###################################################################
    
    def get_work_names(self):
        return self.dao.get_work_names()
        
    def get_work_pages(self, work_name):
        work = self.dao.get_work(work_name)
        return work.get("pages", [])
        
    def add_to_work(self, work, page):
        w = self.dao.get_work(work)
        if not w.has_key("pages"):
            w["pages"] = []
        if page not in w["pages"]:
            w["pages"].append(page)
        self.dao.save_work(work, w)
        
    def get_works_for_page(self, page):
        page_works = []
        works = self.get_work_names()
        for work_name in works:
            work = self.dao.get_work(work_name)
            if page in work.get("pages", []):
                page_works.append(work_name)
        return page_works
        
    def add_work(self, name, desc):
        work = self.dao.get_work(name)
        if work is None:
            work = {}
        work["name"] = name
        work["description"] = desc
        self.dao.save_work(name, work)