provide generic implementation of folder methods for Zope 2

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3851 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-05-08 09:05:17 +00:00
parent 6625abe012
commit 973c533355
4 changed files with 30 additions and 21 deletions

View file

@ -54,13 +54,14 @@ class LinkProcessor(object):
targetPageName, params = targetPageName.split('?', 1)
if '#' in targetPageName:
targetPageName, fragment = targetPageName.split('#', 1)
existing = iter(lm.query(source=self.source, name=self.targetName))
if existing:
link = existing.next()
#existing = iter(lm.query(source=self.source, name=self.targetName))
for link in lm.query(source=self.source, name=self.targetName):
#link = existing.next()
if link.target is not None:
target = manager.getObject(link.target)
else:
target = None
break
else:
target = wiki.getPage(targetPageName)
link = lm.createLink(name=self.targetName,

View file

@ -22,10 +22,6 @@ Wiki implementation = mixin classes for Zope2 content objects.
$Id$
"""
try:
from Acquisition import aq_inner, aq_parent
except ImportError:
pass
from BTrees.IOBTree import IOTreeSet
from BTrees.OOBTree import OOBTree
from persistent.mapping import PersistentMapping
@ -117,22 +113,23 @@ class Wiki(BaseWiki):
return self.getId()
def getPages(self):
# TODO: restrict to wiki page objects; use generic access methods
return dict((k, v) for k, v in self.objectItems())
# TODO: restrict to wiki page objects
#return dict((k, v) for k, v in self.objectItems())
return dict((k, v) for k, v in self.getItems())
def createPage(self, name, title, text=u''):
# TODO: delegate to generic folder
# page = self[name] = self.pageFactory(name)
self._setObject(name, self.pageFactory(name))
page = getattr(self, name)
#self._setObject(name, self.pageFactory(name))
#page = getattr(self, name)
self[name] = self.pageFactory(name)
page = self[name]
page.title = title
page.text = text
# TODO: notify(ObjectAddedEvent())
# notify(ObjectAddedEvent()): called by persistent mixin class
return page
def getManager(self):
# TODO: fetch tool/utility in a generic way
return self.portal_wikimanager
# provide in subclass
raise NotImplementedError
class WikiPage(BaseWikiPage):
@ -144,9 +141,7 @@ class WikiPage(BaseWikiPage):
text = property(getText, setText)
def getWiki(self):
# TODO: fetch wiki in a generic way
# return self.getParent()
return aq_parent(aq_inner(self))
return self.getParent()
class LinkManager(BaseLinkManager):

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -22,6 +22,7 @@ Base classes.
$Id$
"""
from Acquisition import aq_inner, aq_parent
from persistent.mapping import PersistentMapping
from zope.app.container.interfaces import IObjectAddedEvent
from zope import component
@ -60,6 +61,9 @@ class GenericObject(object):
self.__generic_attributes__[attr] = value
return value
def getParent(self):
return aq_parent(aq_inner(self))
class GenericFolder(GenericObject):
""" Provide generic (i.e. dictionary-like) folder access to Zope2's
@ -68,6 +72,15 @@ class GenericFolder(GenericObject):
implements(IGenericFolder)
def __getitem__(self, name):
return getattr(self, name)
def __setitem__(self, name, value):
self._setObject(name, value)
def getItems(self, types=None):
return self.objectItems(types)
@component.adapter(IGeneric, IObjectAddedEvent)
def setup(obj, event):