[Erp5-report] r17355 - /erp5/trunk/products/ERP5Form/

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Nov 2 01:01:36 CET 2007


Author: yo
Date: Fri Nov  2 01:01:36 2007
New Revision: 17355

URL: http://svn.erp5.org?rev=17355&view=rev
Log:
Prevent modifying a selection object unnecessarily.

Modified:
    erp5/trunk/products/ERP5Form/ListBox.py
    erp5/trunk/products/ERP5Form/Selection.py
    erp5/trunk/products/ERP5Form/SelectionTool.py

Modified: erp5/trunk/products/ERP5Form/ListBox.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ListBox.py?rev=17355&r1=17354&r2=17355&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ListBox.py (original)
+++ erp5/trunk/products/ERP5Form/ListBox.py Fri Nov  2 01:01:36 2007
@@ -888,7 +888,7 @@
   def getParamDict(self):
     """Return a dictionary of parameters.
     """
-    params = self.getSelection().getParams()
+    params = dict(self.getSelection().getParams())
     if self.getListMethodName():
       # Update parameters, only if list_method is defined.
       # (i.e. do not update parameters in listboxes intended to show a previously defined selection.
@@ -980,6 +980,8 @@
     # objects in the current ListBox configuration.
     if 'select_expression' in params:
       del params['select_expression']
+    
+    self.getSelection().edit(params=params)
     return params
 
   getParamDict = lazyMethod(getParamDict)

Modified: erp5/trunk/products/ERP5Form/Selection.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/Selection.py?rev=17355&r1=17354&r2=17355&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/Selection.py (original)
+++ erp5/trunk/products/ERP5Form/Selection.py Fri Nov  2 01:01:36 2007
@@ -97,7 +97,7 @@
     """
 
     method_path=None
-    params={}
+    params=None
     sort_on=()
     default_sort_on=()
     uids=()
@@ -158,23 +158,25 @@
 
     security.declarePrivate('edit')
     def edit(self, params=None, **kw):
-        setattr(self, MEMCACHED_TOOL_MODIFIED_FLAG_PROPERTY_ID, True)
+        if self.isMemcachedUsed():
+          setattr(self, MEMCACHED_TOOL_MODIFIED_FLAG_PROPERTY_ID, True)
         if params is not None:
-          self.params = {}
-          for key in params.keys():
-            # We should only keep params which do not start with field_
-            # in order to make sure we do not collect unwanted params
-            # resulting form the REQUEST generated by an ERP5Form submit
-            if key[0:6] != 'field_':
-              self.params[key] = params[key]
+          # We should only keep params which do not start with field_
+          # in order to make sure we do not collect unwanted params
+          # resulting form the REQUEST generated by an ERP5Form submit
+          params = dict([item for item in params.iteritems() \
+                         if not item[0].startswith('field_')])
+          if self.params != params:
+            self.params = params
         if kw is not None:
-          for k,v in kw.items():
+          for k,v in kw.iteritems():
             if k in ('domain', 'report', 'domain_path', 'report_path', 'domain_list', 'report_list') or v is not None:
               # XXX Because method_path is an URI, it must be in ASCII.
               #     Shouldn't Zope automatically does this conversion? -yo
-              if k == 'method_path' and type(v) is type(u'a'):
+              if k == 'method_path' and isinstance(v, unicode):
                 v = v.encode('ascii')
-              setattr(self, k, v)
+              if getattr(self, k, None) != v:
+                setattr(self, k, v)
 
     def _p_independent(self) :
       return 1

Modified: erp5/trunk/products/ERP5Form/SelectionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/SelectionTool.py?rev=17355&r1=17354&r2=17355&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/SelectionTool.py (original)
+++ erp5/trunk/products/ERP5Form/SelectionTool.py Fri Nov  2 01:01:36 2007
@@ -200,7 +200,8 @@
         # Set the name so that this selection itself can get its own name.
         selection_object.edit(name = selection_name)
 
-      self._setSelectionToContainer(selection_name, selection_object)
+      if self.getSelectionFor(selection_name) != selection_object:
+        self._setSelectionToContainer(selection_name, selection_object)
 
     security.declareProtected(ERP5Permissions.View, 'getSelectionParamsFor')
     def getSelectionParamsFor(self, selection_name, params=None, REQUEST=None):
@@ -227,7 +228,7 @@
         Sets the selection params for a given selection_name
       """
       selection_object = self.getSelectionFor(selection_name, REQUEST)
-      if selection_object:
+      if selection_object is not None:
         selection_object.edit(params=params)
       else:
         selection_object = Selection(params=params)




More information about the Erp5-report mailing list