Skip to content

Commit 782fea0

Browse files
author
J. David Ibanez
committed
Avoid warnings on adding/removing objects
1 parent 9f749ad commit 782fea0

File tree

4 files changed

+83
-33
lines changed

4 files changed

+83
-33
lines changed

Localizer.py

+20-17
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@
2525
from Acquisition import aq_parent
2626
from App.class_init import InitializeClass
2727
from OFS.Folder import Folder
28+
from zLOG import LOG, ERROR, INFO, PROBLEM
29+
from zope.interface import implements
2830
from ZPublisher.BeforeTraverse import registerBeforeTraverse, \
2931
unregisterBeforeTraverse, queryBeforeTraverse, NameCaller
30-
from zLOG import LOG, ERROR, INFO, PROBLEM
3132

3233
# Import Localizer modules
34+
from interfaces import ILocalizer
3335
from LocalFiles import LocalDTMLFile
3436
from MessageCatalog import MessageCatalog
3537
from utils import lang_negotiator
@@ -56,6 +58,7 @@ class Localizer(LanguageManager, Folder):
5658
"""
5759

5860
meta_type = 'Localizer'
61+
implements(ILocalizer)
5962

6063
id = 'Localizer'
6164

@@ -82,22 +85,6 @@ def __init__(self, title, languages):
8285
#######################################################################
8386
# API / Private
8487
#######################################################################
85-
86-
# Hook/unhook the traversal machinery
87-
# Support for copy, cut and paste operations
88-
def manage_beforeDelete(self, item, container):
89-
if item is self:
90-
unregisterBeforeTraverse(container, self.meta_type)
91-
92-
93-
def manage_afterAdd(self, item, container):
94-
if item is self:
95-
id = self.id
96-
container = container.this()
97-
hook = NameCaller(id)
98-
registerBeforeTraverse(container, hook, self.meta_type)
99-
100-
10188
def _getCopy(self, container):
10289
return Localizer.inheritedAttribute('_getCopy')(self, container)
10390

@@ -249,3 +236,19 @@ def changeLanguage(self, lang, goto=None, expires=None):
249236

250237

251238
InitializeClass(Localizer)
239+
240+
241+
# Hook/unhook the traversal machinery
242+
# Support for copy, cut and paste operations
243+
244+
def Localizer_moved(object, event):
245+
container = event.oldParent
246+
if container:
247+
unregisterBeforeTraverse(container, object.meta_type)
248+
249+
container = event.newParent
250+
if container:
251+
id = object.id
252+
container = container.this()
253+
hook = NameCaller(id)
254+
registerBeforeTraverse(container, hook, object.meta_type)

MessageCatalog.py

+22-16
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,13 @@
4343
from OFS.SimpleItem import SimpleItem
4444
from Persistence import PersistentMapping
4545
from ZPublisher import HTTPRequest
46-
from zope.i18n.interfaces import ITranslationDomain
47-
from zope.interface import implements
4846
from zope.component import getSiteManager
4947
from zope.i18n import interpolate
48+
from zope.i18n.interfaces import ITranslationDomain
49+
from zope.interface import implements
5050

5151
# Import from Localizer
52+
from interfaces import IMessageCatalog
5253
from LanguageManager import LanguageManager
5354
from LocalFiles import LocalDTMLFile
5455
from utils import charsets, lang_negotiator, _
@@ -146,11 +147,14 @@ def manage_addMessageCatalog(self, id, title, languages, sourcelang=None,
146147
return self.manage_main(self, REQUEST)
147148

148149

150+
149151
class MessageCatalog(LanguageManager, ObjectManager, SimpleItem):
150152
"""Stores messages and their translations...
151153
"""
152154

153155
meta_type = 'MessageCatalog'
156+
implements(IMessageCatalog)
157+
154158

155159
security = ClassSecurityInfo()
156160

@@ -177,8 +181,6 @@ def __init__(self, id, title, sourcelang, languages):
177181
# ITranslationDomain interface
178182
# zope.i18n.interfaces.ITranslationDomain
179183
#######################################################################
180-
implements(ITranslationDomain)
181-
182184
@property
183185
def domain(self):
184186
""" """
@@ -192,18 +194,6 @@ def translate(self, msgid, mapping=None, context=None,
192194
return interpolate(msgstr, mapping)
193195

194196

195-
def manage_afterAdd(self, item, container):
196-
if item is self:
197-
sm = getSiteManager(container)
198-
sm.registerUtility(self, ITranslationDomain, self.domain)
199-
200-
201-
def manage_beforeDelete(self, item, container):
202-
if item is self:
203-
sm = getSiteManager(container)
204-
sm.unregisterUtility(self, ITranslationDomain, self.domain)
205-
206-
207197
#######################################################################
208198
# Private API
209199
#######################################################################
@@ -919,3 +909,19 @@ def PUT(self, REQUEST, RESPONSE):
919909

920910
InitializeClass(MessageCatalog)
921911
InitializeClass(POFile)
912+
913+
914+
915+
def MessageCatalog_moved(object, event):
916+
# FIXME This does not work if what we move is the folder that contains
917+
# the message catalog
918+
container = event.oldParent
919+
if container:
920+
sm = getSiteManager(container)
921+
sm.unregisterUtility(object, ITranslationDomain, event.oldName)
922+
923+
container = event.newParent
924+
if container:
925+
sm = getSiteManager(container)
926+
sm.registerUtility(object, ITranslationDomain, event.newName)
927+

configure.zcml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<configure xmlns="http://namespaces.zope.org/zope">
2+
3+
<subscriber
4+
for="Products.Localizer.Localizer.Localizer
5+
zope.lifecycleevent.interfaces.IObjectMovedEvent"
6+
handler="Products.Localizer.Localizer.Localizer_moved" />
7+
8+
<subscriber
9+
for="Products.Localizer.MessageCatalog.MessageCatalog
10+
zope.lifecycleevent.interfaces.IObjectMovedEvent"
11+
handler="Products.Localizer.MessageCatalog.MessageCatalog_moved" />
12+
13+
</configure>

interfaces.py

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# -*- coding: UTF-8 -*-
2+
# Copyright (C) 2010 Juan David Ibáñez Palomar <[email protected]>
3+
#
4+
# This program is free software: you can redistribute it and/or modify
5+
# it under the terms of the GNU General Public License as published by
6+
# the Free Software Foundation, either version 3 of the License, or
7+
# (at your option) any later version.
8+
#
9+
# This program is distributed in the hope that it will be useful,
10+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
# GNU General Public License for more details.
13+
#
14+
# You should have received a copy of the GNU General Public License
15+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
17+
# Import from Zope
18+
from zope.interface import Interface
19+
from zope.i18n.interfaces import ITranslationDomain
20+
21+
22+
class ILocalizer(Interface):
23+
pass
24+
25+
26+
class IMessageCatalog(ITranslationDomain):
27+
pass
28+

0 commit comments

Comments
 (0)