work in progress: wiki - construct base interfaces and sample base implementations

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3060 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-12-15 09:47:35 +00:00
parent 28b0abcf56
commit 40861ccff1
4 changed files with 130 additions and 6 deletions

View file

@ -88,10 +88,10 @@ class DataProvider(object):
if key.startswith('@@'):
if client is None:
return '$' + key
viewName = key[2:]
request = self.data.get('request') or TestRequest()
view = component.queryMultiAdapter(
(client.manager, request), name=viewName)
view = self.getView(key[2:])
#request = self.data.get('request') or TestRequest()
#view = component.queryMultiAdapter(
# (client.manager, request), name=key[2:])
if view is not None:
return view()
else:
@ -124,6 +124,11 @@ class DataProvider(object):
else:
raise KeyError(key)
def getView(self, name):
request = self.data.get('request') or TestRequest()
return component.queryMultiAdapter(
(self.context.client.manager, request), name=viewName)
class MessageTemplate(Template):

View file

@ -5,6 +5,31 @@ Yet Another WikiWiki Framework
($Id$)
An Example for an Elementary Wiki Structure
===========================================
>>> from cybertools.wiki.base.wiki import WikiManager, Wiki
We create a wiki manager with one wiki that in turn contains a simple
start page.
>>> manager = WikiManager()
>>> wiki = manager.addWiki(Wiki('demo_wiki'))
>>> startPage = wiki.createPage('start_page')
We format the content of the start page using the restructured text format.
>>> startPage.text = '''
... **Welcome to the Demo Wiki**
... '''
As we have not yet registered any formatting plugins rendering the page
returns it content unchanged.
>>> print startPage.render()
**Welcome to the Demo Wiki**
A Very Basic Wiki Format
========================

View file

@ -33,14 +33,48 @@ class WikiManager(object):
def __init__(self):
self.wikis = {}
self.plugins = {}
def addWiki(self, wiki):
name = wiki.name
if name in self.wikis:
raise ValueError("Wiki '%s' already registered." % name)
self.wikis[name] = wiki
wiki.manager = self
return wiki
class Wiki(object):
implements(IWiki)
def __init__(self, name, title=None):
self.name = name
self.title = title or name
self.pages = {}
def createPage(self, name, title=None):
if name in self.pages:
raise ValueError("Name '%s' already present." % name)
page = self.pages[name] = WikiPage(name, title)
page.wiki = self
return page
class WikiPage(object):
implements(IWikiPage)
text = u''
def __init__(self, name, title=None):
self.name = name
self.title = title or name
def render(self):
return self.write(self.parse())
def parse(self):
return self.text
def write(self, tree):
return tree

View file

@ -26,7 +26,67 @@ from zope.interface import Interface, Attribute
class IWikiManager(Interface):
"""Manages (and possibly contains) all kinds of wiki-related objects.
""" Manages wikis and wiki-related objects, like plugins.
"""
wikis = Attribute('A collection of wikis managed by this object.')
def addWiki(wiki):
""" Register the wiki given.
"""
def removeWiki(wiki):
""" Remove the wiki given from the list of wikis.
"""
class IWiki(Interface):
""" A collection of wiki pages, or - more generally - wiki components.
"""
manager = Attribute('The wiki manager this wiki is managed by.')
name = Attribute('The name or address of the wiki unique within the '
'scope of the wiki manager.')
pages = Attribute('A collection of the pages belonging to this wiki.')
def createPage(name, title=None):
""" Create a new wiki page identified by the name (address -
may be a path) given and return it.
"""
def removePage(name):
""" Remove the page identified by name from the wiki, cleaning up
all information related to the page.
"""
class IWikiPage(Interface):
""" An object representing a page of a wiki.
"""
wiki = Attribute('The wiki this page belongs to.')
name = Attribute('A page name or address unique within the wiki.')
title = Attribute('A short string describing the wiki page the may be '
'use as a page title.')
text = Attribute('The page content in input text format.')
def render():
""" Convert the text of the page to presentation format.
"""
def parse():
""" Convert the text of the page to a document tree.
"""
def write(tree):
""" Convert the document tree given to presentation format.
"""
# wiki elements
class ILinkManager(Interface):
"""Manages (and possibly contains) all kinds of wiki-related links.
"""
def registerLink(link):