Skip to content

Commit 14a6a76

Browse files
author
J. David Ibanez
committed
Generalize the upgrade framework
Move upgrade code to the most common class: LanguageManager
1 parent 1e86675 commit 14a6a76

9 files changed

+74
-91
lines changed

LanguageManager.py

+37
Original file line numberDiff line numberDiff line change
@@ -160,12 +160,22 @@ def get_selected_language(self, **kw):
160160

161161
def filtered_manage_options(self, REQUEST=None):
162162
options = Tabs.filtered_manage_options(self, REQUEST=REQUEST)
163+
164+
# Insert the upgrade form if needed
165+
if self._needs_upgrade():
166+
options.insert(0,
167+
{'action': 'manage_upgradeForm',
168+
'label': u'Upgrade',
169+
'help': ('Localizer', 'LM_upgrade.stx')})
170+
171+
# Translate the labels
163172
r = []
164173
for option in options:
165174
option = option.copy()
166175
option['label'] = _(option['label'])
167176
r.append(option)
168177

178+
# Ok
169179
return r
170180

171181

@@ -212,4 +222,31 @@ def manage_changeDefaultLang(self, language, REQUEST=None, RESPONSE=None):
212222
manage_page_header = LocalDTMLFile('ui/manage_page_header', globals())
213223

214224

225+
########################################################################
226+
# Upgrade
227+
def _needs_upgrade(self):
228+
return False
229+
230+
231+
def _upgrade(self):
232+
pass
233+
234+
235+
security.declarePublic('need_upgrade')
236+
def need_upgrade(self):
237+
""" """
238+
return self._needs_upgrade()
239+
240+
241+
security.declareProtected(
242+
'Manage Access Rules', 'manage_upgradeForm', 'manage_upgrade')
243+
manage_upgradeForm = LocalDTMLFile('ui/LM_upgrade', globals())
244+
def manage_upgrade(self, REQUEST, RESPONSE):
245+
""" """
246+
self._upgrade()
247+
RESPONSE.redirect('manage_main')
248+
249+
250+
251+
215252
InitializeClass(LanguageManager)

LocalPropertyManager.py

+2-14
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
from LanguageManager import LanguageManager
2727
from LocalAttributes import LocalAttribute, LocalAttributesBase
2828
from LocalFiles import LocalDTMLFile
29-
from utils import needs_upgrade
3029

3130

3231
# FIXME
@@ -63,10 +62,6 @@ def getLocalPropertyManager(self):
6362
return self
6463

