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) targetPageName, params = targetPageName.split('?', 1)
if '#' in targetPageName: if '#' in targetPageName:
targetPageName, fragment = targetPageName.split('#', 1) targetPageName, fragment = targetPageName.split('#', 1)
existing = iter(lm.query(source=self.source, name=self.targetName)) #existing = iter(lm.query(source=self.source, name=self.targetName))
if existing: for link in lm.query(source=self.source, name=self.targetName):
link = existing.next() #link = existing.next()
if link.target is not None: if link.target is not None:
target = manager.getObject(link.target) target = manager.getObject(link.target)
else: else:
target = None target = None
break
else: else:
target = wiki.getPage(targetPageName) target = wiki.getPage(targetPageName)
link = lm.createLink(name=self.targetName, link = lm.createLink(name=self.targetName,

View file

@ -22,10 +22,6 @@ Wiki implementation = mixin classes for Zope2 content objects.
$Id$ $Id$
""" """
try:
from Acquisition import aq_inner, aq_parent
except ImportError:
pass
from BTrees.IOBTree import IOTreeSet from BTrees.IOBTree import IOTreeSet
from BTrees.OOBTree import OOBTree from BTrees.OOBTree import OOBTree
from persistent.mapping import PersistentMapping from persistent.mapping import PersistentMapping
@ -117,22 +113,23 @@ class Wiki(BaseWiki):
return self.getId() return self.getId()
def getPages(self): def getPages(self):
# TODO: restrict to wiki page objects; use generic access methods # 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.objectItems())
return dict((k, v) for k, v in self.getItems())
def createPage(self, name, title, text=u''): def createPage(self, name, title, text=u''):
# TODO: delegate to generic folder #self._setObject(name, self.pageFactory(name))
# page = self[name] = self.pageFactory(name) #page = getattr(self, name)
self._setObject(name, self.pageFactory(name)) self[name] = self.pageFactory(name)
page = getattr(self, name) page = self[name]
page.title = title page.title = title
page.text = text page.text = text
# TODO: notify(ObjectAddedEvent()) # notify(ObjectAddedEvent()): called by persistent mixin class
return page return page
def getManager(self): def getManager(self):
# TODO: fetch tool/utility in a generic way # provide in subclass
return self.portal_wikimanager raise NotImplementedError
class WikiPage(BaseWikiPage): class WikiPage(BaseWikiPage):
@ -144,9 +141,7 @@ class WikiPage(BaseWikiPage):
text = property(getText, setText) text = property(getText, setText)
def getWiki(self): def getWiki(self):
# TODO: fetch wiki in a generic way return self.getParent()
# return self.getParent()
return aq_parent(aq_inner(self))
class LinkManager(BaseLinkManager): 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 # 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 # 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 # 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 # it under the terms of the GNU General Public License as published by
@ -22,6 +22,7 @@ Base classes.
$Id$ $Id$
""" """
from Acquisition import aq_inner, aq_parent
from persistent.mapping import PersistentMapping from persistent.mapping import PersistentMapping
from zope.app.container.interfaces import IObjectAddedEvent from zope.app.container.interfaces import IObjectAddedEvent
from zope import component from zope import component
@ -60,6 +61,9 @@ class GenericObject(object):
self.__generic_attributes__[attr] = value self.__generic_attributes__[attr] = value
return value return value
def getParent(self):
return aq_parent(aq_inner(self))
class GenericFolder(GenericObject): class GenericFolder(GenericObject):
""" Provide generic (i.e. dictionary-like) folder access to Zope2's """ Provide generic (i.e. dictionary-like) folder access to Zope2's
@ -68,6 +72,15 @@ class GenericFolder(GenericObject):
implements(IGenericFolder) 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) @component.adapter(IGeneric, IObjectAddedEvent)
def setup(obj, event): def setup(obj, event):