move update of keyreference upon renaming of an object to separate module that will be called by an event handler; mark objects that may be addressed by an intid with an interface

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3948 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-08-10 17:46:08 +00:00
parent e50ba0a780
commit f9ded2be00
3 changed files with 48 additions and 12 deletions

View file

@ -27,7 +27,6 @@ from BTrees.OOBTree import OOBTree
from persistent.mapping import PersistentMapping
from zope.app.intid import IntIds
from zope.app.intid.interfaces import IIntIds
from zope.app.keyreference.interfaces import IKeyReference
from zope.cachedescriptors.property import Lazy
from zope import component
from zope.component import adapts
@ -91,7 +90,6 @@ class WikiManager(BaseWikiManager):
def renameWiki(self, wiki, newName):
wiki.rename(newName)
moveKeyReference(self.getPlugin(IIntIds), wiki)
def listWikis(self):
for uid in self.wikiUids:
@ -161,11 +159,3 @@ class LinkManager(BaseLinkManager):
def getObject(self, uid):
return self.manager.getObject(uid)
def moveKeyReference(intIds, obj):
""" Make sure entry in intIds utility is updated after a move or rename.
"""
key = IKeyReference(obj)
uid = intIds.getId(obj)
intIds.refs[uid] = key
intIds.ids[key] = uid

View file

@ -26,6 +26,12 @@ from zope.interface import Interface, Attribute
from zope import schema
class IIntIdProvider(Interface):
""" An object that may be addressed by an intid (a unique id
represented by an integer) that is registered in a wiki manager plugin.
"""
class IWikiConfigInfo(Interface):
""" A collection of configuration settings.
"""
@ -93,7 +99,7 @@ class IWikiManager(Interface):
"""
class IWiki(Interface):
class IWiki(IIntIdProvider):
""" A collection of wiki pages, or - more generally - wiki components.
"""
@ -139,7 +145,7 @@ class IWebResource(Interface):
"""
class IWikiPage(IWebResource):
class IWikiPage(IWebResource, IIntIdProvider):
""" An object representing a page of a wiki.
"""

40
z2/util.py Normal file
View file

@ -0,0 +1,40 @@
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
Zope2-related utility functions.
$Id$
"""
from zope.app.keyreference.interfaces import IKeyReference
def moveKeyReference(intIds, obj):
""" Make sure entry in intIds utility is updated after a move or rename.
"""
key = IKeyReference(obj, None)
if key is not None:
try:
uid = intIds.getId(obj)
except KeyError:
return
if uid is not None:
intIds.refs[uid] = key
intIds.ids[key] = uid