6564
manage_options = (
66-
{'action': 'manage_upgradeForm',
67-
'filter': needs_upgrade,
68-
'label': u'Upgrade',
69-
'help': ('Localizer', 'LPM_upgrade.stx')},
7065
{'action': 'manage_localPropertiesForm',
7166
'label': u'Local properties',
7267
'help': ('Localizer', 'LPM_properties.stx')},
@@ -279,15 +274,11 @@ def get_default_language(self):
279274

280275

281276
# Upgrading..
282-
security.declarePublic('need_upgrade')
283-
def need_upgrade(self):
284-
""" """
277+
def _needs_upgrade(self):
285278
return hasattr(self.aq_base, 'original_language')
286279

287280

288-
manage_upgradeForm = LocalDTMLFile('ui/LPM_upgrade', globals())
289-
def manage_upgrade(self, REQUEST=None, RESPONSE=None):
290-
""" """
281+
def _upgrade(self):
291282
# In version 0.7 the language management logic moved to the
292283
# mixin class LanguageManager, as a consequence the attribute
293284
# "original_language" changes its name to "_default_language".
@@ -307,9 +298,6 @@ def manage_upgrade(self, REQUEST=None, RESPONSE=None):
307298
## self._local_properties[k][i] = (j, time())
308299
## self._p_changed = 1
309300

310-
if REQUEST is not None:
311-
return self.manage_main(self, REQUEST)
312-
313301

314302
# Define <id>_<lang> attributes, useful for example to catalog
315303
def __getattr__(self, name):

Localizer.py

+21-26
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
# Import Localizer modules
3232
from LocalFiles import LocalDTMLFile
3333
from MessageCatalog import MessageCatalog
34-
from utils import lang_negotiator, needs_upgrade
34+
from utils import lang_negotiator
3535
from LanguageManager import LanguageManager
3636

3737

@@ -65,12 +65,8 @@ class Localizer(LanguageManager, Folder):
6565

6666
security = ClassSecurityInfo()
6767

68-
manage_options = (
69-
{'action': 'manage_upgradeForm',
70-
'filter': needs_upgrade,
71-
'label': u'Upgrade',
72-
'help': ('Localizer', 'Localizer_upgrade.stx')},
73-
Folder.manage_options[0]) \
68+
manage_options = \
69+
(Folder.manage_options[0],) \
7470
+ LanguageManager.manage_options \
7571
+ Folder.manage_options[1:]
7672

@@ -82,6 +78,10 @@ def __init__(self, title, languages):
8278
self._default_language = languages[0]
8379

8480

81+
#######################################################################
82+
# API / Private
83+
#######################################################################
84+
8585
# Hook/unhook the traversal machinery
8686
# Support for copy, cut and paste operations
8787
def manage_beforeDelete(self, item, container):
@@ -101,6 +101,20 @@ def _getCopy(self, container):
101101
return Localizer.inheritedAttribute('_getCopy')(self, container)
102102

103103

104+
def _needs_upgrade(self):
105+
return not self.hooked()
106+
107+
108+
def _upgrade(self):
109+
# Upgrade to 0.9
110+
if not self.hooked():
111+
self.manage_hook(1)
112+
113+
114+
#######################################################################
115+
# API / Public
116+
#######################################################################
117+
104118
# Get some data
105119
security.declarePublic('get_supported_languages')
106120
def get_supported_languages(self):
@@ -233,23 +247,4 @@ def changeLanguage(self, lang, goto=None, expires=None):
233247
response.redirect(goto)
234248

235249

236-
# Upgrading..
237-
security.declarePublic('need_upgrade')
238-
def need_upgrade(self):
239-
""" """
240-
return not self.hooked()
241-
242-
243-
security.declareProtected('Manage Access Rules',
244-
'manage_upgradeForm', 'manage_upgrade')
245-
manage_upgradeForm = LocalDTMLFile('ui/Localizer_upgrade', globals())
246-
def manage_upgrade(self, REQUEST, RESPONSE):
247-
""" """
248-
# Upgrade to 0.9
249-
if not self.hooked():
250-
self.manage_hook(1)
251-
252-
RESPONSE.redirect('manage_main')
253-
254-
255250
InitializeClass(Localizer)

help/LM_upgrade.stx

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Localizer - Upgrade LocalPropertyManager
2+
3+
Description
4+
5+
This view allows to upgrade an object when a new version of its class
6+
has been installed that requires changes to the object.
7+
8+
This feature is specific to the Localizer product.
9+
10+
Controls
11+
12+
Upgrade -- Upgrades the object.

help/LPM_upgrade.stx

-11
This file was deleted.

help/Localizer_upgrade.stx

-10
This file was deleted.

ui/Localizer_upgrade.dtml ui/LM_upgrade.dtml

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<dtml-if need_upgrade>
66
<p class="form-help">
77
<dtml-gettext>
8-
This <tt>Localizer</tt> object needs to be upgraded.
8+
This object must be upgraded.
99
</dtml-gettext>
1010
</p>
1111

@@ -18,7 +18,7 @@
1818
<dtml-else>
1919
<p class="form-help">
2020
<dtml-gettext>
21-
This <tt>Localizer</tt> object doesn't need to be upgraded.
21+
This object is up-to-date.
2222
</dtml-gettext>
2323
</p>
2424
</dtml-if>

ui/LPM_upgrade.dtml

-21
This file was deleted.

utils.py

-7
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,6 @@ def lang_negotiator(available_languages):
5757
init_language_selector(lang_negotiator)
5858

5959

60-
###########################################################################
61-
# Upgrade
62-
###########################################################################
63-
def needs_upgrade(obj):
64-
return obj.need_upgrade()
65-
66-
6760
###########################################################################
6861
# Provide an API to access translations stored as MO files in the 'locale'
6962
# directory.

0 commit comments

Comments
 (0)