From 973c5333559aaa7f6e46c22269ab72a39585afd6 Mon Sep 17 00:00:00 2001 From: helmutm Date: Sat, 8 May 2010 09:05:17 +0000 Subject: [PATCH] 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 --- wiki/base/link.py | 7 ++++--- wiki/generic/mixin.py | 27 +++++++++++---------------- wiki/tracking/link.py | 2 +- z2/generic.py | 15 ++++++++++++++- 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/wiki/base/link.py b/wiki/base/link.py index eed69ae..c9fcb60 100644 --- a/wiki/base/link.py +++ b/wiki/base/link.py @@ -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, diff --git a/wiki/generic/mixin.py b/wiki/generic/mixin.py index 987a3f2..50dd9ef 100644 --- a/wiki/generic/mixin.py +++ b/wiki/generic/mixin.py @@ -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): diff --git a/wiki/tracking/link.py b/wiki/tracking/link.py index 9f8e212..b815c5d 100644 --- a/wiki/tracking/link.py +++ b/wiki/tracking/link.py @@ -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 diff --git a/z2/generic.py b/z2/generic.py index 8a816ac..45acb2e 100644 --- a/z2/generic.py +++ b/z2/generic.py @@ -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):