[Erp5-report] r13891 - in /erp5/trunk/products/ERP5Form: ./ dtml/ tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Apr 3 15:09:47 CEST 2007
Author: kazuhiko
Date: Tue Apr 3 15:09:37 2007
New Revision: 13891
URL: http://svn.erp5.org?rev=13891&view=rev
Log:
* make a ZMI interface for configuring a storage for Selection Tool
* return [] instead of raising a exception in getSelectionNameList with memcached tool
Added:
erp5/trunk/products/ERP5Form/dtml/SelectionTool_configure.dtml
Modified:
erp5/trunk/products/ERP5Form/SelectionTool.py
erp5/trunk/products/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml
erp5/trunk/products/ERP5Form/tests/testSelectionTool.py
Modified: erp5/trunk/products/ERP5Form/SelectionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/SelectionTool.py?rev=13891&r1=13890&r2=13891&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/SelectionTool.py (original)
+++ erp5/trunk/products/ERP5Form/SelectionTool.py Tue Apr 3 15:09:37 2007
@@ -36,8 +36,8 @@
from Globals import InitializeClass, DTMLFile, PersistentMapping, get_request
from ZTUtils import make_query
from AccessControl import ClassSecurityInfo
+from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5Type import Permissions as ERP5Permissions
-from Products.ERP5Type import allowMemcachedTool
from Products.ERP5Form import _dtmldir
from Selection import Selection, DomainSelection
from ZPublisher.HTTPRequest import FileUpload
@@ -59,7 +59,7 @@
class SelectionError( Exception ):
pass
-class SelectionTool( UniqueObject, SimpleItem ):
+class SelectionTool( BaseTool, UniqueObject, SimpleItem ):
"""
The SelectionTool object is the place holder for all
methods and algorithms related to persistent selections
@@ -68,7 +68,7 @@
id = 'portal_selections'
meta_type = 'ERP5 Selections'
-
+ portal_type = 'Selection Tool'
security = ClassSecurityInfo()
#
@@ -79,6 +79,9 @@
},
{ 'label' : 'View Selections'
, 'action' : 'manage_view_selections'
+ },
+ { 'label' : 'Configure'
+ , 'action' : 'manage_configure'
} ))
security.declareProtected( ERP5Permissions.ManagePortal
@@ -89,6 +92,36 @@
, 'manage_view_selections' )
manage_view_selections = DTMLFile( 'SelectionTool_manageViewSelections', _dtmldir )
+ security.declareProtected( ERP5Permissions.ManagePortal
+ , 'manage_configure' )
+ manage_configure = DTMLFile( 'SelectionTool_configure', _dtmldir )
+
+ # storages of SelectionTool
+ storage_list = ('Persistent Mapping', 'Memcached Tool')
+
+ security.declareProtected( ERP5Permissions.ManagePortal, 'setStorage')
+ def setStorage(self, value, RESPONSE=None):
+ """
+ Set the storage of Selection Tool.
+ """
+ if value in self.storage_list:
+ self.storage = value
+ else:
+ raise ValueError, 'Given storage type (%s) is now supported.' % (value,)
+ if RESPONSE is not None:
+ RESPONSE.redirect('%s/manage_configure' % (self.absolute_url()))
+
+ def getStorage(self, default=None):
+ if default is None:
+ default = self.storage_list[0]
+ storage = getattr(self, 'storage', default)
+ if storage is not default and storage not in self.storage_list:
+ storage = storage_list[0]
+ return storage
+
+ def isMemcachedUsed(self):
+ return self.getStorage() == 'Memcached Tool'
+
def _redirectToOriginalForm(self, REQUEST=None, form_id=None, dialog_id=None,
query_string=None,
no_reset=False, no_report_depth=False):
@@ -125,8 +158,8 @@
"""
Returns the selection names of the current user.
"""
- if allowMemcachedTool():
- raise SelectionError, 'getSelectionNameList is not supported if you use memcached tool.'
+ if self.isMemcachedUsed():
+ return []
user_id = self.portal_membership.getAuthenticatedMember().getUserName()
if user_id is not None:
prefix = '%s-' % user_id
@@ -155,7 +188,7 @@
"""
value = getattr(self, '_v_selection_data', None)
if value is None:
- if allowMemcachedTool():
+ if self.isMemcachedUsed():
value = self.getPortalObject().portal_memcached.getMemcachedDict(key_prefix='selection_tool')
else:
value = PersistentMapping()
Added: erp5/trunk/products/ERP5Form/dtml/SelectionTool_configure.dtml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/dtml/SelectionTool_configure.dtml?rev=13891&view=auto
==============================================================================
--- erp5/trunk/products/ERP5Form/dtml/SelectionTool_configure.dtml (added)
+++ erp5/trunk/products/ERP5Form/dtml/SelectionTool_configure.dtml Tue Apr 3 15:09:37 2007
@@ -1,0 +1,23 @@
+<dtml-var manage_page_header>
+<dtml-var manage_tabs>
+
+<h3>Selection Tool configuration</h3>
+<p>
+ Selection Tool supports Memcached Tool and Persistent Mapping for its storage.
+</p>
+<div>
+ Current setting: <dtml-var getStorage html_quote>
+</div>
+
+<form action="setStorage" method="post">
+ <select name="value">
+ <dtml-in "storage_list">
+ <dtml-let selected="_['sequence-item'] == getStorage() and ' selected' or ''">
+ <option value="&dtml-sequence-item;"&dtml-selected;>&dtml-sequence-item;</option>
+ </dtml-let>
+ </dtml-in>
+ </select>
+ <input type="submit" value="Change"/>
+</form>
+
+<dtml-var manage_page_footer>
Modified: erp5/trunk/products/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml?rev=13891&r1=13890&r2=13891&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml (original)
+++ erp5/trunk/products/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml Tue Apr 3 15:09:37 2007
@@ -5,6 +5,11 @@
form_title='View Selections',
help_product='ERP5Form',
)">
+<dtml-if isMemcachedUsed>
+<p class="form-help">
+Listing active selections is not supported if you use memcached tool.
+</p>
+<dtml-else>
<p class="form-help">
This page show the active selections for the current user.
It is only useful for debug purposes.
@@ -25,4 +30,5 @@
</dtml-in>
</table>
+</dtml-if>
<dtml-var manage_page_footer>
Modified: erp5/trunk/products/ERP5Form/tests/testSelectionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/tests/testSelectionTool.py?rev=13891&r1=13890&r2=13891&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/tests/testSelectionTool.py (original)
+++ erp5/trunk/products/ERP5Form/tests/testSelectionTool.py Tue Apr 3 15:09:37 2007
@@ -40,7 +40,6 @@
from Testing import ZopeTestCase
from Products.ERP5Type.Utils import get_request
from Products.ERP5Form.Selection import Selection
-from Products.ERP5Type import allowMemcachedTool
class TestSelectionTool(ERP5TypeTestCase):
@@ -64,17 +63,17 @@
def testGetSelectionNameList(self, quiet=quiet, run=run_all_test):
if not run: return
- if allowMemcachedTool():
- from Products.ERP5Form.SelectionTool import SelectionError
- self.assertRaises(SelectionError,
- self.portal_selections.getSelectionNameList)
- self.assertRaises(SelectionError,
- self.portal_selections.getSelectionNames)
- else:
- self.assertEquals(['test_selection'],
- self.portal_selections.getSelectionNames())
- self.assertEquals(['test_selection'],
- self.portal_selections.getSelectionNameList())
+ # use persistent mapping by default
+ self.assertEquals(['test_selection'],
+ self.portal_selections.getSelectionNameList())
+ self.assertEquals(['test_selection'],
+ self.portal_selections.getSelectionNames())
+ # use memcached tool
+ self.portal_selections.setStorage('Memcached Tool')
+ self.assertEquals([],
+ self.portal_selections.getSelectionNameList())
+ self.assertEquals([],
+ self.portal_selections.getSelectionNames())
def testGetSelectionFor(self, quiet=quiet, run=run_all_test):
if not run: return
More information about the Erp5-report
mailing list